Menu

Tree [62c1cc] default tip /
 History

Read Only access


File Date Author Commit
 .idea 2024-10-27 Maksim Grishkin Maksim Grishkin [531476] feat: Добавлены входные данные
 gmafffff.FilterOrder 2024-11-18 Maksim Grishkin Maksim Grishkin [62c1cc] fix: Исправлены незначительные ошибки конфигурации
 gmafffff.FilterOrder.Tests 2024-10-29 Maksim Grishkin Maksim Grishkin [0b5b67] test: Добавляет тесты
 .hgignore 2024-10-26 Maksim Grishkin Maksim Grishkin [7d2eb6] chore: Создан проект
 filterOrder.sln 2024-10-29 Maksim Grishkin Maksim Grishkin [0b5b67] test: Добавляет тесты
 readme.md 2024-10-30 Maksim Grishkin Maksim Grishkin [4d81af] docs: Исправление отображения вложенных списков

Read Me

Фильтрация csv-файла с заказами (C#)

Тестовое задание для собеседования

Учет времени

На решение задачи (включая поиск библиотек и чтение документации) мне потребовалось 😓:

задача время, час
Вникнуть в ТЗ 0.25
Настроить хост 1.00
Настроить конфигурацию 0.50
Проверка данных для фильтрации 9.40
Фильтрация заказов 6
Логирование в файл 3
Тесты 0.5

Всего: 20.65 часов.

Инструкция для запуска

Приложение не требует дополнительных телодвижений и может быть собрано и запущено в IDE.
Образец данных содержится в файле .\sample\orders.csv. Путь к нему указан в appsettings.json
Выходные данные будут созданы в файле .\sample\select.csv. Путь к нему переопределён параметрами командной строки, заданными в .\Properties\launchSettings.json
Лог будет создан в файле .\log.log. Путь к нему установлен переменными окружения, заданными в .\Properties\launchSettings.json

Результат сборки проекта сохраняется в каталоге %temp%\gmafffff\

Приемы, с которыми можно познакомиться, изучая проект

  1. Консольное приложение внутри хоста, включая:
    • Внедрение зависимостей (DI);
    • Журналирование (log);
    • Конфигурация;
    • Завершение работы приложения.
  2. Шаблон Options для конфигурации приложения.
  3. Проверка корректности входящих данных с помощью функциональной библиотеки LanguageExt.
  4. Использование и настройка библиотеки CsvHelper.
  5. Логирование в файл и на консоль с помощью Serilog и его настройка через файл конфигурации и код.
  6. Исключить замусоривание папки проекта промежуточными файлами с помощью файла Directory.Build.props и параметра BaseOutputPath в .csproj.
  7. Использование соглашения о комитах.

Оригинальное задание

Необходимо разработать консольное приложение (по желанию можно WinForms либо WebApi) для службы доставки, которое фильтрует заказы в зависимости от количества обращений в конкретном районе города и времени обращения с и по.
Входные данные для каждой строки содержат следующую информацию:

  • Номер заказа - можно использовать уникальный идентификатор или придумать свой;
  • Вес заказа в килограммах;
  • Район заказа, можно придумать либо название либо идентификатор района;
  • Время доставки заказа - в формате: yyyy-MM-dd HH:mm:ss. Для исходных данных можно использовать либо файл с данными (рекомендуется) либо любые СУБД, которые можно легко установить для проверки.

Также необходимо сделать логирование основных операций, а также валидацию входных данных.

В результирующий файл либо БД необходимо вывести результат фильтрации заказов для доставки в конкретный район города в ближайшие полчаса после времени первого заказа.

Данные для фильтрации (можно передавать через параметры консольного приложения _cityDistrict, _firstDeliveryDateTime):

  • Район доставки;
  • Время первой доставки.

Выходные файлы:

  • логирование - в случае консольного приложения определить задание адреса файла через командную строку: _deliveryLog - путь к файлу с логами, либо создать в СУБД таблицу с логами;
  • результат - записывать по адресу: _deliveryOrder - путь к файлу с результатом выборки либо в СУБД таблицу.

По возможности, кроме передачи параметров через командную строку либо форму, можно реализовать частичную либо полную передачу параметров через файлы конфигурации или переменные среды

Программа не должна ломаться от некорректных входных данных (реализовать в валидации), ошибок ввода-вывода и прочим причинам, которые можно предусмотреть (реализовать обработку возможных ошибок).

Решение должно быть предоставлено в виде исходных кодов в архиве, при необходимости с дампом базы данных, в виде архива или ссылки на репозиторий с решением.

Код должен быть оптимальным, читаемым для разработчика и удобным для пользователя, при разработке желательно покрытие несколькими тестами и использование общераспространенных практик (паттерны проектирования, KISS…)

Результат тестового задания должен содержать текстовый файл readme.txt с инструкцией по настройке и конфигурированию приложения (если необходимо).

Лицензия

Публичная собственность

MongoDB Logo MongoDB