Wraps the Task 2 CRUD layer in a FastAPI app (schemas.py + main.py) with POST/GET/GET-by-id/PATCH routes for items, matching the exact paths and status codes the Discord bot's HTTP client will depend on. Also fixes a latent bug in db.get_engine: sqlite:///:memory: without a StaticPool gives each new session a fresh, empty database, which broke as soon as more than one session shared an engine (the API's per-request session pattern). Tasks 1-2 never hit this because their tests used a single session per engine.
35 lines
798 B
Python
35 lines
798 B
Python
from datetime import datetime, date
|
|
from pydantic import BaseModel, ConfigDict
|
|
|
|
|
|
class ItemCreate(BaseModel):
|
|
modality: str
|
|
raw_content: str
|
|
captured_at: datetime
|
|
discord_message_id: str | None = None
|
|
sender_id: str | None = None
|
|
|
|
|
|
class ItemUpdate(BaseModel):
|
|
sender_id: str | None = None
|
|
type: str | None = None
|
|
stage: str | None = None
|
|
notes: str | None = None
|
|
follow_up_date: date | None = None
|
|
|
|
|
|
class ItemOut(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int
|
|
modality: str
|
|
raw_content: str
|
|
captured_at: datetime
|
|
sender_id: str | None
|
|
type: str | None
|
|
stage: str
|
|
notes: str | None
|
|
follow_up_date: date | None
|
|
discord_message_id: str | None
|
|
created_at: datetime
|
|
updated_at: datetime
|