69 lines
1.9 KiB
Python
69 lines
1.9 KiB
Python
|
from fastapi import APIRouter, HTTPException, status, Depends
|
||
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||
|
|
||
|
from . import crud
|
||
|
from .schemas import Product, ProductCreate, ProductUpdate, ProductUpdatePartial
|
||
|
|
||
|
from core.models import db_helper
|
||
|
|
||
|
from .dependencies import get_product_by_id
|
||
|
|
||
|
router = APIRouter(prefix="")
|
||
|
|
||
|
|
||
|
@router.get("", response_model=list[Product])
|
||
|
async def get_all_products(
|
||
|
session: AsyncSession = Depends(db_helper.session_dependency),
|
||
|
):
|
||
|
return await crud.get_all_products(session=session)
|
||
|
|
||
|
|
||
|
@router.post("", response_model=Product, status_code=status.HTTP_201_CREATED)
|
||
|
async def create_product(
|
||
|
product_in: ProductCreate,
|
||
|
session: AsyncSession = Depends(db_helper.session_dependency),
|
||
|
):
|
||
|
return await crud.create_product(session=session, product_in=product_in)
|
||
|
|
||
|
|
||
|
@router.get("/{product_id}", response_model=Product)
|
||
|
async def get_product(
|
||
|
product=Depends(get_product_by_id),
|
||
|
):
|
||
|
return product
|
||
|
|
||
|
|
||
|
@router.put("/{product_id}")
|
||
|
async def update_product(
|
||
|
product_update: ProductUpdate,
|
||
|
product=Depends(get_product_by_id),
|
||
|
session: AsyncSession = Depends(db_helper.session_dependency),
|
||
|
):
|
||
|
return await crud.update_product(
|
||
|
session=session,
|
||
|
product=product,
|
||
|
product_update=product_update,
|
||
|
)
|
||
|
|
||
|
|
||
|
@router.patch("/{product_id}")
|
||
|
async def update_product_partial(
|
||
|
product_update: ProductUpdatePartial,
|
||
|
product=Depends(get_product_by_id),
|
||
|
session: AsyncSession = Depends(db_helper.session_dependency),
|
||
|
):
|
||
|
return await crud.update_product(
|
||
|
session=session,
|
||
|
product=product,
|
||
|
product_update=product_update,
|
||
|
partial=True,
|
||
|
)
|
||
|
|
||
|
|
||
|
@router.delete("/{product_id}", status_code=status.HTTP_204_NO_CONTENT)
|
||
|
async def delete_product(
|
||
|
product=Depends(get_product_by_id),
|
||
|
session: AsyncSession = Depends(db_helper.session_dependency),
|
||
|
) -> None:
|
||
|
await crud.delete_product(session=session, product=product)
|