2025-03-14 16:18:55 +10:00

3.5 KiB
Raw Blame History

python_dev

Запуск

cp .env.example .env docker compose up -d

миграции БД

cp .env.example .env cd alembic/db1 && alembic revision --autogenerate && alembic upgrade head cd alembic/db2 && alembic revision --autogenerate && alembic upgrade head

режим разработки

cp .env.example .env rye sync granian src/app.py --reload

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

📦python_dev_farpost ┣ 📂alembic ┃ ┣ 📂db1 - вспомогательные инструменты alembic для миграций первой БД ┃ ┗ 📂db2 - вспомогательные инструменты alembic для миграций второй БД ┣ 📂database ┃ ┣ 📂dumps - дампы БД ┃ ┗ 📜....sh - скрипт, для автоматизации создания и импорта дампов в multiDB ┣ 📂src ┃ ┣ 📂adapters ┃ ┃ ┗ 📂database - модели sqlAlchemy и инструменты для подключения к БД ┃ ┣ 📂api - эндпоинты fastapi + формирование датасета (не делил ввиду отстутствия необходимости) ┃ ┣ 📂schemas - схемы для обработки входных и выходных данных (в тч валидации данных для БД) ┃ ┣ 📜app.py - приложение для запуска ┃ ┣ 📜settings.py - валидация настроек из .env, которые в дальнейшем удобно брать ┣ 📜.env.example - ┣ 📜.gitignore ┣ 📜compose.yaml ┣ 📜Dockerfile ┣ 📜Makefile ┣ 📜pyproject.toml - данные проекта для запуска rye ┣ 📜README.md ┣ 📜requirements-dev.lock ┗ 📜requirements.lock

что не по ТЗ

  • мне не очень понравилось, что space_type и event_type сделаны через отдельные таблицы

    • потому что работать с этой таблицей будет бэкенд, и у нас есть различные API хэндлеры, которым, чтобы создать запись в БД нужно сходить на дочерние таблицы, найти нужный тип (например event_type - login), взять от него id, прийти назад и создать запись с нужным id, при этом это ещё будет не надёжным (кто-то удалит тип, поменяет название, всё поляжет) + а зачем нам отдельная таблица? (я в том смысле, что над этими типа у нас есть все операции круд, но без изменения кода бэкенда - это либо бесполезно, либо опасно)
    • я заменил на более удобные Enum
  • датасет comments

    • так как информации о связи постов комментариев не было - я создал таблицу Comment
    • было упоминание "написать комментарий" в таблице логов, которую можно было дополнить столбцом, ведущим к постту, но мне кажется это не очень хорошим решением - сначала разделять на 2 БД, а потом пытаться связать данные внутри них