Реализовать функционал контент-блоков абстрактных блоков, которые могут содержать заголовок, текст, набор контент-юнитов (файлов) и какую-то дополнительную мета-информацию (например, время создания, редактирования, автор, ...)
Есть приложение, написанное на fastapi, в котором уже реализована авторизация и взаимодействие с БД. Нужно дописать туда логику, которая будет реализовывать контент-блоки. То есть сделать api-хэндлеры, которые будут:
- Создавать блок с контентом
- Возвращать блок
- Редактировать контент блока
- Редактировать мета-информацию
Также надо реализовать функционал контент-юнитов, из которых могут состоять блоки. Эти контент-юниты содержат файлы, хранящиеся на s3.
Стек:
- python3.10, pydantic
- fastapi (sync)
- postgresql
- PonyORM, psycopg2
Проект имеет примерно такую структуру:
- db папка, где описываются модели данных и какие-то сложные запросы к БД (не CRUD)
- actions функции, реализующие бизнес-логику сервиса. Они получают нужные данные из базы с помощью модулей из db, как-то с ними оперируют и выдают результат
- тут же описываются веб-модели для контрактов апи
- routers сами хэндлеры с маршрутами, которые получают данные запроса, вызывают нужный action и возвращают данные на фронтенд
То есть примерная структура реализации будет выглядеть так (с отступами тут всё плохо):
```````
# pool: pony.orm.Database
### db models
class UnitDbModel(pool.Entity):
id = PrimaryKey(UUID)
title = Optional(str)
text = Optional(str)
version = Required(int, default=0)
is_active = Required(bool, default=True)
...
### actions/models
class UnitModelIn(BaseModel):
id: UUID
class UnitModelOut(BaseModel):
id: UUID | None = None
title: str | None = None
text: str | None = None
### actions
@db_session
def get_one_unit(in_data: UnitModelIn) -> UnitModelOut:
...
### routers
@api_router.get('/api/units/{unit_id}', response_model=UnitModelOut)
def get_unit(unit_id: UUID):
try:
in_data = UnitModelIn(uuid=unit_id)
unit = get_one_unit(in_data=in_data)
except ...:
raise HTTPException(...)
```
Примерный срок реализации на мой взгляд 2-3 недели.
Опубликован 18.07.2022 в 17:25 Последнее изменение: 18.07.2022 в 17:26
Заказ находится в архиве