Асташов И.В. 2024.
Репозиторий содержит проект сервиса на FastAPI, предназначенного для просмотра текущей зарплаты и даты следующего повышения. В целях обеспечения безопасности конфиденциальных данных сотрудников, реализован метод выдачи секретного токена по логину и паролю, который действует в течение определенного времени. Доступ к данным о зарплате предоставляется только при предъявлении валидного токена.
Обязательные технические требования:
- Код размещен и доступен в публичном репозитории;
- Оформлена инструкция по запуску сервиса и взаимодействию с проектом в формате Markdown;
- Сервис реализован на FastAPI.
Необязательные технические требования:
- Зависимости зафиксированы менеджером зависимостей poetry;
- Написаны тесты с использованием pytest;
- Реализована возможность собирать и запускать контейнер с сервисом в Docker.
- Python
- FastAPI
- Uvicorn
- PostgreSQL
- Alembic
- alembic/: миграции базы данных;
- controllers/salaries.py: Контроллер, который содержит логику для создания и получения информации о зарплате;
- controllers/tokens.py: Контроллер, отвечающий за создание и управление токенами авторизации;
- controllers/users.py: Контроллер для работы с пользователями, включая их регистрацию;
- exceptions/custom_exceptions.py: Файл с пользовательскими исключениями, которые могут возникнуть в сервисе;
- htmlcov/: Папка, которая содержит отчеты о покрытии кода тестами в формате HTML;
- models/core.py: Описание основных моделей базы данных, таких как пользователи, токены и зарплаты;
- models/database.py: Файл для настройки подключения к базе данных и создания сессии SQLAlchemy;
- models/schemas.py: Схемы Pydantic для валидации данных, используемых в сервисе;
- routers/salaries.py: Роутер для обработки запросов, связанных с зарплатой пользователей;
- routers/tokens.py: Роутер для работы с токенами авторизации;
- routers/users.py: Роутер для управления пользователями, включая регистрацию и получение информации о себе;
- secure/init.py: Модуль с настройками безопасности, такими как шифрование паролей и схема API-ключа;
- views/salaries.py: Вид для выполнения запросов к базе данных для получения информации о зарплате пользователей;
- views/users.py: Вид для выполнения запросов к базе данных для работы с пользователями;
- .coverage: Файл, который содержит информацию о покрытии кода тестами в формате Coverage.py;
- .env: Файл с конфигурационными переменными, такими как данные для подключения к базе данных;
- alembic.ini: Файл конфигурации Alembic, инструмента для управления миграциями базы данных;
- config.py: Файл с настройками приложения, который загружает переменные среды из файла .env;
- docker-compose.yml: Файл конфигурации Docker Compose, определяет сервисы, их зависимости и настройки для развертывания;
- Dockerfile: Файл для создания Docker-образа сервиса;
- main.py: Основной файл приложения FastAPI, где объединяются все роутеры и настройки;
- poetry.lock: Файл, Poetry с фиксацией версий зависимостей;
- pyproject.toml: Файл конфигурации проекта Poetry, где определяются зависимости, скрипты и другие настройки проекта;
- README.md: Файл README с инструкциями по запуску сервиса и взаимодействию с ним;
- test.db: Файл базы данных, который используется для тестирования приложения.
Для управления зависимостями проекта используется Poetry. Сначала нужно установить Poetry;
$ poetry install
$ poetry shell
$ uvicorn main:app --reload
$ docker build . -t fastapi_app:latest
$ docker run -it --rm -p '8000:8000' fastapi_app
Открыть документацию API для просмотра: http://127.0.0.1:8000/docs
User
- id: int
- email: str
- hashed_password: str
Token:
- id: int
- user_id: int
- access_token: str
- expires_at: datetime
Salary:
- id: int
- user_id: int
- amount: int
- next_raise_date: datetime
/
- GET: Базовая информация о приложении
/users
- GET: Получить список всех пользователей
- POST: Зарегистрировать нового пользователя
/users/self
- GET: Получить информацию о текущем пользователе по токену
/tokens
- POST: Создать новый токен для пользователя
/salaries
- GET: Получить информацию о текущей зарплате и дате следующего повышения для пользователя
- POST: Добавить или обновить информацию о зарплате для пользователя
Используемые материалы: