64 lines
1.5 KiB
Python
64 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()
|
|
|
|
|
|
@router.post("/items/create")
|
|
async def create_note(title: str, session: AsyncSession = Depends(get_session)):
|
|
note = Note(title=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)):
|
|
new_note = Note(
|
|
id=req.id,
|
|
title=req.title,
|
|
checked=req.checked
|
|
)
|
|
await session.execute(
|
|
update(Note).where(Note.id == req.id).values(new_note)
|
|
)
|
|
await session.commit()
|
|
return {
|
|
"id": new_note.id,
|
|
"title": new_note.title,
|
|
"checked": new_note.checked
|
|
}
|
|
|
|
|
|
@router.delete("/items/delete")
|
|
async def delete_note(id: int, session: AsyncSession = Depends(get_session)):
|
|
await session.execute(
|
|
delete(Note).where(Note.id == id)
|
|
)
|
|
await session.commit()
|
|
return 204
|
|
|
|
|
|
__all__ = ["router"]
|