Описание
Проект разбит на модули (микросеврисы), которые отвечают за конкретное направление в городе. Доступны следующие модули:
- Auth - Модуль авторизации пользователя
- Bank - управление банковским счетом пользователя.
- Car - управление личным транспортом жителей города.
- Citizen - управление жителями в городе.
- CityStarter - для конфигурации некоторых бинов и добавления аннотации для логирования.
- Gateway - реализация паттерна проектирования Gateway
- House - управление недвижимостью жителей города.
- Log - логика логирования (есть реализация посредством Rest / Websocket)
- Orchestrator - имплементация паттерна SAGA.
- Passport - управление паспорта граждан.
- Police - для управления водительскими удостоверениями, выданными автошколой.
- School - автошкола, которая выдает права.
Примеры особенностей проекта
- При заказе автомобиля происходит проверка счета жителя в банке, а также запрос в Полицию и проверку наличия и актуальности водительских прав у жителя.
- Все запросы в проекте идут через модуль Gateway.
- Реализован паттерн SAGA посредством оркестрации.
- Отдельный сервис логирования, который фиксирует изменения количество каждой сущности в городе и записывает в БД.
- В сервисе жителей каждые (любой указанный интервал) происходит регистрация 10 новых жителей, а затем происходит сравнение с сервисом логирования. Если количество не совпало и в момент добавления был добавлен житель, но происходит удаление 10 жителей добавленных по таймеру.
- Каждые (любой указанный интервал) происходит розыгрыш 1 автомобиля среди всех жителей. При этом оформить предзаказ на автомобиль в этом момент нельзя, т.к. все продавцы тоже участвуют в розыгрыше.
- Лотерея по розыгрышу автомобилей с обманом :) Победить может только тот житель, который является работником завода.
- Логирование реализовано через WebSocket.
- Реализована аутентификация и авторизация пользователя.
Примеры технологий
- Spring Boot 3.1
- PostgreSql
- Spring Data Jpa
- Spring Retry
- WebSocket
- Kafka
- Docker
- Spring AOP
- Lombok
- Liquibase