web2-hw1/backend/app/routes.py

67 lines
1.5 KiB
Python

from fastapi import APIRouter, Depends
from pydantic import BaseModel
from sqlalchemy import select, update, delete
from sqlalchemy.ext.asyncio import AsyncSession
from app.models import Note
from app.dependencies import get_session
router = APIRouter()
@router.get("/items")
async def get_notes(session: AsyncSession = Depends(get_session)):
result = await session.execute(
select(Note).order_by(Note.id)
)
return result.scalars().all()
class NoteCreate(BaseModel):
title: str
@router.post("/items/create")
async def create_note(req: NoteCreate, session: AsyncSession = Depends(get_session)):
note = Note(title=req.title)
session.add(note)
await session.commit()
return {
"id": note.id,
"title": note.title,
"checked": note.checked
}
class NoteUpdateReq(BaseModel):
id: int
title: str
checked: bool
@router.put("/items/update")
async def update_note(req: NoteUpdateReq, session: AsyncSession = Depends(get_session)):
await session.execute(
update(Note).where(Note.id == req.id).values(req.__dict__)
)
await session.commit()
return {
"id": req.id,
"title": req.title,
"checked": req.checked
}
class NoteDeleteReq(BaseModel):
id: int
@router.delete("/items/delete")
async def delete_note(req: NoteDeleteReq, session: AsyncSession = Depends(get_session)):
await session.execute(
delete(Note).where(Note.id == req.id)
)
await session.commit()
return 204
__all__ = ["router"]