File size: 1,488 Bytes
eec7490
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1865b8a
 
 
 
eec7490
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Endpoints pour les manuscrits (R10 — préfixe /api/v1/).

GET  /api/v1/manuscripts/{manuscript_id}/pages
"""
# 2. third-party
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, ConfigDict
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession

# 3. local
from app.models.corpus import ManuscriptModel, PageModel
from app.models.database import get_db

router = APIRouter(prefix="/manuscripts", tags=["manuscripts"])


class PageResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: str
    manuscript_id: str
    folio_label: str
    sequence: int
    image_master_path: str | None
    iiif_service_url: str | None = None
    canvas_width: int | None = None
    canvas_height: int | None = None
    manifest_url: str | None = None
    processing_status: str
    confidence_summary: float | None


@router.get("/{manuscript_id}/pages", response_model=list[PageResponse])
async def list_pages(
    manuscript_id: str, db: AsyncSession = Depends(get_db)
) -> list[PageModel]:
    """Retourne toutes les pages d'un manuscrit, triées par séquence."""
    ms = await db.get(ManuscriptModel, manuscript_id)
    if ms is None:
        raise HTTPException(status_code=404, detail="Manuscrit introuvable")
    result = await db.execute(
        select(PageModel)
        .where(PageModel.manuscript_id == manuscript_id)
        .order_by(PageModel.sequence)
    )
    return list(result.scalars().all())