Jotzy/backend/app/routes/notes.py

62 lines
1.8 KiB
Python
Raw Normal View History

2025-11-23 09:08:01 +00:00
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"}