Требования
Основные сущности:
- Банк
- Счёт
- Пользователь
- Транзакция
Стек:
- Java 17
- Gradle
- PostgreSQL
- JDBC
- Lombok
- '*' Servlets
- '*' Docker
**!!! Spring и Hibernate использовать нельзя**
Объём данных:
- Банков ≥ 5
- Пользователей ≥ 20
- Счетов ≥ 40
- Также у пользователей могут быть счета в разных банках
Требования
- Реализовать операции пополнения и снятия средств со счета
- Реализовать возможность перевода средств другому клиенту Clever-Bank и клиенту другого банка. При переводе средств в другой банк использовать одну транзакцию и обеспечить безопасность. С учётом работы в многопоточной среде (избегать deadlock)
- Регулярно, по расписанию (раз в полминуты), проверять, нужно ли начислять проценты (1% - значение подставляется из конфигурационного файла) на остаток счета в конце месяца ● Проверку и начисление процентов нужно реализовать асинхронно
- Значения хранить в конфигурационном файле - .yml
- После каждой операции необходимо сформировать чек (Приложение I) ● Чеки сохранять в папку check, в корне проекта
- Применить шаблоны проектирования в разработке приложения
- Соблюдать принципы ООП (объектно-ориентированное программирование), SOLID (принципы SOLID: единство ответственности, открытость/закрытость, подстановка Лисков, разделение интерфейсов и инверсия зависимостей), KISS (простота и интуитивность), DRY (не повторяться) и YAGNI (не добавлять ненужные функции)
- Гарантировать, что код читаемый, поддерживаемый и содержит документацию в формате JavaDoc, соблюдается java code conventions
- Разместить проект в любом из публичных git-репозиториев (Bitbucket, github, gitlab). ● Придерживаться git-flow: master - develop - feature/fix
- Создать подробный README.md файл в корне проекта, состоящий из: ● Общего описания проекта ● Инструкция по запуску проекта ● CRUD операции (при их наличии) с примерами входных и выходных данных
- '*' Обеспечить покрытие юнит-тестами на уровне более 70% (слои сервиса - 100% покрытие)
- '*' Разработать функционал формирования выписки по транзакциям пользователя за месяц, год или весь период обслуживания клиента в форматах PDF и TXT (опционально). (Приложение II)
- ** Реализовать операции CRUD (создание, чтение, обновление, удаление) для всех сущностей. (Servlet). Веб интерфейс не нужен
- ** Рассчитать и сохранить информацию о количестве потраченных и полученных средств за определенный период времени, используя SQL ● Сохранять в папку statement-money, в корне проекта ● Сохранять в формате .pdf (Приложение III) ● Вызывать с помощью Servlet
- ** Убедиться, что таблицы в базе данных соответствуют третьей нормальной форме (3 НФ)
- ** Реализовать сквозное логирование в файл с использованием AspectJ для методов сервиса, логироваться должны входные аргументы и ответ сервиса
“*” – необходимо минимум выполнить два задания со звёздочкой, больше заданий будет существенным плюсом. К этим пунктам лучше приступать после качественного решения базовых задач с применением принципов SOLID, декларативных подходов, оптимальных алгоритмов.
По основным сущностям были созданы таблицы в схеме test. Приложение умеет совершать переводы
снимать и пополнять деньги со счетов. Все команды и варианты указаны в терминале при выполнении.
При старте можно получить информацию о пользователях и счетах пользователей для дальнейшего совершения
операций с ними.
Приложение запускается и работает в изолированной среде (docker). Так же в имеется PGAdmin для быстрой проверки данных в бд
(данные указаны в config.yml)
В базу по умолчанию добавлено количество сущностей по ТЗ.
При чистом запуске контейнеров отработает обновление балансов на нескольких счетах (id: 45 - 50)
- Установить утилиты docker & docker-compose (необходимые образы - postgres:13.3, dpage/pgadmin4:5.7, ubuntu)
- Из директории в проекте ./dockerPG выполнить команду
docker compose build && docker compose up - После зайти в запущенный контейнер bank_app (
docker ps->docker exec -it xxx bash)
Где xxx - CONTAINER ID (dockerpg-console_app) из 1 команды в текущем пункте - В терминале контейнера выполнить
bash startApp.sh- Консольное приложение запущенно и готово к использованию
П.С. Что из задания реализовано (на мой взгляд)
Доп требования
- Проект реализован с использованием docker(docker compose)
- Разработан функционал формирования выписки по транзакциям пользователя за месяц, год или весь период обслуживания клиента в формате TXT (если успею добавлю PDF)
- Рассчитата информацию о количестве потраченных и полученных средств за определенный период времени, используя SQL (без использования servelet)
- Таблицы в базе данных соответствуют третьей нормальной форме (3 НФ)