{"id":15175254,"url":"https://github.com/drveles/notes_api","last_synced_at":"2026-01-26T13:02:48.677Z","repository":{"id":254840992,"uuid":"847699078","full_name":"drveles/notes_api","owner":"drveles","description":"API for managing and storing notes with authorization.","archived":false,"fork":false,"pushed_at":"2024-10-22T07:50:03.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T18:52:15.149Z","etag":null,"topics":["docker-compose","mongodb","python3","rest-api"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drveles.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-08-26T11:28:12.000Z","updated_at":"2024-10-22T07:50:07.000Z","dependencies_parsed_at":null,"dependency_job_id":"1bbaa47c-0f34-434c-99e1-2453f989b422","html_url":"https://github.com/drveles/notes_api","commit_stats":{"total_commits":22,"total_committers":2,"mean_commits":11.0,"dds":"0.045454545454545414","last_synced_commit":"b23167df1564761826605da3917ab5406f0f10fc"},"previous_names":["drveles/notes_api"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/drveles/notes_api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drveles%2Fnotes_api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drveles%2Fnotes_api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drveles%2Fnotes_api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drveles%2Fnotes_api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drveles","download_url":"https://codeload.github.com/drveles/notes_api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drveles%2Fnotes_api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28778728,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-26T11:46:04.308Z","status":"ssl_error","status_checked_at":"2026-01-26T11:46:02.664Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["docker-compose","mongodb","python3","rest-api"],"created_at":"2024-09-27T12:20:53.659Z","updated_at":"2026-01-26T13:02:48.656Z","avatar_url":"https://github.com/drveles.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API для заметок\n**RESTfull cервис для управления заметками.** \u003cbr\u003e\n\n- Пользователи имеют доступ только к своим заметкам \u003cbr\u003e\n- Заметки проверярются на орфографические ошибки используя API сервиса \"Яндекс.Спеллер\" \u003cbr\u003e\n\nStack: `Python`, `MongoDB`, `Docker`, `FastAPI`, `aiohttp`, `asyncio`, `unittest`, `requests` \u003cbr\u003e\n\n\n## API - `FastAPI`\n\n### Endpoints:\n\n#### 1. POST `http://host:port/add-note/`\u003cbr\u003e\n**Добавление новой заметки пользователя в базу данных.**\u003cbr\u003e\nОбязательное тело запроса:\n```json\n{\n    \"note\": \"Note text\",\n    \"have_typo\": \"False\",\n    \"username\": \"user1\",\n    \"sha_password\": \"user1_sha_password\",\n}\n```\nВ ответе возвращается JSON с информацией.\u003cbr\u003e\n\n#### 2. GET `http://host:port/notes/`\u003cbr\u003e\n**Возврат всех заметок пользователя.**\u003cbr\u003e\nОбязательные параметры:\u003cbr\u003e\n\n```json\n{\n    \"username\": \"user1\", \n    \"sha_password\": \"user1_sha_pass\"\n}\n```\nВ ответе возвращается JSON с заметками.\u003cbr\u003e\n\n\n## DB - `MongoDB` \u003cbr\u003e\nСчитаю, что для текстовых заметок документоориентированная база данных подходходит идеально.\u003cbr\u003e\nЗаметки хранятся в JSON формате, со следующими полями:\n``` json \n{\n    \"_id\": \"auto_generated\",\n    \"username\": \"str\",\n    \"note\": \"str\",\n    \"have_typo\": \"bool\"\n}\n```\n\n## Тестирование\n\n### Автотесты\n1. Поднимаем докер контейнеры с сервисом и базой данных:\u003cbr\u003e\n`docker compose up --build -d`\u003cbr\u003e\n2. Устнавливаем зависимости для тестов:\u003cbr\u003e\n`pip install requests aiohttp`\u003cbr\u003e\n3. Запускаем тесты:\u003cbr\u003e\n`python3 tests.py`\u003cbr\u003e\n\n### Ручное \n1. Поднимаем докер контейнеры, если они еще не работают\u003cbr\u003e\n`docker compose up --build -d`\u003cbr\u003e\n2. Открываем в браузере [http://0.0.0.0:8000/docs](http://0.0.0.0:8000/docs)\n3. Заполняем данные для запросов. Примеры данных пользователей: \n```json\n{\n    {\n        \"username\": \"user1\",\n        \"sha_password\": \"0a041b9462caa4a31bac3567e0b6e6fd9100787db2ab433d96f6d178cabfce90\",\n    },\n    {\n        \"username\": \"user2\", \n        \"sha_password\": \"6025d18fe48abd45168528f18a82e265dd98d421a7084aa09f61b341703901a3\",\n    },\n}\n```\n\n## Что реализовано:\n- Аутентификация пользователей, не храня сами пароли, а только их sha256\n- Авторизация пользователей, чтобы каждый видел только свои заметки\n- API для обработки запросов пользователей\n    - **Добавление и просмотр заметок**\n    - Валидация текста на ошибки через Яндекс.Спеллер\n    - Сохранение заметок в базу данных\n- Оркестация docker контейнерами с компонентами сервиса\n- Тесты для всех компонентов. Модульные и интеграционные\n- Код соответствует стилевым нормам. Black + Pylint\n- В коде прописаны подсказки типов\n- Описана инструкция по тестированию API\n\n## Что не сделано:\n- Терминальный интерфейс для работы с заметками.\n- Тесты в docker контейнере, с сохранением логов теста.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrveles%2Fnotes_api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrveles%2Fnotes_api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrveles%2Fnotes_api/lists"}