54 lines
3.8 KiB
Markdown
54 lines
3.8 KiB
Markdown
# 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 БД, а потом пытаться связать данные внутри них
|
||
|
||
## мои сомнения
|
||
я недопонял смыслого посыла датасета comments, поэтому тот датасет - это количество комментариев одного пользователя под пост другого с деталями |