5 проектов:
- Домен (модели + агрегаты + логика + интерфейсы репозитория)
- Инфраструктура (реализация интерфейсов + БД + кафка)
- Тесты домена
- Аппликейшн (Команды + Запросы + Хэндлеры, интерфейс презентера)
- Веб Апи (DI, контроллеры, внешние контракты)
- Домен - ни от чего
- Инфраструктура - от домена
- Тесты - от домена
- Аппликейшн - от домена
- ВебАпи - от апликейшена, от инфраструктуры
- Запрос на выдачу мерча WebApi + Kafka - одна команда в аппликейшене
- Проверка, выдывался ли мерч - query в апликешене
- Появился новый мерч - из кафки пришел запрос с пополнением - команда в апп.
- MerchandiseRequest:
- SkuPreset,
- пользователь (размер, почта)
- статус: новый, выдан, в процессе(нет в наличии), отклонен
- ДатаСоздания
- ДатаВыдачи
- создатьРеквест()
- выдать()
- проверитьВозможностьВыдачи(sku[])
- реквестВыдан
- реквестОтклонен
- SkuPreset:
- Id
- Sku[]
- тип: StarterPack, Conference
- удалитьИзНабора(sku)
- добавитьВНабор(sku)
- пресетИзменился
- Выдать мерч:
- Емейл сотрудника
- Размер одежды
- Тип (новый сотрудник, конфа)
- Новая поставка
- Sku[]
- Получить по пользователю его запросы (email)
- MerchandiseRequestData
- тип
- статус
- дата создания
- дата выдачи
- Команда на выдачу мерча
- Создаем MerchandiseRequest (status New)
- Проверяем по емейлу, выдавался ли мерч этому сотруднику (только стартерПак)
- Если выдавался меньше года назад, то отклоняем + сообщение, что отклонен
- Если не выдавался или выдавался больше года назад, то
- Идем в StockApi и бронируем по Sku мерч
- Если бронь прошла, то выдаем мерч (status Done) + событие
- Если нет, то переводим в статус Processing
- Команда, что появился новый мерч (из кафки)
- Достаем все MerchandiseRequest в статусе Processing, сортируем по дате
- По каждому MerchandiseRequest проверяем возможность выдачи мерча (по Sku[])
- Если можно выдать - выдаем (логика выше), если нет, ничего не делаем
- Запрос на MerchandiseRequest-ы сотрудника (email)
- Достаем из БД все данные по сотруднику по его почте
4*. Редактирование SkuPreset CRUD