Skip to content

routeCsharp256/merchandise-api

Repository files navigation

CSharpCourse.MerchandiseApi

Состав проекта

5 проектов:

  1. Домен (модели + агрегаты + логика + интерфейсы репозитория)
  2. Инфраструктура (реализация интерфейсов + БД + кафка)
  3. Тесты домена
  4. Аппликейшн (Команды + Запросы + Хэндлеры, интерфейс презентера)
  5. Веб Апи (DI, контроллеры, внешние контракты)

Зависимости:

  • Домен - ни от чего
  • Инфраструктура - от домена
  • Тесты - от домена
  • Аппликейшн - от домена
  • ВебАпи - от апликейшена, от инфраструктуры

АПИ

  1. Запрос на выдачу мерча WebApi + Kafka - одна команда в аппликейшене
  2. Проверка, выдывался ли мерч - query в апликешене
  3. Появился новый мерч - из кафки пришел запрос с пополнением - команда в апп.

Агрегаты:

  1. MerchandiseRequest:
  • SkuPreset,
  • пользователь (размер, почта)
  • статус: новый, выдан, в процессе(нет в наличии), отклонен
  • ДатаСоздания
  • ДатаВыдачи
  • создатьРеквест()
  • выдать()
  • проверитьВозможностьВыдачи(sku[])
  • реквестВыдан
  • реквестОтклонен
  1. SkuPreset:
  • Id
  • Sku[]
  • тип: StarterPack, Conference
  • удалитьИзНабора(sku)
  • добавитьВНабор(sku)
  • пресетИзменился

Команды:

  1. Выдать мерч:
  • Емейл сотрудника
  • Размер одежды
  • Тип (новый сотрудник, конфа)
  1. Новая поставка
  • Sku[]

Query:

  1. Получить по пользователю его запросы (email)
  • MerchandiseRequestData
  • тип
  • статус
  • дата создания
  • дата выдачи

Логика работы:

  1. Команда на выдачу мерча
  • Создаем MerchandiseRequest (status New)
  • Проверяем по емейлу, выдавался ли мерч этому сотруднику (только стартерПак)
  • Если выдавался меньше года назад, то отклоняем + сообщение, что отклонен
  • Если не выдавался или выдавался больше года назад, то
  • Идем в StockApi и бронируем по Sku мерч
  • Если бронь прошла, то выдаем мерч (status Done) + событие
  • Если нет, то переводим в статус Processing
  1. Команда, что появился новый мерч (из кафки)
  • Достаем все MerchandiseRequest в статусе Processing, сортируем по дате
  • По каждому MerchandiseRequest проверяем возможность выдачи мерча (по Sku[])
  • Если можно выдать - выдаем (логика выше), если нет, ничего не делаем
  1. Запрос на MerchandiseRequest-ы сотрудника (email)
  • Достаем из БД все данные по сотруднику по его почте

4*. Редактирование SkuPreset CRUD

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages