From 8f8a1559be0947ad7db448556ece19d8541e2ee9 Mon Sep 17 00:00:00 2001 From: openclaw Date: Sat, 11 Apr 2026 03:58:41 +0000 Subject: [PATCH] Add app/routers/products.py --- app/routers/products.py | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 app/routers/products.py diff --git a/app/routers/products.py b/app/routers/products.py new file mode 100644 index 0000000..83ea1b5 --- /dev/null +++ b/app/routers/products.py @@ -0,0 +1,45 @@ +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")