from __future__ import annotations from typing import List, Optional import aiosqlite from fastapi import APIRouter, Depends, Response from pydantic import Field import products from api.deps import get_db from common import ApiModel router = APIRouter(prefix="/products", tags=["products"]) class ProductUrl(ApiModel): url: str tags: List[str] = Field(default_factory=list) @router.post( "", operation_id="createProduct", summary="Create or fetch a product from a URL", response_model=products.Product, ) async def create_product( url: ProductUrl, response: Response, conn: aiosqlite.Connection = Depends(get_db) ) -> Optional[products.Product]: product = await products.get_or_create(conn, url.url, url.tags) if product: response.headers["Location"] = f"/api/v1/products/{product.id}" return product