feat: Phase 4 — module Notes complet

Backend :
- schemas/notes.py : NoteCreate/Update/Response + AttachmentResponse
- api/notes.py : CRUD + FTS français (plainto_tsquery) + filtres rapides
  (has_photo/audio/gps/tag/category) + pièces jointes (image/audio)
- main.py : enregistrement /api/notes

Frontend :
- api/notes.ts : fetchNotes/create/update/delete + add/deleteAttachment
- NoteForm.tsx : titre, contenu, catégorie, tags CSV, GPS
- NotesPage.tsx : liste mobile (chronologique) + grille laptop, FAB +,
  enregistrement audio inline (MediaRecorder), upload photo, filtres rapides

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 06:49:46 +02:00
co-authored by Claude Sonnet 4.6
parent c4634b5a27
commit fdeb747f38
6 changed files with 835 additions and 4 deletions
+45
View File
@@ -0,0 +1,45 @@
import uuid
from datetime import datetime
from decimal import Decimal
from pydantic import BaseModel, ConfigDict
class AttachmentResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
file_path: str | None
thumbnail_path: str | None
file_type: str | None
original_name: str | None
created_at: datetime
class NoteCreate(BaseModel):
title: str | None = None
content: str
category: str | None = None
tags: list[str] = []
gps_lat: Decimal | None = None
gps_lon: Decimal | None = None
class NoteUpdate(BaseModel):
title: str | None = None
content: str | None = None
category: str | None = None
tags: list[str] | None = None
gps_lat: Decimal | None = None
gps_lon: Decimal | None = None
class NoteResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
title: str | None
content: str
category: str | None
tags: list[str]
gps_lat: Decimal | None
gps_lon: Decimal | None
created_at: datetime
attachments: list[AttachmentResponse]