Серверное приложение для доступа клиентов к банковским услугам через 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 дней
В репозитории находится файл 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
- URL:
- SMTP: Email-уведомления о регистрации, операциях и просрочках платежей
Автоматическое выполнение задач с периодичностью 12 часов:
- Проверка графика платежей на сегодня и просрочки
- Попытка списания суммы платежа со счета клиента
- При недостатке средств - начисление штрафа (+10% к сумме)
- Производительность: до 100 RPS на одном экземпляре
- Логирование: настроено на уровнях DEBUG/INFO/WARN/ERROR в JSON-формате
- Тесты: покрытие не менее 70% сервисного уровня
- Документация API: OpenAPI 3 (Swagger UI)
- CI/CD: настроены линтеры, тесты и сборка Docker-образа