Разделение списка товаров на группы товаров с общей ценой, не превышающей 200 евро, при этом общая цена должна быть как можно близкой к ограничению в 200 евро.
Этапы
- Реализация загрузки списка товаров из документа Excel в приложение
- a. Реализация endpoint-а для приема файлов с расширением *.xlsx;
- b. Парсинг данных в класс входных данных;
- c. Сохранение данных в БД.
- Реализация сервиса “Разделения списка товаров на группы товаров”
- a. Получение данных из БД
- b. Реализация логики разделения списка товаров на группы товаров
- i. общая цена группы товаров, не должна превышать 200 евро
- ii. общая цена должна быть как можно близкой к ограничению в 200 евро
- c. Обновление статуса товаров, для исключения их повторной обработки
- d. Сохранение группы товаров в БД
- Реализация Task Manager для запуска сервиса “Разделения списка товаров на группы
товаров”
- a. Запуск по интервалу времени - 5 минут
- Реализация отображения группы товаров
- a. Реализация endpoint-а для получения списка групп товаров
- b. Реализация endpoint-а для получения списка товаров по идентификатору группы
- .NET 8
- ASP.NET Runtime
-
Склонировать репозиторий
-
Открыть проект
-
Запустить скрипт для создания БД
dotnet ef database update
-
Запустить проект
dotnet run
-
Перейти по адресу
http://localhost:5293/swagger
- В качестве БД используется SQLite, чтобы ничего не разворачивать
- Для загрузки Excel используется ExcelDataReader, так как он не требует установки Excel на сервере и лицензия позволяет коммерческое использование (MIT).
- Для управления задачами используется Hangfire, просто и удобно, вместо Quartz и BackgroundService.
- FastEndpoints как альтернатива CQRS, к тому же AoT компиляция.
- Mediatr для уведомлений, чтобы не использовать события.
- InMemory кэширование для статуса файлов. Лучше Redis, но мне лень.
- FastEndpoints
- ExcelDataReader
- Hangfire
- Mediatr (Только Notification)
- EF Core
Обсуждение при собеседовании.