- Java 21
- Spring 6
- Spring Boot 3.3.1
- Spring Security (JWT-based)
- Mapstruct
- PostgreSQL + Flyway
- JUnit + Mockito
- Prometheus + Grafana
- Docker
- Springdoc (Swagger UI)
"Картошка" - это отечественный электронный кошелек, который позволяет оплачивать услуги, делать денежные переводы в рамках системы. Ваша задача написать серверную часть, удовлетворяющую "Картошке".
Основные поля пользователя:
- Фамилия
- Имя
- Отчество (опционально)
- Номер мобильного телефона
- Адрес электронной почты
- Дата рождения
- Пароль
- ФИО допускается только буквы русского алфавита. Первые буквы - заглавные. Не более 50 символов по отдельности.
- Номер мобильного телефона - Формат телефона: 11 цифр, начинается с '7'. К номеру телефона может быть привязан только один пользователь.
- Адрес электронной почты - стандартная маска. К электронной почте может быть привязан только один пользователь.
- Дата рождения - дата в ISO 8601.
- от 8 до 64 символов
- Только латинские символы, цифры, знаки только !?
- Обязательно наличие минимум 1 буквы верхнего и нижнего регистра, цифры и знака.
- Хранение исключительно в БД, в хешированном виде, алгоритм - на усмотрение разработки.
- К требованиям хранения пользователей относится хранение временной метки (timestamp) создания и обновления полей пользователя. Пользователя запрещено удалять из БД.
- Создание пользователя
- Получение пользователя
- Редактирование полей пользователя (только ФИО, дата рождения)
Сессия принадлежит только одному пользователю. Сессии имеют ограниченный срок действия.
- Создание сессии (вход в аккаунт)
- Получение информации о сессии
- Выход из сессии (выход из аккаунта)
Кошельком владеет только один пользователь. Изначально каждый пользователь имеет 100 д.е. в кошельке.
- Получение информации о кошельке
- Реализовать функционал рулетки:
- HESOYAM: с 25% шансом пользователь получает на счёт 10 д.е.
Выражает оплату за услугу между двумя пользователями: продавцом и потребителем.
- Номер счёта - UUID, идентифицирует счёт
- Стоимость услуги - целое число, больше нуля
- Идентификатор отправителя (продавца)
- Идентификатор получателя (покупателя)
- Комментарий (опционально)
- Статус - Оплачен/Неоплачен/Отменён
- Дата и время выставления счёта в ISO 8601 формате
- Создание счёта на оплату
- Отмена счёта на оплату отправителем
- Оплата счёта на оплату получателем
- Получение информации о счёте на оплату
- Получение всех выставленных счетов
- Получение всех счетов к оплате
- Реализовать дополнительные операции:
- Получение наиболее давнего неоплаченного счёта к оплате
- Получение общей задолженности по неоплаченным счетам к оплате
- Добавить фильтры к операциям. Например:
- По статусам счёта (оплачен/неоплачен/отменён)
- По датам выставления счёта с/по
- По идентификатору
Переводы между пользователями и оплата за услуги.
- Дата и время перевода
- Сумма
- Получение информации о переводе
- Создание (выполнение) денежного перевода
- Получение истории переводов: требуется возможность фильтрации по:
- Типу (входящий/исходящий)
- Статусу (оплачен/не оплачен)
- Пользователю-получателю
- Установить проект с репозитория
- Ввести
docker-compose up -d
в терминале в папке проекта- Доступные ресурсы:
- Swagger: http://localhost:8080/swagger-ui/index.html
- Prometheus: http://localhost:9090/
- Grafana: http://localhost:3000
- Доступные ресурсы: