Skip to content

casper-71/selectel_ticketing_system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Catalog service

Содержание

  1. Описание проекта
  2. Используемые технологии
  3. Структура проекта
  4. Работа с проектом
    4.1 Настройка виртуального окружения
    4.2 Переменные окружения
    4.3 Управление миграциями через Alembic
    4.4 Запуск проекта
  5. Полезные материалы

Описание

Тикет-система

Тикет-система должна состоять из:

  • Тикетов, у тикетов могут быть комментарии
  • Тикет создается в статусе “открыт”, может перейти в “отвечен” или “закрыт”, из
    отвечен в “ожидает ответа” или “закрыт”, статус “закрыт” финальный (нельзя
    изменить статус или добавить комментарий)

Используемые технологии

  • Код приложения пишется на 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-pipfile

Переменные окружения

DATABASE_DSN='<строка подключения к Database>'
REDIS_HOST='<адрес Redis хоста>'
REDIS_PORT='<порт для подключения к Redis>'

Управление миграциями через Alembic

Данные операции необходимо выполнять из директории src

  1. Создание миграций:

    $  alembic -c ./models/alembic.ini revision -m "some message" --autogenerate

    Данная команда сгенерирует новую миграцию, но не применит её к БД.

  2. Применение миграции к БД:

    $ alembic -c ./models/alembic.ini upgrade head

Запуск проекта

  1. Создать файл .env
  2. Запуск сервисов PostgreSQL, Redis
    $ sudo docker-compose up -d
  3. После того как запустится PostgreSQL, Redis:
    В корневой директории запустить:
    $ ./entrypoint.sh

Полезные материалы

Пишем и тестируем миграции БД с Alembic
Pipenv: руководство по инструменту

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages