Jotzy/backend/app/routes/notes.py

70 lines
2 KiB
Python
Raw Permalink Normal View History

2025-11-23 09:08:01 +00:00
from datetime import datetime
from app.auth import require_auth
from app.database import get_session
from app.models import Note, NoteCreate, NoteRead, NoteUpdate, User
from fastapi import APIRouter, Depends, HTTPException
from sqlmodel import Session, select
2025-11-23 09:08:01 +00:00
router = APIRouter(prefix="/notes", tags=["notes"])
@router.get("/", response_model=list[NoteRead])
2025-11-23 09:08:01 +00:00
def list_notes(session: Session = Depends(get_session)):
notes = session.exec(select(Note).order_by(Note.updated_at.desc())).all() # pyright: ignore[reportAttributeAccessIssue]
2025-11-23 09:08:01 +00:00
return notes
2025-11-23 09:08:01 +00:00
@router.post("/", response_model=Note)
def create_note(
note: NoteCreate,
current_user: User = Depends(require_auth),
session: Session = Depends(get_session),
):
note_data = note.model_dump()
note_data["user_id"] = current_user.id
db_note = Note.model_validate(note_data)
2025-11-23 09:08:01 +00:00
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"}