46 lines
1.7 KiB
Python
46 lines
1.7 KiB
Python
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
from sqlalchemy.orm import Session
|
|
from app.database import get_db
|
|
from app.schemas.product import ProductCreate, ProductUpdate, ProductResponse
|
|
from app.services import product_service
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.post("", response_model=ProductResponse, status_code=201)
|
|
def create(data: ProductCreate, db: Session = Depends(get_db)):
|
|
return product_service.create_product(db, data)
|
|
|
|
|
|
@router.get("", response_model=list[ProductResponse])
|
|
def listar(skip: int = Query(0), limit: int = Query(20), db: Session = Depends(get_db)):
|
|
return product_service.get_products(db, skip, limit)
|
|
|
|
|
|
@router.get("/low-stock", response_model=list[ProductResponse])
|
|
def low_stock(db: Session = Depends(get_db)):
|
|
return product_service.get_low_stock_products(db)
|
|
|
|
|
|
@router.get("/{product_id}", response_model=ProductResponse)
|
|
def obtener(product_id: str, db: Session = Depends(get_db)):
|
|
prod = product_service.get_product(db, product_id)
|
|
if not prod:
|
|
raise HTTPException(status_code=404, detail="Producto no encontrado")
|
|
return prod
|
|
|
|
|
|
@router.put("/{product_id}", response_model=ProductResponse)
|
|
def actualizar(product_id: str, data: ProductUpdate, db: Session = Depends(get_db)):
|
|
prod = product_service.update_product(db, product_id, data)
|
|
if not prod:
|
|
raise HTTPException(status_code=404, detail="Producto no encontrado")
|
|
return prod
|
|
|
|
|
|
@router.delete("/{product_id}", status_code=204)
|
|
def eliminar(product_id: str, db: Session = Depends(get_db)):
|
|
ok = product_service.delete_product(db, product_id)
|
|
if not ok:
|
|
raise HTTPException(status_code=404, detail="Producto no encontrado")
|