from __future__ import annotations from typing import Annotated from fastapi import APIRouter, Depends, status from sqlalchemy.orm import Session from app.api.dependencies import get_current_shop from app.db.session import get_db from app.models.user import User from app.schemas.product import ProductCreate, ProductResponse from app.services.product_service import ProductService router = APIRouter() @router.get( "", response_model=list[ProductResponse], status_code=status.HTTP_200_OK, summary="Browse available products", ) def list_products( db: Annotated[Session, Depends(get_db)], ) -> list[ProductResponse]: products = ProductService(db).list_available_products() return [ProductResponse.model_validate(product) for product in products] @router.post( "", response_model=ProductResponse, status_code=status.HTTP_201_CREATED, summary="Create a product (shop only)", ) def create_product( payload: ProductCreate, db: Annotated[Session, Depends(get_db)], current_shop: Annotated[User, Depends(get_current_shop)], ) -> ProductResponse: product = ProductService(db).create_product(payload, current_shop) return ProductResponse.model_validate(product)