c46e524193
Better-Auth uses nanoid strings for user IDs, not UUIDs. Changed all user_id parameter/return types in the API layer from UUID to str, removed the obsolete UUID import where unused, and updated the _validate_session_token return type accordingly. Co-authored-by: CartSnitch Engineer Bot <cartnoreply@cartsnitch.com> Co-authored-by: Paperclip <noreply@paperclip.ing>
57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
"""Product routes: search/list, detail, price history."""
|
|
|
|
from uuid import UUID
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Query, status
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from cartsnitch_api.auth.dependencies import get_current_user
|
|
from cartsnitch_api.database import get_db
|
|
from cartsnitch_api.schemas import PriceTrendResponse, ProductDetailResponse, ProductResponse
|
|
from cartsnitch_api.services.products import ProductService
|
|
|
|
router = APIRouter(prefix="/products", tags=["products"])
|
|
|
|
|
|
@router.get("", response_model=list[ProductResponse])
|
|
async def list_products(
|
|
user_id: str = Depends(get_current_user),
|
|
q: str | None = Query(None),
|
|
category: str | None = Query(None),
|
|
page: int = Query(1, ge=1),
|
|
page_size: int = Query(20, ge=1, le=100),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
svc = ProductService(db)
|
|
return await svc.list_products(q, category, page, page_size)
|
|
|
|
|
|
@router.get("/{product_id}", response_model=ProductDetailResponse)
|
|
async def get_product(
|
|
product_id: UUID,
|
|
user_id: str = Depends(get_current_user),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
svc = ProductService(db)
|
|
try:
|
|
return await svc.get_product(product_id)
|
|
except LookupError:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND, detail="Product not found"
|
|
) from None
|
|
|
|
|
|
@router.get("/{product_id}/prices", response_model=PriceTrendResponse)
|
|
async def get_product_prices(
|
|
product_id: UUID,
|
|
user_id: str = Depends(get_current_user),
|
|
db: AsyncSession = Depends(get_db),
|
|
):
|
|
svc = ProductService(db)
|
|
try:
|
|
return await svc.get_price_history(product_id)
|
|
except LookupError:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND, detail="Product not found"
|
|
) from None
|