Files
home_hub/backend/app/schemas/todos.py
T
gilles e9dfb6e293 feat(todos): domains[], photo_path, gps_lat/lng — modèle, schemas, API, tri par date
- Modèle SQLAlchemy : ajout de domains (ARRAY), photo_path, gps_lat, gps_lng ; import Float
- Schemas Pydantic : domain → domains dans TodoCreate, TodoUpdate, TodoResponse ; ajout photo_path, gps_lat, gps_lng
- API GET /api/todos : filtre domain (param URL) redirigé vers domains.contains([domain]) sur le champ ARRAY
- Tests : domain → domains dans les payloads POST ; assertion domains == ["informatique"] dans test_creer_todo
2026-05-24 16:04:21 +02:00

61 lines
1.6 KiB
Python

import uuid
from datetime import datetime
from typing import Literal
from pydantic import BaseModel, ConfigDict, Field
class TodoCreate(BaseModel):
title: str
body: str | None = None
url: str | None = None
domains: list[str] = Field(default_factory=list)
category: str | None = None
tags: list[str] = Field(default_factory=list)
status: Literal["pending", "done", "cancelled"] = "pending"
priority: Literal["low", "medium", "high"] = "medium"
due_date: datetime | None = None
photo_path: str | None = None
gps_lat: float | None = None
gps_lng: float | None = None
class TodoUpdate(BaseModel):
title: str | None = None
body: str | None = None
url: str | None = None
domains: list[str] | None = None
category: str | None = None
tags: list[str] | None = None
status: Literal["pending", "done", "cancelled"] | None = None
priority: Literal["low", "medium", "high"] | None = None
due_date: datetime | None = None
photo_path: str | None = None
gps_lat: float | None = None
gps_lng: float | None = None
class PostponeRequest(BaseModel):
days: Literal[1, 7]
class TodoResponse(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: uuid.UUID
title: str
body: str | None
url: str | None
domains: list[str]
category: str | None
tags: list[str]
status: str
priority: str
due_date: datetime | None
postponed_count: int
created_at: datetime
updated_at: datetime | None
owner_id: uuid.UUID | None
photo_path: str | None
gps_lat: float | None
gps_lng: float | None