KartoshkaWallet

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

Stars
0
Committers
3

Некоторые из технологий

  • 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 формате

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

  • Создание счёта на оплату
  • Отмена счёта на оплату отправителем
  • Оплата счёта на оплату получателем
  • Получение информации о счёте на оплату
  • Получение всех выставленных счетов
  • Получение всех счетов к оплате

Дополнительно

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

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

Описание

Переводы между пользователями и оплата за услуги.

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

  • Дата и время перевода
  • Сумма

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

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

Деплой