114 lines
3.0 KiB
Python

from typing import Any, List
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from app.core.auth import get_current_active_user
from app.crud import product as crud_product
from app.db.session import get_db
from app.models.user import User
from app.schemas.product import Product, ProductCreate, ProductUpdate
router = APIRouter()
@router.get("", response_model=List[Product])
def read_products(
db: Session = Depends(get_db),
skip: int = 0,
limit: int = 100,
current_user: User = Depends(get_current_active_user)
) -> Any:
"""
Retrieve products for the current user.
"""
products = crud_product.get_products(
db, user_id=current_user.id, skip=skip, limit=limit
)
return products
@router.post("", response_model=Product, status_code=status.HTTP_201_CREATED)
def create_product(
*,
db: Session = Depends(get_db),
product_in: ProductCreate,
current_user: User = Depends(get_current_active_user)
) -> Any:
"""
Create new product for the current user.
"""
product = crud_product.create_product(
db, user_id=current_user.id, product_in=product_in
)
return product
@router.get("/{product_id}", response_model=Product)
def read_product(
*,
db: Session = Depends(get_db),
product_id: int,
current_user: User = Depends(get_current_active_user)
) -> Any:
"""
Get product by ID.
"""
product = crud_product.get_product(
db, user_id=current_user.id, product_id=product_id
)
if not product:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Product not found",
)
return product
@router.patch("/{product_id}", response_model=Product)
def update_product(
*,
db: Session = Depends(get_db),
product_id: int,
product_in: ProductUpdate,
current_user: User = Depends(get_current_active_user)
) -> Any:
"""
Update a product.
"""
product = crud_product.get_product(
db, user_id=current_user.id, product_id=product_id
)
if not product:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Product not found",
)
product = crud_product.update_product(
db, user_id=current_user.id, db_product=product, product_in=product_in
)
return product
@router.delete("/{product_id}", response_model=Product)
def delete_product(
*,
db: Session = Depends(get_db),
product_id: int,
current_user: User = Depends(get_current_active_user)
) -> Any:
"""
Delete a product.
"""
product = crud_product.get_product(
db, user_id=current_user.id, product_id=product_id
)
if not product:
raise HTTPException(
status_code=status.HTTP_404_NOT_FOUND,
detail="Product not found",
)
product = crud_product.delete_product(
db, user_id=current_user.id, product_id=product_id
)
return product