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"}