5.7 Написание запросов к БД используя SQLAlchemy, часть 2
3 из 3 шагов пройдено

Работа с конечными точками товаров

Откроем файл 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.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.