Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/shumlesha/kartoshkawallet

Сервис электронного кошелька, выполненный в рамках Интенсива ШИФТ 2024
https://github.com/shumlesha/kartoshkawallet

docker-compose grafana java junit jwt-authentication mapstruct mockito monolith-architecture prometheus spring-boot spring-security springdoc-openapi-ui

Last synced: 28 days ago
JSON representation

Сервис электронного кошелька, выполненный в рамках Интенсива ШИФТ 2024

Awesome Lists containing this project

README

        

# Некоторые из технологий
- 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