Skip to content

mephi-learn/bank

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Банковский REST API сервис

Описание проекта

Серверное приложение для доступа клиентов к банковским услугам через REST API. Сервис обеспечивает полнофункциональное взаимодействие с банковскими продуктами, включая работу с пользователями, счетами, картами, переводами, кредитами и аналитикой.

Запуск

go run ./app/server -config ./config.yaml

Технологический стек

  • Язык программирования: Go 1.23+
  • Маршрутизация: http.ServeMux
  • База данных: PostgreSQL 17 с расширением pgcrypto
  • Драйвер БД: github.com/lib/pq (или pgx)
  • Аутентификация: JWT (github.com/golang-jwt/jwt/v5)
  • Логирование: log/slog
  • Шифрование/хеширование: bcrypt, HMAC-SHA256, PGP
  • Email: gopkg.in/gomail.v2
  • Обработка XML: github.com/beevik/etree
  • Планировщик задач: стандартный time.Ticker / cron-библиотека

Функциональные возможности

Пользователи

  • Регистрация новых пользователей с уникальными email и username
  • Аутентификация с выдачей JWT-токена сроком на 24 часа

Счета

  • Создание банковских счетов
  • Переводы средств между счетами
  • Пополнение и списание средств со счета

Карты

  • Выпуск виртуальных карт с безопасным хранением данных:
    • Номер карты генерируется по алгоритму Луна
    • Номер и срок действия хранятся в зашифрованном виде (PGP)
    • CVV хранится в виде bcrypt-хеша
  • Просмотр данных карты владельцем
  • Оплата с использованием карты

Кредиты

  • Оформление кредитов с аннуитетными платежами
  • Предоставление графика платежей
  • Автоматическое списание платежей через планировщик
  • Штрафы за просрочку платежа (+10% к сумме)

Аналитика

  • Анализ доходов и расходов за месяц
  • Оценка кредитной нагрузки
  • Прогнозирование баланса на срок до 365 дней

Структура API

В репозитории находится файл bank.yaml, который нужно импортировать в insomnia, там всё расписано

Модель данных

Таблица Ключевые поля
clients id (PK), email (UNIQUE), username (UNIQUE), password_hash, created_at
accounts id, user_id (FK), balance, currency='RUB', created_at
cards id, user_id (FK), card_number (bytea PGP), expire (bytea PGP), cvv_hash, created_at
transactions id, account_id (FK), amount, type [DEBIT/CREDIT], status, created_at
credits id, account_id (FK), principal, interest_rate, term_months, start_date, status, created_at

Безопасность

  • Пароли: хеширование с использованием bcrypt (cost 12+)
  • JWT: подпись HMAC-SHA256, срок действия 24 часа
  • Данные карт:
    • Номер и срок карты: PGP-симметричное шифрование
    • CVV: bcrypt-хеш
    • Целостность: HMAC-SHA256
  • Авторизация: проверка владения ресурсами по userID

Внешние интеграции

  • ЦБ РФ: интеграция с SOAP API для получения ключевой ставки
    • URL: https://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx
    • Парсинг XML-ответов с использованием etree
  • SMTP: Email-уведомления о регистрации, операциях и просрочках платежей

Планировщик задач

Автоматическое выполнение задач с периодичностью 12 часов:

  • Проверка графика платежей на сегодня и просрочки
  • Попытка списания суммы платежа со счета клиента
  • При недостатке средств - начисление штрафа (+10% к сумме)

Нефункциональные характеристики

  • Производительность: до 100 RPS на одном экземпляре
  • Логирование: настроено на уровнях DEBUG/INFO/WARN/ERROR в JSON-формате
  • Тесты: покрытие не менее 70% сервисного уровня
  • Документация API: OpenAPI 3 (Swagger UI)
  • CI/CD: настроены линтеры, тесты и сборка Docker-образа

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages