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 - Проект по созданию электронного кошелька "Картошка".
- Host: GitHub
- URL: https://github.com/bgdnlmzn/potato_wallet
- Owner: bgdnlmzn
- Created: 2024-07-11T13:37:05.000Z (almost 2 years ago)
- Default Branch: lyamzin/feature2
- Last Pushed: 2024-07-11T13:50:02.000Z (almost 2 years ago)
- Last Synced: 2025-11-22T06:20:58.681Z (7 months ago)
- Topics: docker, gradle, java, spring
- Language: Java
- Homepage:
- Size: 172 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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:
- По статусам счёта (оплачен/неоплачен/отменён).
- По датам выставления счёта с/по.
- По идентификатору.
## Денежный перевод
### Описание
Основные поля счёта на денежного перевода:
- **Дата и время перевода**.
- **Сумма**.
Переводы могут быть двух типов:
- **Перевод пользователю**.
- **Оплата за услугу**.
### Требования
Перевод совершается в д.е. Выполняется сразу после его создания. Пользователь может совершить перевод в д.е. не более, чем есть у него в кошельке. Хранение временной метки создания переводов.
### Перевод пользователю
Перевод пользователю можно осуществить:
- По номеру телефона.
- По номеру кошелька.
### Оплата за услугу
Оплатить услугу можно только по её номеру.
### Операции с денежными переводами
- Получение информации о переводе.
- Создание (оно же выполнение) денежного перевода.
- Получение истории переводов с возможностью фильтрации по:
- Типу (входящий/исходящий).
- Статусу (оплачен/неоплачен).
- Пользователю-получателю.