2025-11-23 09:08:01 +00:00
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
|
|
from sqlmodel import Session, select
|
|
|
|
|
|
2025-12-08 22:08:30 +00:00
|
|
|
from app.auth import require_auth
|
|
|
|
|
from app.database import get_session
|
|
|
|
|
from app.models import Note, NoteCreate, NoteUpdate, User
|
|
|
|
|
|
2025-11-23 09:08:01 +00:00
|
|
|
router = APIRouter(prefix="/notes", tags=["notes"])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.get("/")
|
|
|
|
|
def list_notes(session: Session = Depends(get_session)):
|
2025-12-08 22:08:30 +00:00
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@router.post("/", response_model=Note)
|
2025-12-08 22:08:30 +00:00
|
|
|
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"}
|