Skip to content

Тестовое задание в компанию appvelox

License

Notifications You must be signed in to change notification settings

buschwaker/appvelox

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

example workflow

Проект для компании Appvelox

Задеплоенный проект

Проверить проект https://buschwacker.pythonanywhere.com можно через любой известный сервис, например Postman.

Логин/пароль администратора admin/admin

Получить доступ к сервису можно с помощью POST запроса к https://buschwacker.pythonanywhere.com/auth/jwt/create/

Посмотреть документацию можно тут redoc или swagger.

Задание

Нужно было написать веб-сервис предоставляющий RESTful API для управления персональным списком задач.

Описание

Необходимо было реализовать сервис, предоставляющий API (REST) для управления персональным списком задач. Сервис должен предоставлять следующие функции (каждая из этих функций должна быть представлена отдельным URL/Эндпоинтом API):

  • Получение списка задач,
  • Создание новой задачи,
  • Получение конкретной задачи по id,
  • Отметка задачи как выполненной,
  • Удаление задачи.

Данные для создания задачи

  • Заголовок
  • Текст задачи
  • Дата выполнения

Данные для создания задачи

  • Заголовок
  • Текст задачи
  • Дата выполнения
  • Отметка о факте выполнения

Реализация

Модель Task

Модель включает в себя поля title, text, deadline_on, заголовок, текст задачи и дата до, которой нужно выполнить задачу соответственно. Данные поля являются обязательными.

Так как список задач должен быть персональным, решено было добавить поле author, (ManyToOne к стандартной модели User).

Для отметки факта успешного выполнения задачи добавлено поле is_done.

Также добавлено поле, работающее на чтение is_failed, возвращающее True в случае если задача не выполнена и прошел срок её выполнения.

Также для удобства сортировки выполненных задач по времени их выполнения было добавлено поле done_at. В тот момент как задача помечается как выполненная в поле записывается время.

По умолчанию задачи сортированы в порядке приоритетности их выполнения. В начале невыполненные с ближайшим дедлайном.

Вьюсет TaskViewSet

Класс TaskViewSet обрабатывает запросы к эндпоинтам проекта

Так стандартные миксины: CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin, от которых наследуется TaskViewSet позволяют обработать запрос на получение списка задач, получение задачи по id, создание и удаление задач.

Запросы к остальным энпоинтам обрабатываются методами класса TaskViewSet, обернутых декоратором @action.

Список эндпоинтов и их краткое описание:

Посмотреть документацию можно тут redoc или swagger.

  1. GET /api/tasks/ возвращает список невыполненных и непроваленных задач пользователя, отсортировано по приоритетности их выполнения(дедлайн близко).
  2. POST /api/tasks/ создает задачу текущего пользователя, достаточно заполнить текст задачи, заголовок и дедлайн.
  3. GET /api/tasks/<id_task>/ возвращает информацию о задаче, если эта задача принадлежит текущему пользователю.
  4. DELETE /api/tasks/<id_task>/ возвращает информацию о задаче, если эта задача принадлежит текущему пользователю.
  5. PATCH /api/tasks/<id_task>/done_task/ отмечает задачу как выполненную, если она принадлежит текущему пользователю.
  6. GET /api/tasks/done/ возвращает список выполненных задач пользователя, отсортировано по дате их выполнения.
  7. GET /api/tasks/failed/ возвращает список проваленных задач пользователя, отсортировано по дедлайну.
  8. GET /api/tasks/urgent/ возвращает список срочных к выполнению задач пользователя(дедлайн меньше чем через день), отсортировано по приоритетности их выполнения(дедлайн близко).

Список JWT эндпоинтов доступны в документации по ссылке.

Сериализация(десериализация)

Сериализатор TaskSerializer позволяет возвращать поля id, title, text, deadline_on, is_done, is_failed, done_at, author и создавать задачу при заполнении полей title, text, deadline_on.

Делает поля is_done, is_failed, author недоступными для записи. author заполняется значением текущего пользователя в методе вьюсета def perform_create.

Проверяет что значение поля deadline_on(дедлайн) не меньше текущего времени.

Тесты

Перед написанием основного кода были написаны тесты(директория tests). Использовалась методология TDD. Описание каждого из тестов в докстрингах методов класса TestView.

Workflow

При совершении триггер-действия(пуш в ветку main):

  • Проект разворачивается на тестовом сервере
  • Запуск тестов
  • Проверка кода всего проекта на соответствие стилю PEP8
  • Отправка сообщения в телеграм об успешности выполнения вышеперечисленных инструкций

Инструкция по запуску проекта на своей машине:

  1. Скачиваем репозиторий
  2. Устанавливаем и активируем виртуальное окружение
  3. Устанавливаем зависимости pip install -r requirements.txt

About

Тестовое задание в компанию appvelox

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages