An open API service indexing awesome lists of open source software.

https://github.com/neothebestdeveloper/testtask


https://github.com/neothebestdeveloper/testtask

Last synced: about 1 year ago
JSON representation

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
```