031708ad8f
Backend : - Migration 006 : colonne urls JSONB nullable sur notes.items - Modèle NoteItem : champ urls list[dict] - Schémas : NoteUrl (label + url avec validation http/https), NoteCreate/NoteUpdate/NoteResponse exposent urls Frontend : - api/notes.ts : interface NoteUrl + champ urls sur Note/NoteCreate - NoteForm : section "Liens" avec ajout (libellé + URL), suppression, validation http/https, confirmation par Enter - NotesPage : badge compteur liens dans metaLine (semi/collapsed), section liens cliquables dans le mode expanded v0.5.13 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
60 lines
1.4 KiB
Python
60 lines
1.4 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
from pydantic import BaseModel, ConfigDict, HttpUrl, field_validator
|
|
|
|
|
|
class NoteUrl(BaseModel):
|
|
label: str
|
|
url: str
|
|
|
|
@field_validator('url')
|
|
@classmethod
|
|
def validate_url(cls, v: str) -> str:
|
|
if not v.startswith(('http://', 'https://')):
|
|
raise ValueError('URL doit commencer par http:// ou https://')
|
|
return v
|
|
|
|
|
|
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: float | None = None
|
|
gps_lon: float | None = None
|
|
urls: list[NoteUrl] = []
|
|
|
|
|
|
class NoteUpdate(BaseModel):
|
|
title: str | None = None
|
|
content: str | None = None
|
|
category: str | None = None
|
|
tags: list[str] | None = None
|
|
gps_lat: float | None = None
|
|
gps_lon: float | None = None
|
|
urls: list[NoteUrl] | 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: float | None
|
|
gps_lon: float | None
|
|
urls: list[NoteUrl] = []
|
|
created_at: datetime
|
|
attachments: list[AttachmentResponse]
|