codebookly / src /app /api /routes /chapters.py
aymie-oh's picture
initial commit
55d0d9e
from fastapi import APIRouter, HTTPException, Form, Depends
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy import select
from app.schemas.schemas import Chapter, Appendix
from app.database.db import get_async_session
import logging
import app.services.chapter as chapter_service
log = logging.getLogger(__name__)
router = APIRouter(prefix="/api", tags=["chapters"])
chapter_service = chapter_service.ChapterService()
@router.get("/chapters")
async def root(
session: AsyncSession = Depends(get_async_session)
):
chapters = await chapter_service.get_chapters(session)
return [Chapter.model_validate(chapter) for chapter in chapters]
@router.get("/appendix")
async def get_appendix(
session: AsyncSession = Depends(get_async_session)
):
appendix = await chapter_service.get_appendix(session)
return [Appendix.model_validate(appendix) for appendix in appendix]
@router.get("/search-chapter-or-appendix/{search}")
async def get_chapter_appendix(
search: str,
session: AsyncSession = Depends(get_async_session)
):
data_row, content_type = await chapter_service.get_chapter_appendix_by_search(session, search)
if not data_row:
raise HTTPException(status_code=404, detail="Chapter appendix not found")
if content_type == "chapter":
return Chapter.model_validate(data_row)
return Appendix.model_validate(data_row)