{"id":14986538,"url":"https://github.com/dreek1337/ego","last_synced_at":"2025-06-29T15:37:30.942Z","repository":{"id":162850445,"uuid":"637342983","full_name":"dreek1337/Ego","owner":"dreek1337","description":"Пет-проект, для реализации технологий","archived":false,"fork":false,"pushed_at":"2023-07-18T19:14:02.000Z","size":552,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-11T22:51:56.346Z","etag":null,"topics":["auth","ci","clean-architecture","ddd","docker","fastapi","gateway-api","github-actions","high-performance","microservice","microservices","minio","open-api","postgresql","replication-data","rest-api","s3-storage","sqlalchemy","swagger"],"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/dreek1337.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":"2023-05-07T09:04:31.000Z","updated_at":"2025-03-09T15:43:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"3acd7ef6-3a82-43bb-99b6-2c96b8bb22d1","html_url":"https://github.com/dreek1337/Ego","commit_stats":{"total_commits":223,"total_committers":2,"mean_commits":111.5,"dds":"0.017937219730941756","last_synced_commit":"e0ebe7a5219488545820408b46f67f4f9fa9c83c"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/dreek1337/Ego","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreek1337%2FEgo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreek1337%2FEgo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreek1337%2FEgo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreek1337%2FEgo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dreek1337","download_url":"https://codeload.github.com/dreek1337/Ego/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dreek1337%2FEgo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262621322,"owners_count":23338661,"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":["auth","ci","clean-architecture","ddd","docker","fastapi","gateway-api","github-actions","high-performance","microservice","microservices","minio","open-api","postgresql","replication-data","rest-api","s3-storage","sqlalchemy","swagger"],"created_at":"2024-09-24T14:13:06.347Z","updated_at":"2025-06-29T15:37:30.916Z","avatar_url":"https://github.com/dreek1337.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1\u003eEGO\u003c/h1\u003e\n\n\u003ch3\u003eАрхетиктура сервиса\u003c/h3\u003e\n\n![alt text](https://sun9-71.userapi.com/impg/BAO9NoMLWJkVN-cieiTrhuOIXQzp6LtvCC372g/tvNiEiPjCPs.jpg?size=1111x899\u0026quality=96\u0026sign=6ce5d0d87be548442dc9e87babb773ea\u0026type=album)\n\n\u003ch3\u003eОписание проекта\u003c/h3\u003e\n\nПроект предназначен для ознакомления с новыми технологиями. Ключевой вещью является микросерверная архитектура, функционирует через API Gateway, который в свою очередь занимается маршрутизацией запросов в микросервисы и берет на себя управление авторизацией. На данный момент реализовано 3 сервиса (Auth, Posts, Users). Авторизация реализована с использованием JWT токена, который содержит в payload id пользователя, с помощью которого связаны все сервисы. Каждый запрос, имеющий заголовок Authorization, проксируется через плагин Apache APISIX на сервис Auth и добавляет к основному запросу заголовок X-User-ID.\n\nКратко о каждом сервисе:\n\n- Auth microservice - сервис авторизации пользователей. Содержит в себе логику авторизации и аутентификации, выдает JWT токен, производит его рефреш и проверку. Хранит в себе пароль, логин и почту пользователя, так же через него и обновляется эта информация.\n\n- Users microservice - сервис для работы с пользователями. Содержит в себе логику завершения регистрации пользователя. После чего можно полноценно пользоваться этим сервисом, осуществлять подписки и отписки на других пользователей, устанавливать себе аватарку обновлять и удалять ее.\n\n- Posts microservice - сервис для работы с постами. Содержит в себе логику работы с постами пользователей. Поиск по id, поиск по ключевым словам, удаление и обновление. На данный момент работает только в текстовом формате.\n\u003ch3\u003eСтэк\u003c/h3\u003e\n\n- FastAPI\n\n- SQLAlchemy/PostgreSQL\n\n- Minio/Aiobotocore\n\n- Elasticsearch (Kibana, Curator)\n\n- Docker/Docker compose\n\n- pytest (Unit-тесты)\n\n- mypy, black, isort, ruff\n\n- CI (pre-commit, GitHub Actions)\n\n- Apache APISIX\n\n\u003ch3\u003eАрхетиктура\u003c/h3\u003e\n\n- Микросервисы\n\n- DDD\n\n\u003ch3\u003eЗапуск проекта\u003c/h3\u003e\n\n```\nbash startup.sh\n```\n\n\u003ch3\u003eSwagger-UI\u003c/h3\u003e\n\n![alt text](https://sun9-79.userapi.com/impg/X_1zgW6V1j1SVRvsDahf2foHvxLbL8DFDeya-Q/ZfK7z4AdV24.jpg?size=1280x636\u0026quality=96\u0026sign=1ce2cd48110e66267e3c78831674f62f\u0026type=album)\n\n\u003ch3\u003eEndpoints\u003c/h3\u003e\n\n*Регистрация*\n\n```\nВАЖНО!\n1. Вставьте актуальный адрес APISIX сервиса.\n2. Осуществляйте запросы на данный момент через Postman или терминал.\n```\n\n1. Зарегестрируйте почту, логин и пароль(Получите JWT токен и используйте его в заголовке Authorization).\n\u003ch4\u003ePOST auth/registration\u003c/h4\u003e\n\n```\ncurl -X 'POST' \\\n  'http://example.com/auth/registration' \\\n  -H 'accept: application/json' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"username\": \"testusername\",\n  \"password\": \"testpassword\",\n  \"user_email\": \"testemail@example.com\"\n}'\n```\n\n2. Закончите регистрацию в сервисе.\n\n```\ncurl -X 'POST' \\\n  'http://example.com/users/create_user' \\\n  -H 'accept: application/json' \\\n  -H 'Content-Type: application/json' \\\n  -H 'Authorization: Bearer \u003cJWT Token\u003e\n  -d '{\n  \"first_name\": \"Test\",\n  \"last_name\": \"Test\",\n  \"gender\": \"male\",\n  \"birthday\": \"2023-07-18\"\n}'\n```\n\n*Создайте свой первый пост*\n\n```\ncurl -X 'POST' \\\n  'http://example.com/posts/create_post' \\\n  -H 'accept: application/json' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n  \"text_content\": \"My test text post!\"\n}'\n```\n\n\u003ch3\u003eTODO\u003c/h3\u003e\n\n- Сделать сервис для маршрутов в шлюзе, с плагином forward-auth\n\n- Натсроить добавление заголовка в запрос в OpenAPI для jwt\n\n- Сделать логирование\n\n- Добавить кеширование через Redis\n\n- Настроить nginx\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdreek1337%2Fego","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdreek1337%2Fego","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdreek1337%2Fego/lists"}