Spaces:
Sleeping
Sleeping
File size: 1,999 Bytes
64c1bdf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | from __future__ import annotations
from datetime import datetime
from fastapi import APIRouter, Query
from app.api.deps import IntentExtractorDep, SessionDep
from app.domain import Source
from app.errors import InvalidRequestError, NotFoundError
from app.repositories import NoteRepository
from app.schemas.common import Page
from app.schemas.notes import NoteCreate, NoteDetailOut, NoteOut, NoteProcessResponse
from app.services.pipeline import NotePipeline
router = APIRouter(prefix="/api/notes", tags=["notes"])
@router.post("", response_model=NoteProcessResponse, status_code=201)
def create_note(
payload: NoteCreate,
session: SessionDep,
extractor: IntentExtractorDep,
) -> NoteProcessResponse:
pipeline = NotePipeline(session, extractor)
return pipeline.process(payload.text, Source.TEXT)
@router.get("", response_model=Page[NoteOut])
def list_notes(
session: SessionDep,
source: Source | None = None,
created_from: datetime | None = None,
created_to: datetime | None = None,
task_id: str | None = None,
limit: int = Query(default=20, ge=1, le=100),
offset: int = Query(default=0, ge=0),
) -> Page[NoteOut]:
if created_from and created_to and created_from > created_to:
raise InvalidRequestError("created_from must be on or before created_to")
notes, total = NoteRepository(session).list(
source=source,
created_from=created_from,
created_to=created_to,
task_id=task_id,
limit=limit,
offset=offset,
)
return Page(
items=[NoteOut.model_validate(note) for note in notes],
total=total,
limit=limit,
offset=offset,
)
@router.get("/{note_id}", response_model=NoteDetailOut)
def get_note(note_id: str, session: SessionDep) -> NoteDetailOut:
note = NoteRepository(session).get(note_id, with_task=True)
if note is None:
raise NotFoundError(f"Note {note_id!r} not found")
return NoteDetailOut.model_validate(note)
|