https://github.com/neothebestdeveloper/testtask
https://github.com/neothebestdeveloper/testtask
Last synced: about 1 year ago
JSON representation
- Host: GitHub
- URL: https://github.com/neothebestdeveloper/testtask
- Owner: NeoTheBestDeveloper
- Created: 2024-06-19T10:32:06.000Z (about 2 years ago)
- Default Branch: master
- Last Pushed: 2024-08-04T14:49:16.000Z (almost 2 years ago)
- Last Synced: 2024-08-04T16:38:40.469Z (almost 2 years ago)
- Language: Python
- Size: 151 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Тестовое задание
## Результаты
Я приступил к выполнению задания в среду 19.06.24, завершил в воскресенье
23.06.24. На выполнения задания было потрачено 4 дня.
Для выполнения задания мне пришлось с нуля изучить vue фреймворк, pinia для управления состоянием и ui kit - vuetify.
Все обязательная и необязательные задачи были выполнены.
Кроме требуемых эндпоинтов были добавлены дополнительные для реализации регистрации:
- POST /api/user/ - регистрация и создание пользователя
- POST /api/user/logout/ - завершение сессии пользователя
- POST /api/user/token/valid/ - проверка валидности access токена пользователя
## Сервисы и репозитории
В решении задачи для выделения бизнес логики и взаимодействия с данными я использовал два типа классов: сервисы и репозитории.
В сервисах содержится бизнес логика, а в репозиториях работа с данными.
Суть репозитория как-то скачать или отредактировать данные, а потом вернуть НЕ ORM модель, а какую-то бизнес сущность, с которой мы уже будем работать. Она может хранить в себе данные как из двух таблиц, так из одной, но не все колонки. Так мы делаем код менее орентированным на данные. В том числе, я использовал для описания подобных сущностей DTO, который не дает в контроллере вызвать метод ORM, а так же все DTO неизменяемые.
Кроме репозиториев ORM напрямую я еще использовал только в сериализаторах для валидации.
Но такое деление по слоям для данной задачи избыточно и сделано больше для демонстрации. Т. к. в проекте не особо бизнес логики, репозитории можно не использовать, а все писать в сервисах, как я и сделал в модуле users.
## Как это запустить
Для запуска потребуется ввести команду:
```sh
$ docker compose -f docker-compose.dev.yml up --build
```
Еще потребуется файлы с настройками
./.env/.database.dev.env
```sh
MYSQL_ROOT_PASSWORD=password
MYSQL_DATABASE=database
TZ=Europe/Moscow
```
./.env/.dev.env
```sh
DB_USER=root
DB_PASSWORD=password
DB_DATABASE=database
DB_HOST=database
DB_PORT=3306
SECRET_KEY="YOUR_SECRET"
DEBUG=true
DEFAULT_PAGINATION_LIMIT=10
DEFAULT_PAGINATION_OFFSET=1
```