{"id":29016414,"url":"https://github.com/jkl2thebest/salary-rest-service","last_synced_at":"2025-07-23T12:06:44.522Z","repository":{"id":301135351,"uuid":"1007056961","full_name":"JKL2theBest/salary-rest-service","owner":"JKL2theBest","description":"A secure FastAPI REST service for viewing salary data using JWT authentication.","archived":false,"fork":false,"pushed_at":"2025-06-25T10:19:11.000Z","size":72,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-25T10:49:35.983Z","etag":null,"topics":["api","api-rest","docker","fastapi","gitlab","jwt","jwt-token","ml","poetry","pytest","python","qa","rest-api","testing"],"latest_commit_sha":null,"homepage":"https://gitlab.com/JKL2theBest/salary-rest-service","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/JKL2theBest.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,"zenodo":null}},"created_at":"2025-06-23T11:54:29.000Z","updated_at":"2025-06-25T10:19:14.000Z","dependencies_parsed_at":"2025-06-25T10:49:38.521Z","dependency_job_id":"e37c125b-e2a3-4e9b-8fdf-4b61a7d9af5c","html_url":"https://github.com/JKL2theBest/salary-rest-service","commit_stats":null,"previous_names":["jkl2thebest/salary-rest-service"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JKL2theBest/salary-rest-service","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fsalary-rest-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fsalary-rest-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fsalary-rest-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fsalary-rest-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JKL2theBest","download_url":"https://codeload.github.com/JKL2theBest/salary-rest-service/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JKL2theBest%2Fsalary-rest-service/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261960448,"owners_count":23236575,"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":["api","api-rest","docker","fastapi","gitlab","jwt","jwt-token","ml","poetry","pytest","python","qa","rest-api","testing"],"created_at":"2025-06-25T22:08:15.976Z","updated_at":"2025-06-25T22:08:16.722Z","avatar_url":"https://github.com/JKL2theBest.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Salary service\n\nПроект представляет собой REST-сервис для просмотра текущей зарплаты и даты следующего повышения. Каждый сотрудник может видеть только свои данные. Доступ к защищенным данным осуществляется с помощью JWT токенов.\n\n## Технологический стек\n\n*   **FastAPI**: для создания REST API.\n*   **Poetry**: для управления зависимостями.\n*   **Pytest**: для тестирования.\n*   **Docker**: для контейнеризации.\n\n## Установка и запуск\n\nМожно запустить двумя способами: локально с помощью Poetry или в контейнере Docker.\n\n### Шаг 1\n\n#### 1.1. Клонируйте репозиторий\n```bash\ngit clone https://gitlab.com/JKL2theBest/salary-rest-service\ncd salary-rest-service\n```\n\n#### 1.2. Настройте переменные окружения\n\n1.  Найдите в проекте файл `.env.example`. Он выглядит так:\n    ```ini\n    # .env.example\n    SECRET_KEY=\"\"\n    ACCESS_TOKEN_EXPIRE_MINUTES=30\n    ALGORITHM=\"HS256\"\n    ```\n2.  Скопируйте этот файл и назовите копию `.env`:\n    ```bash\n    cp .env.example .env\n    ```\n3.  Сгенерируйте секретный ключ:\n    ```bash\n    python -c 'import secrets; print(secrets.token_hex(32))'\n    ```\n4.  Вставьте его в файл `.env`:\n    ```ini\n    # .env\n    SECRET_KEY=\"e9a3f8c1b5d7e6f4a3b2c1d0e9f8a7b6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f0\"\n    ...\n    ```\n\n### Шаг 2 (Вариант А): Poetry\n\n1.  **Установите зависимости проекта:**\n    ```bash\n    poetry install\n    ```\n2.  **Запустите веб-сервис:**\n    ```bash\n    poetry run uvicorn app.main:app --reload --app-dir src --port 8001\n    ```\n    *   Стандартный порт 8000 часто занят другими программами, поэтому 8001 — более надежный выбор.\n\n*   **Готово!** Сервис доступен по адресу:\n*   `http://127.0.0.1:8001`\n*   **(Swagger UI)**: `http://127.0.0.1:8001/docs`\n\n### Шаг 2 (Вариант Б): Docker\n\n1.  **Соберите Docker-образ:**\n    ```bash\n    docker build -t salary-rest-service .\n    ```\n2.  **Запустите контейнер:**\n    ```bash\n    docker run -d -p 8001:8000 --name salary-app salary-rest-service\n    ```\n\n*   **Готово!** Сервис доступен по адресу `http://127.0.0.1:8001`.\n\nЧтобы остановить контейнер, выполните: `docker stop salary-app`.\n\n## Тестирование\n\nТесты написаны с `pytest`.\n\n#### Запуск всех тестов\n```bash\npoetry run pytest\n```\n\n#### Запуск тестов с отчетом о покрытии\n```bash\npoetry run pytest --cov=app --cov-report=term-missing\n```\n\n#### Флаг `-v` (verbose) выведет названия каждого выполняемого теста\n```bash\npoetry run pytest -v\n```\n\n## Взаимодействие с API\n\nВы можете взаимодействовать с API через интерактивную документацию (`http://127.0.0.1:8001/docs`) или с помощью утилиты `curl` в терминале.\n\n**Тестовые пользователи:**\n*   **Логин:** `user1` / **Пароль:** `strongpassword1`\n*   **Логин:** `user2` / **Пароль:** `supersecret2`\n\n\u003e **Примечание**: В командах ниже используется порт `8001`. Если вы запускали сервис на другом порту, измените его.\n\n### 1. Получение токена доступа\n```bash\ncurl -X POST \"http://127.0.0.1:8001/token\" \\\n-H \"Content-Type: application/x-www-form-urlencoded\" \\\n-d \"username=user1\u0026password=strongpassword1\"\n```\n**Ответ:**\n```json\n{\n  \"access_token\": \"eyJhbGciOiJI...\",\n  \"token_type\": \"bearer\"\n}\n```\n\n### 2. Получение данных о зарплате\nСкопируйте `access_token` из ответа выше и подставьте его в следующую команду вместо `YOUR_TOKEN`.\n\n```bash\ncurl -X GET \"http://127.0.0.1:8001/users/me/salary\" \\\n-H \"Authorization: Bearer YOUR_TOKEN\"\n```\n**Ответ:**\n```json\n{\n  \"salary\": 60000.0,\n  \"next_raise_date\": \"2024-08-01\"\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkl2thebest%2Fsalary-rest-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjkl2thebest%2Fsalary-rest-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkl2thebest%2Fsalary-rest-service/lists"}