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

https://github.com/bgdnlmzn/potato_wallet

ШИФТ Интенсив Backend - Проект по созданию электронного кошелька "Картошка".
https://github.com/bgdnlmzn/potato_wallet

docker gradle java spring

Last synced: 3 months ago
JSON representation

ШИФТ Интенсив Backend - Проект по созданию электронного кошелька "Картошка".

Awesome Lists containing this project

README

          

# Система "Картошка"

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

### Описание

Основные поля пользователя:

- **Фамилия**
- **Имя**
- **Отчество** (опционально)
- **Номер мобильного телефона**
- **Адрес электронной почты**
- **Дата рождения**
- **Пароль**

### Требования

- ФИО: только буквы русского алфавита, первые буквы - заглавные, не более 50 символов по отдельности.
- Номер мобильного телефона: 11 цифр, начинается с '7'. Один номер - один пользователь.
- Адрес электронной почты: стандартная маска. Один адрес - один пользователь.
- Дата рождения: формат ISO 8601.
- Пароль: от 8 до 64 символов, латинские символы, цифры, знаки `!?`. Обязательно наличие минимум 1 буквы верхнего и нижнего регистра, цифры и знака. Хранение в хешированном виде.
- Хранение временной метки создания и обновления полей пользователя.
- Пользователя запрещено удалять из БД.

### Операции с пользователем

- Создание пользователя.
- Получение пользователя.
- Редактирование полей пользователя (только ФИО, дата рождения).

## Сессия

### Описание

- Пользователь имеет неограниченное число сессий.
- Сессия принадлежит только одному пользователю.
- Сессии имеют ограниченный срок действия.
- В БД необходимо хранить все сессии: активные и "протухшие".

### Операции с сессией

- Создание сессии (вход в аккаунт).
- Получение информации о сессии.
- Выход из сессии (выход из аккаунта).

#### Дополнительно (необязательные требования)

- Время жизни сессии можно настроить при перезапуске приложения.

## Кошелёк

### Описание

- Кошельком владеет только один пользователь.
- Изначально каждый пользователь имеет 100 д.е. в кошельке.

### Основные поля кошелька

- **Номер** - целое число.
- **Баланс** - целое число, больше или равно нулю.

### Операции с кошельком

- Получение информации о кошельке.

### Функционал рулетки (дополнительный эндпоинт)

- **HESOYAM**: с 25% шансом пользователь получает на счёт 10 д.е.

## Счёт на оплату

### Описание

Выражает оплату за услугу между двумя пользователями: продавцом и потребителем. Продавец выставляет потребителю счёт на оплату. После выставления счёта потребитель может его оплатить по номеру. Частичная оплата недопустима. Пока счёт не оплачен, он может быть отменён получателем.

### Основные поля счёта на оплату (услуги)

- **Номер счёта** - UUID, идентифицирует счёт.
- **Стоимость услуги** - целое число, больше нуля.
- **Идентификатор отправителя** (продавца, тот кто выставил счёт).
- **Идентификатор получателя** (покупателя, тот кто оплачивает счёт).
- **Комментарий** (опционально, не более 250 символов).
- **Статус** - Оплачен/Неоплачен/Отменён.
- **Дата и время выставления счёта** - формат ISO 8601.

### Операции со счётом на оплату

1. Создание счёта на оплату.
2. Отмена счёта на оплату отправителем.
3. Оплата счёта на оплату получателем.
4. Получение информации о счёте на оплату.
5. Получение всех выставленных счетов.
6. Получение всех счетов к оплате.

#### Дополнительно (необязательные требования)

- Получение наиболее давнего неоплаченного счёта к оплате.
- Получение общей задолженности по неоплаченным счетам к оплате.
- Добавление фильтров к операциям 5-6:
- По статусам счёта (оплачен/неоплачен/отменён).
- По датам выставления счёта с/по.
- По идентификатору.

## Денежный перевод

### Описание

Основные поля счёта на денежного перевода:

- **Дата и время перевода**.
- **Сумма**.

Переводы могут быть двух типов:

- **Перевод пользователю**.
- **Оплата за услугу**.

### Требования

Перевод совершается в д.е. Выполняется сразу после его создания. Пользователь может совершить перевод в д.е. не более, чем есть у него в кошельке. Хранение временной метки создания переводов.

### Перевод пользователю

Перевод пользователю можно осуществить:

- По номеру телефона.
- По номеру кошелька.

### Оплата за услугу

Оплатить услугу можно только по её номеру.

### Операции с денежными переводами

- Получение информации о переводе.
- Создание (оно же выполнение) денежного перевода.
- Получение истории переводов с возможностью фильтрации по:
- Типу (входящий/исходящий).
- Статусу (оплачен/неоплачен).
- Пользователю-получателю.