{"id":26092092,"url":"https://github.com/placdev/ruluexample","last_synced_at":"2026-04-22T07:36:34.899Z","repository":{"id":259695491,"uuid":"879220367","full_name":"placDev/ruluExample","owner":"placDev","description":null,"archived":false,"fork":false,"pushed_at":"2024-10-28T05:56:04.000Z","size":214,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-21T05:13:36.536Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/placDev.png","metadata":{"files":{"readme":"README (5) (1).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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-10-27T10:37:59.000Z","updated_at":"2024-10-28T05:56:07.000Z","dependencies_parsed_at":"2024-10-27T12:15:52.154Z","dependency_job_id":"8f53b4ae-b50c-4a59-8952-cdc5a2e1b780","html_url":"https://github.com/placDev/ruluExample","commit_stats":null,"previous_names":["placdev/ruluexample"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/placDev/ruluExample","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/placDev%2FruluExample","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/placDev%2FruluExample/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/placDev%2FruluExample/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/placDev%2FruluExample/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/placDev","download_url":"https://codeload.github.com/placDev/ruluExample/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/placDev%2FruluExample/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32126277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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-03-09T10:41:46.108Z","updated_at":"2026-04-22T07:36:34.866Z","avatar_url":"https://github.com/placDev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Тестовое задание на разработчика RULYOU\n## Постановка задачи\nСоздание микросервиса для работы с пользователями.\nНеобходимо реализовать методы CRUD для работы с базой данных MySQL + RESTful API для этих методов.\nВам будет предоставлена база данных MySQL.\n\u003e **ОБРАТИТЕ ВНИМАНИЕ!**  \nПожалуйста, не выкладывайте данное ТЗ в открытый доступ на гитхаб в свои репозитории!\nПроверка работы сервиса с нашей стороны будет производиться в автоматическом режиме (150 автотестов).  \nПожалуйста, учтите все типы данных и формат ответов. Если что-то из этого не будет совпадать - тесты не пройдут. Также, мы проверяем ваше решение на \"защиту от дурака\", например в поле \"имя\" пытаемся вставить фрагмент Войны и мира и т.д.\nПредставьте, что Ваш код попадет к сотням тысяч пользователей, постарайтесь учесть пользовательское поведение, чтобы не было проблем с ИТ-инфраструктуре и возвращались правильные коды ошибок.\n\n## Работа с данными\nСтруктура данных должна иметь следующие характеристики:\n  - `id` (уникальный идентификатор с автоматическим инкрементированием) INTEGER\n  - `full_name` (полноме имя пользователя) VARCHAR\n  - `role` (роль пользователя) VARCHAR\n  - `efficiency` (эффективность пользователя) INTEGER\n\nНеобходимо реализовать методы CRUD (+ sorting) для работы с базой данных MySQL.\nВам будет предоставлен доступ к БД MySQL.\n\n## RESTful API\nРеализовать методы на каждую из операций CRUD. Методы и форматы и входных и выходных данных приведены ниже.\nЕсли во время обработки запроса произошла ошибка, в ответе должен быть выставлен \"success\": false, а в объекте \"result\" передано поле error, в котором содержится сообщение с деталями ошибки.\n\n### POST /create\nРеализовать метод `/create`, который принимает *payload* с информацией о пользователе и возвращает статус запроса.\nEсли статус запроса success, то дополнительно нужно вернуть id созданного пользователя.\n\nПримеры запросов:\n```\nPOST /create \n{\n  \"full_name\": \"some_name\",\n  \"role\": \"some_role\",\n  \"efficiency\": some_efficiency\n}\n\n```\nОтвет:\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"id\": \u003cuser_id\u003e\n  }\n}\n\n```\n\n### GET /get\nРеализовать метод `/get`, который получает id пользователя в качестве *path parameter* и возвращает объект пользователя. Дополнительно могут использоваться *query patameters* для фильтрации пользователей по параметрам. Если запрашиваемый id или другой параметр отсутсвует в списке, в ответе должен быть выставлен \"success\": false, а в объекте \"result\" передано поле error, в котором содержится сообщение с деталями ошибки.\n\nПримеры запросов:  \nЗапрос:\n```\nGET /get\n```\nОтвет:\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"users\": [\n      {\n        \"id\": some_id,\n        \"full_name\": \"some_name\",\n        \"role\": \"some_role\",\n        \"efficiency\": some_efficiency\n      },\n      {\n        \"id\": some_other_id,\n        \"full_name\": \"some_other_name\",\n        \"role\": \"some_other_role\",\n        \"efficiency\": some_other_efficiency\n      }\n  }\n}\n\n```\n\u003cbr/\u003e\u003cbr/\u003e\nЗапрос:\n```\nGET /get/\u003cuser_id\u003e\n```\nОтвет:\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"users\": [\n      {\n        \"id\": \u003cuser_id\u003e,\n        \"full_name\": \"some_name\",\n        \"role\": \"some_role\",\n        \"efficiency\": some_efficiency\n      }\n  }\n}\n```\n\u003cbr/\u003e\u003cbr/\u003e\nЗапрос:\n\n```\nGET /get?role=developer\n```\nОтвет:\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"users\": [\n      {\n        \"id\": some_id,\n        \"full_name\": \"some_name\",\n        \"role\": \"developer\",\n        \"efficiency\": some_efficiency\n      },\n      {\n        \"id\": some_other_id,\n        \"full_name\": \"some_other_name\",\n        \"role\": \"developer\",\n        \"efficiency\": some_other_efficiency\n      }\n  }\n}\n\n```\n\n### PATCH /update\nРеализовать метод `/update`, который получает id пользователя в качестве *path parameter* + *payload* с необходимыми для обновления полями и возвращает обновленный объект пользователя.\nПримеры запросов:\nЗапрос:\n```\nPATCH /update/\u003cuser_id\u003e\n{\n  \"full_name\": \"new_name\",\n  \"role\": \"new_role\"\n}\n```\nОтвет:\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"id\": \u003cuser_id\u003e,\n    \"full_name\": \"new_name\",\n    \"role\": \"new_role\",\n    \"efficiency\": some_efficiency\n  }\n}\n```\n\n### DELETE /delete\nРеализовать метод /delete, который получает id пользователя в качестве path parameter и возвращает объект удаленного пользователя. Если id отсутствует во входящем запросе, необходимо удалить всех пользователей (вернуть при этом только `\"success\"`)\nПримеры запросов:\nЗапрос:\n```\nDELETE /delete/\u003cuser_id\u003e\n```\nОтвет:\n```\n{\n  \"success\": true,\n  \"result\": {\n    \"id\": \u003cuser_id\u003e,\n    \"full_name\": \"some_name\",\n    \"role\": \"some_role\",\n    \"efficiency\": some_efficiency\n  }\n}\n```\n\u003cbr/\u003e\u003cbr/\u003e\nЗапрос:\n```\nDELETE /delete\n```\nОтвет:\n```\n{\n  \"success\": true\n}\n```\n\n\n## Деплой приложения\nВыложить и запустить свой код можете на любой из удобных для вас платформ (ntelify, vercel, heroku, собственный сервер...). После этого необходимо предоставить URL с запущенным сервисом и ссылку на гит репозиторий с открытым исходным кодом, чтобы мы могли его просмотреть и протестировать. Ссылки направлять HR менеджеру. Настоятельно просим не выкладывать текст этого ТЗ в свои репозитории.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplacdev%2Fruluexample","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplacdev%2Fruluexample","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplacdev%2Fruluexample/lists"}