Работа с конечными точками товаров
Откроем файл products.py и приступим к реализации кода. Первым делом напишем код для функции, отвечающая за создание товаров. Код это функции почти не будет отличаться от кода функции создания категорий. Основное отличие только в количестве полей:
@router.post('/create')
async def create_product(db: Annotated[Session, Depends(get_db)], create_product: CreateProduct):
db.execute(insert(Product).values(name=create_product.name,
description=create_product.description,
price=create_product.price,
image_url=create_product.image_url,
stock=create_product.stock,
category_id=create_product.category,
rating=0.0,
slug=slugify(create_product.name)))
db.commit()
return {
'status_code': status.HTTP_201_CREATED,
'transaction': 'Successful'
}
Запустим сервер командой uvicorn app.main:app --reload и попробуем создать первый товар заполнив необходимые параметры.
{
"name": "MacBook",
"description": "string",
"price": 20000,
"image_url": "string",
"stock": 1,
"category": 2
}
Не забываем указывать ID категории и остаток больше 0. Так как в дальнейшем мы будем показывать товары, только которые имеют статус активен и их на остатке более 0. В результате получим следующий ответ:
{
"status_code": 201,
"transaction": "Successful"
}
По аналогии добавим еще несколько товаров.
Теперь приступим к реализации конечной точки, выводящей все товары из нашей базы данных. Фильтруя результаты по полю is_active и stock.
@router.get('/')
async def all_products(db: Annotated[Session, Depends(get_db)]):
products = db.scalars(select(Product).where(Product.is_active == True, Product.stock > 0)).all()
if products is None:
return HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail='There are no product'
)
return products
Запустим сервер uvicorn app.main:app --reload и попробуем получить все товары:
Мы видим что логика создания и получения товаров прекрасно работает, в следующем шаге мы продолжим добавлять функционал в наши конечные точки API.