munch-ease-backend/api/products.py

34 lines
859 B
Python

from __future__ import annotations
from typing import List, Optional
import aiosqlite
from fastapi import APIRouter, Depends, Response
from pydantic import Field
import products
from common import ApiModel
from api.deps import get_db
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