feat(shopping): refonte UX + CRUD catalogue/boutiques + champs enrichis
- UX : vue par défaut = liste en cours, landing si pas de liste (+ vert + baguette magique), suppression des vues "listes" et "mode magasin" séparés - Articles cochés barrés et déplacés en bas, tri alphabétique par section - Nom de liste auto avec numéro de semaine ISO (S21 2026) - Wake lock activé dès qu'une liste est ouverte - CRUD boutiques : POST/PATCH/DELETE /stores + modal Boutiques - CRUD articles : POST/PATCH/DELETE /products + modal Catalogue - Champs enrichis produits : description, prix, quantité/unité, boutique défaut - Champs enrichis boutiques : url, store_type (alimentaire, bricolage…) - Migration 003 : nouveaux champs en base Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,11 +5,51 @@ from typing import Literal
|
||||
from pydantic import BaseModel, ConfigDict, model_validator
|
||||
|
||||
|
||||
class StoreCreate(BaseModel):
|
||||
name: str
|
||||
location: str | None = None
|
||||
url: str | None = None
|
||||
store_type: str | None = None
|
||||
|
||||
|
||||
class StoreUpdate(BaseModel):
|
||||
name: str | None = None
|
||||
location: str | None = None
|
||||
url: str | None = None
|
||||
store_type: str | None = None
|
||||
|
||||
|
||||
class StoreResponse(BaseModel):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
id: uuid.UUID
|
||||
name: str
|
||||
location: str | None
|
||||
url: str | None
|
||||
store_type: str | None
|
||||
|
||||
|
||||
class ProductCreate(BaseModel):
|
||||
name: str
|
||||
brand: str | None = None
|
||||
category: str | None = None
|
||||
description: str | None = None
|
||||
default_unit: str | None = None
|
||||
barcode: str | None = None
|
||||
price: Decimal | None = None
|
||||
quantity_per_unit: Decimal | None = None
|
||||
default_store_id: uuid.UUID | None = None
|
||||
|
||||
|
||||
class ProductUpdate(BaseModel):
|
||||
name: str | None = None
|
||||
brand: str | None = None
|
||||
category: str | None = None
|
||||
description: str | None = None
|
||||
default_unit: str | None = None
|
||||
barcode: str | None = None
|
||||
price: Decimal | None = None
|
||||
quantity_per_unit: Decimal | None = None
|
||||
default_store_id: uuid.UUID | None = None
|
||||
|
||||
|
||||
class ProductResponse(BaseModel):
|
||||
@@ -18,7 +58,12 @@ class ProductResponse(BaseModel):
|
||||
name: str
|
||||
brand: str | None
|
||||
category: str | None
|
||||
description: str | None
|
||||
default_unit: str | None
|
||||
barcode: str | None
|
||||
price: Decimal | None
|
||||
quantity_per_unit: Decimal | None
|
||||
default_store_id: uuid.UUID | None
|
||||
frequency_score: int
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user