Заказ закрыт
Дописать модуль в существующий сервис на fastapi

Бюджет: по договоренности
Реализовать функционал контент-блоков – абстрактных блоков, которые могут содержать заголовок, текст, набор контент-юнитов (файлов) и какую-то дополнительную мета-информацию (например, время создания, редактирования, автор, ...)

Есть приложение, написанное на 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
Заказ находится в архиве

Выберите способ верификации:

Обновите страницу после прохождения верификации.