- Описание
- Используемые технологии хранения данных
- Используемые python зависимости
- Архитектура проекта
- Переменные окружения
- Тестирование
- Запуск проекта
API-сервер для дипломной работы на тему "Мобильное приложение "Книгочей" с функциями персонализации"
- Структура базы данных доступна в вики БД.
- Файл схемы базы данных в формате DBML доступен здесь.
- Посмотреть документацию на DBML.
База данных в этом проекте предназначена для хранения следующих данных:
- Пользователей
- Персонализированных списков пользователй
- Произведений
- Комментариев
- Сообщений
- Тикетов от пользователей для администрации.
Например, сообщения об ошибках, запросов на получение роли (
автора/издателя
) для публикации произведений и т.п. - Путей на файлы в S3 хранилище с указанием их типов, название, ссылок, статуса(
Активный/Удаленный/Временный
) и т.п. - И других сущностей.
Схема базы данных показана ниже:
S3-хранилище предназначено для хранения следующих файлов:
- Обложек произведений (
jpeg/png/gif
) - Аватарок пользователей(
jpeg/png/gif
) - Содержимого произведений в допустимых форматах (
FB2/EPUB
)
Полный файл требуемых зависимостей можно посмотреть тут.
Список основных зависимостей:
- Pydantic - Для валидации данных.
- Pydantic Settings - Для управления переменными окружения.
- FastApi - Для создания API.
- SQLAlchemy - Для работы с базой данных
MySQL 8
. - Boto3 - Для работы с
S3-хранилищем
. - Pytest - для тестирования.
Проект структурирован про принципу MVC (Model-View-Controller).
api/
- Обработчики HTTP-запросов, подключенные к маршрутам FastAPI.db/
- Управляет подключением к базе данных и сессиям, с использованием SQLAlchemymodels/
- ORM-модели для базы данных, описанные с помощью SQLAlchemy.schemas/
- Pydantic-схемы для валидации входных и выходных данных.services/
- Контроллеры для работы с БД (Бизнес-логика).storage/
- Контроллер для работы с файлами. Поддерживает CRUD-операции над файлами изS3
илилокального
хранилища.utils/
- Утилиты Содержит вспомогательные функции, классы и данные.
Организация тестовых кейсов:
test_api/
- Для тестирования api-маршрутов.test_services/
- Для тестирования контроллеров.test_storage/
- Для тестирования хранилища.test_orm/
- Для тестирования ORM модели базы данных
conftest.py
- Для настройки тестовой среды.
-
requirements.txt
- Содержит список библиотек, необходимых для работы сервера. -
.env
- Файл переменных окружения. Содержит конфигурационные параметры сервера. -
main.py
- Точка входа FastApi-сервера.
Посмотреть пример файла переменных окружения можно тут
Для настройки переменных окружения, необходимо создать файл .env
в директории проекта,
затем используя пример .env.example, задать в созданном файле необходимые переменные.
Описание переменных окружения, можно посмотреть ниже.
- ENVIRONMENT - Тип текущего окружения:
- development - Для локальной разработки.
- release - Для запуска в контейнере.
- SERVER_HOST - IP-адрес на котором запускается сервер.
- SERVER_PORT - Порт на котором сервер слушает входящие запросы.
- USE_S3 - Использовать ли S3 или локальное хранилище (
true/false
).
- MYSQL_HOST - Адрес сервера MySQL .
- MYSQL_PORT - Порт на котором работает MySQL.
- MYSQL_USER - Имя пользователя для подключения к базе данных.
- MYSQL_PASSWORD - Пароль пользователя для аутентификации.
- MYSQL_DBNAME - Имя базы данных для подключения.
- S3_URL - URL-адрес S3 сервиса.
- S3_BUCKET_NAME - Имя S3-бакета.
- S3_ACCESS_KEY - Ключ доступа к S3.
- S3_SECRET_ACCESS_KEY - Секретный ключ доступа к S3.
- S3_REGION - Регион в котором находиться S3-бакет.
- S3_PROJECT_PREFIX - Директория внутри S3-бакета, в которой хранятся файлы, относящиеся к этому проекту.
- JWT_SECRET_KEY - Секретный ключ, для подписи JWT-токенов.
- JWT_ALGORITHM - Алгоритм хеширования.
- JWT_ACCESS_TOKEN_EXPIRE_MINUTES - Время жизни access-токена.
- LOCAL_STORAGE_PATH - Путь до хранилища на локальном устройстве.
Для запуска тестов необходимо загрузить зависимости из requirements.txt, настроить переменные окружения, перейти в директорию проекта и выполнить следующую команду:
$ pytest
В результате выполняться все тесты из директории tests/
.
Раздел пока не написан.