web2-hw1/backend/app/routes.py
2023-01-04 00:30:08 +03:00

66 lines
1.6 KiB
Python

from fastapi import APIRouter, Depends, Response
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 NoteResponse(BaseModel):
id: int
title: str
checked: bool
class NoteCreate(BaseModel):
title: str
@router.post('/items/create', response_model=NoteResponse)
async def create_note(req: NoteCreate, session: AsyncSession = Depends(get_session)):
note = Note(title=req.title)
session.add(note)
await session.commit()
await session.refresh(note)
return NoteResponse(id=note.id, title=note.title, checked=note.checked)
class NoteUpdateReq(BaseModel):
id: int
title: str
checked: bool
@router.put('/items/update', response_model=NoteResponse)
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 NoteResponse(**req.dict())
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 Response(None, 204)
__all__ = ["router"]