{"id":28720073,"url":"https://github.com/neothebestdeveloper/testtask","last_synced_at":"2025-06-15T06:06:51.537Z","repository":{"id":245731410,"uuid":"817256528","full_name":"NeoTheBestDeveloper/TestTask","owner":"NeoTheBestDeveloper","description":null,"archived":false,"fork":false,"pushed_at":"2024-08-04T14:49:16.000Z","size":155,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-08-04T16:38:40.469Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NeoTheBestDeveloper.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-19T10:32:06.000Z","updated_at":"2024-08-04T14:49:19.000Z","dependencies_parsed_at":"2024-06-23T19:23:04.511Z","dependency_job_id":"febb11bd-9f0d-4186-853c-3fd7448a15d8","html_url":"https://github.com/NeoTheBestDeveloper/TestTask","commit_stats":null,"previous_names":["neothebestdeveloper/testtask"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NeoTheBestDeveloper/TestTask","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTheBestDeveloper%2FTestTask","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTheBestDeveloper%2FTestTask/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTheBestDeveloper%2FTestTask/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTheBestDeveloper%2FTestTask/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NeoTheBestDeveloper","download_url":"https://codeload.github.com/NeoTheBestDeveloper/TestTask/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTheBestDeveloper%2FTestTask/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259930003,"owners_count":22933537,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-15T06:06:45.673Z","updated_at":"2025-06-15T06:06:50.410Z","avatar_url":"https://github.com/NeoTheBestDeveloper.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Тестовое задание\n\n## Результаты\n\nЯ приступил к выполнению задания в среду 19.06.24, завершил в воскресенье \n23.06.24. На выполнения задания было потрачено 4 дня. \n\nДля выполнения задания мне пришлось с нуля изучить vue фреймворк, pinia для управления состоянием и ui kit - vuetify.\n\nВсе обязательная и необязательные задачи были выполнены. \n\nКроме требуемых эндпоинтов были добавлены дополнительные для реализации регистрации:\n- POST /api/user/ - регистрация и создание пользователя\n- POST /api/user/logout/ - завершение сессии пользователя\n- POST /api/user/token/valid/ - проверка валидности access токена пользователя\n\n\n## Сервисы и репозитории\n\nВ решении задачи для выделения бизнес логики и взаимодействия с данными я использовал два типа классов: сервисы и репозитории.\n\nВ сервисах содержится бизнес логика, а в репозиториях работа с данными.\nСуть репозитория как-то скачать или отредактировать данные, а потом вернуть НЕ ORM модель, а какую-то бизнес сущность, с которой мы уже будем работать. Она может хранить в себе данные как из двух таблиц, так из одной, но не все колонки. Так мы делаем код менее орентированным на данные. В том числе, я использовал для описания подобных сущностей DTO, который не дает в контроллере вызвать метод ORM, а так же все DTO неизменяемые.\n\nКроме репозиториев ORM напрямую я еще использовал только в сериализаторах для валидации.\n\nНо такое деление по слоям для данной задачи избыточно и сделано больше для демонстрации. Т. к. в проекте не особо бизнес логики, репозитории можно не использовать, а все писать в сервисах, как я и сделал в модуле users.\n\n\n## Как это запустить\n\nДля запуска потребуется ввести команду:\n\n```sh\n$ docker compose -f docker-compose.dev.yml up --build\n```\n\nЕще потребуется файлы с настройками\n\n./.env/.database.dev.env\n```sh\nMYSQL_ROOT_PASSWORD=password\nMYSQL_DATABASE=database\nTZ=Europe/Moscow\n```\n\n./.env/.dev.env\n```sh\nDB_USER=root\nDB_PASSWORD=password\nDB_DATABASE=database\nDB_HOST=database\nDB_PORT=3306\nSECRET_KEY=\"YOUR_SECRET\"\nDEBUG=true\nDEFAULT_PAGINATION_LIMIT=10\nDEFAULT_PAGINATION_OFFSET=1\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneothebestdeveloper%2Ftesttask","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneothebestdeveloper%2Ftesttask","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneothebestdeveloper%2Ftesttask/lists"}