Skip to content

kaster3/Hitalent-testing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

88 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Выполненное тестовое задание компании Hitalent по созданию консольного приложения с основным CRUD функционалом и работой c JSON файлом.

🚀 Основные требования к задаче:

  1. Просмотр всех текущих задач с возможностью фильтрации - Выполнено ✅
  2. Добавление новой задачи с автоматической генерацией уникального ID - Выполнено ✅
  3. Редактирование существующей задачи - Выполнено ✅
  4. Удаление задачи по ID - Выполнено ✅
  5. Поиск по ключевым словам, категории или статусу выполнения - Выполнено ✅
  6. Хранение данных в Json файле - Выполнено ✅
  7. Тестирование при помощи Pytest - Выполнено ✅
  8. Обработка невалидных данных и ошибок - Выполнено ✅
  9. Аннотации, документирование, многослойная архитектура, ОПП - Выполнено ✅

Основные объекты в проекте:

  • TaskServer class - Отвечает за управление бизнес логики.
  • TaskHelper class - Берет на себя чаcть функционала TaskServer, чтобы разгрузить сложность ветвления логики.
  • TaskRepository class - Отвечает за выполнение СRUD операций.
  • TaskStorage class - Сохраняет и загружает данные из файла, преобразует модель в словарь и обратно.
  • Task class - Основная модель, которая представляет сущность "Задача".

Точка входа в приложение функция main(), которая запускает бесконечный цикл опроса пользователя с выводом панели управления в консоль. После того как пользователь ввел вариант ответа от 1 до 6 main начинает дергать класс TaskService, который содержит в себе основную бизнес логику, методы этого класса имеют логическое ветвление и обработку основных ошибок, а также вывод сообщений в консоль. Класс сервис, в свою очередь, дергает класс TaskRepository, который выполняет CRUD операции и возвращает результат классу TaskService, если это необходимо для дальнейшей логики. TaskRepository получает зависимость в виде класса Storage, который имеет только 2 метода, сохранение данных в файл и загрузка данных из файла. Также TaskService принимает зависимостью класс ServiceHelper, его я сделал, что "разгрузить" сложное логическое ветвление TaskService.

Для реализации атрибутов Task модели, таких как, category, status, priority использовал класс Enum из стандартной библиотеки и для атрибута due_date использовал datetime.

Реализовал пару декораторов для генерации автоматической генерации ID задачи и второй декоратор для получения конкретного Task объекта по ID, что очень хорошо отразилось на структуре приложения. Использовал dev инструменты для чистого кода: isort, flake, black, pre-commit.

Большая часть проекта, а именно основной функционал покрыт тестами при помощи Pytest, unittest и плагинами pytest-mock, syrupy и подробной документацией.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages