67 lines
1.5 KiB
Python
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"]
|