- Описание проекта
- Используемые технологии
- Структура проекта
- Работа с проектом
4.1 Настройка виртуального окружения
4.2 Переменные окружения
4.3 Управление миграциями через Alembic
4.4 Запуск проекта - Полезные материалы
Тикет-система должна состоять из:
- Тикетов, у тикетов могут быть комментарии
- Тикет создается в статусе “открыт”, может перейти в “отвечен” или “закрыт”, из
отвечен в “ожидает ответа” или “закрыт”, статус “закрыт” финальный (нельзя
изменить статус или добавить комментарий)
- Код приложения пишется на Python + FastAPI.
- Приложение запускается под управлением сервера ASGI(uvicorn).
- Хранилище – PostgreSQL.
- За кеширование данных отвечает – redis cluster.
- Корень проекта — в нём находятся базовые вещи, например, ci и gitignore.
src— содержит исходный код приложения.main.py— входная точка приложения.api— модуль, в котором реализуется API. Другими словами, это модуль для предоставления http-интерфейса клиентским приложениям. Внутри модуля отсутствует какая-либо бизнес-логика, так как она не должна быть завязана на HTTP.core— содержит разные конфигурационные файлы.db— предоставляет объекты баз данных (Redis, PostgreSQL) и провайдеры для внедрения зависимостей. Redis будет использоваться для кеширования, чтобы не нагружать лишний раз PostgreSQL.models— содержит классы, описывающие бизнес-сущностиschemas- содержит модели отвечающие за валидацию тела запроса.services— главное в сервисе. В этом модуле находится реализация всей бизнес-логики. Таким образом она отделена от транспорта. Благодаря такому разделению, будет легче добавлять новые типы транспортов в сервис.
Необходима установка pipenv:
$ pip install pipenvВ корневой директории запустить команду:
$ pipenv install --ignore-pipfileDATABASE_DSN='<строка подключения к Database>'
REDIS_HOST='<адрес Redis хоста>'
REDIS_PORT='<порт для подключения к Redis>'Данные операции необходимо выполнять из директории src
-
Создание миграций:
$ alembic -c ./models/alembic.ini revision -m "some message" --autogenerateДанная команда сгенерирует новую миграцию, но не применит её к БД.
-
Применение миграции к БД:
$ alembic -c ./models/alembic.ini upgrade head
- Создать файл
.env - Запуск сервисов
PostgreSQL,Redis$ sudo docker-compose up -d
- После того как запустится
PostgreSQL,Redis:
В корневой директории запустить:$ ./entrypoint.sh
Пишем и тестируем миграции БД с Alembic
Pipenv: руководство по инструменту