GithubHelp home page GithubHelp logo

clickintellect's Introduction

Тестовое задание. Backend. Middle/Senior

Цель

Разделение списка товаров на группы товаров с общей ценой, не превышающей 200 евро, при этом общая цена должна быть как можно близкой к ограничению в 200 евро.

Описание задачи

Этапы

  1. Реализация загрузки списка товаров из документа Excel в приложение
    • a. Реализация endpoint-а для приема файлов с расширением *.xlsx;
    • b. Парсинг данных в класс входных данных;
    • c. Сохранение данных в БД.
  2. Реализация сервиса “Разделения списка товаров на группы товаров”
    • a. Получение данных из БД
    • b. Реализация логики разделения списка товаров на группы товаров
      • i. общая цена группы товаров, не должна превышать 200 евро
      • ii. общая цена должна быть как можно близкой к ограничению в 200 евро
    • c. Обновление статуса товаров, для исключения их повторной обработки
    • d. Сохранение группы товаров в БД
  3. Реализация Task Manager для запуска сервиса “Разделения списка товаров на группы товаров”
    • a. Запуск по интервалу времени - 5 минут
  4. Реализация отображения группы товаров
    • a. Реализация endpoint-а для получения списка групп товаров
    • b. Реализация endpoint-а для получения списка товаров по идентификатору группы

Пример

input data excel
output data database
output data api request

Требования

  • .NET 8
  • ASP.NET Runtime

Запуск

  1. Склонировать репозиторий

  2. Открыть проект

  3. Запустить скрипт для создания БД

    dotnet ef database update
  4. Запустить проект

    dotnet run
  5. Перейти по адресу http://localhost:5293/swagger

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

Описание

  • В качестве БД используется SQLite, чтобы ничего не разворачивать
  • Для загрузки Excel используется ExcelDataReader, так как он не требует установки Excel на сервере и лицензия позволяет коммерческое использование (MIT).
  • Для управления задачами используется Hangfire, просто и удобно, вместо Quartz и BackgroundService.
  • FastEndpoints как альтернатива CQRS, к тому же AoT компиляция.
  • Mediatr для уведомлений, чтобы не использовать события.
  • InMemory кэширование для статуса файлов. Лучше Redis, но мне лень.

Использованные библиотеки

Решение

Обсуждение при собеседовании.

clickintellect's People

Contributors

yeirg avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.