30 lines
1.3 KiB
Python
30 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import List, Optional
|
|
|
|
import aiosqlite
|
|
from fastapi import APIRouter, Depends, Query, Request
|
|
|
|
import persons
|
|
from common import Page, ProblemDetails
|
|
from main import get_db # temporary during extraction
|
|
|
|
router = APIRouter(prefix="/persons", tags=["persons"])
|
|
|
|
|
|
@router.get("", response_model=Page[persons.Person], operation_id="listPersons", summary="List persons (paginated)")
|
|
async def list_persons(
|
|
q: Optional[str] = Query(default=None, description="Optional case-insensitive name filter (applied after page read; may be pushed to SQL in the future)."),
|
|
cursor: Optional[str] = Query(default=None, description="Opaque cursor for pagination. Pass the value returned in nextCursor to fetch the next page."),
|
|
limit: int = Query(50, ge=1, le=200, description="Maximum number of items to return (1-200)."),
|
|
conn: aiosqlite.Connection = Depends(get_db),
|
|
request: Request | None = None,
|
|
) -> Page[persons.Person]:
|
|
raise NotImplementedError("list_persons extraction pending")
|
|
|
|
|
|
@router.post("", response_model=persons.Person, operation_id="createPerson", summary="Create a person")
|
|
async def create_person(
|
|
person: persons.Person, conn: aiosqlite.Connection = Depends(get_db)
|
|
) -> persons.Person:
|
|
raise NotImplementedError("create_person extraction pending")
|