62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
|
|
from datetime import datetime
|
||
|
|
|
||
|
|
from app.database import get_session
|
||
|
|
from app.models import Note, NoteCreate, NoteUpdate
|
||
|
|
from fastapi import APIRouter, Depends, HTTPException
|
||
|
|
from sqlmodel import Session, select
|
||
|
|
|
||
|
|
router = APIRouter(prefix="/notes", tags=["notes"])
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/")
|
||
|
|
def list_notes(session: Session = Depends(get_session)):
|
||
|
|
notes = session.exec(select(Note).order_by(Note.updated_at.desc())).all()
|
||
|
|
return notes
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/", response_model=Note)
|
||
|
|
def create_note(note: NoteCreate, session: Session = Depends(get_session)):
|
||
|
|
db_note = Note.model_validate(note)
|
||
|
|
session.add(db_note)
|
||
|
|
session.commit()
|
||
|
|
session.refresh(db_note)
|
||
|
|
return db_note
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/{note_id}", response_model=Note)
|
||
|
|
def get_note(note_id: int, session: Session = Depends(get_session)):
|
||
|
|
note = session.get(Note, note_id)
|
||
|
|
if not note:
|
||
|
|
raise HTTPException(status_code=404, detail="Note not found")
|
||
|
|
return note
|
||
|
|
|
||
|
|
|
||
|
|
@router.patch("/{note_id}", response_model=Note)
|
||
|
|
def update_note(
|
||
|
|
note_id: int, note_update: NoteUpdate, session: Session = Depends(get_session)
|
||
|
|
):
|
||
|
|
note = session.get(Note, note_id)
|
||
|
|
if not note:
|
||
|
|
raise HTTPException(status_code=404, detail="Note not found")
|
||
|
|
|
||
|
|
update_data = note_update.model_dump(exclude_unset=True)
|
||
|
|
for key, value in update_data.items():
|
||
|
|
setattr(note, key, value)
|
||
|
|
|
||
|
|
note.updated_at = datetime.utcnow()
|
||
|
|
session.add(note)
|
||
|
|
session.commit()
|
||
|
|
session.refresh(note)
|
||
|
|
return note
|
||
|
|
|
||
|
|
|
||
|
|
@router.delete("/{note_id}")
|
||
|
|
def delete_note(note_id: int, session: Session = Depends(get_session)):
|
||
|
|
note = session.get(Note, note_id)
|
||
|
|
if not note:
|
||
|
|
raise HTTPException(status_code=404, detail="Note not found")
|
||
|
|
|
||
|
|
session.delete(note)
|
||
|
|
session.commit()
|
||
|
|
return {"message": "Note deleted"}
|