feat(shopping): tags sur les articles du catalogue
- Migration 006 : colonne tags TEXT[] sur shopping.products - Modèle SQLAlchemy + schémas Pydantic mis à jour (ProductCreate/Update/Response) - Interface TypeScript Product/ProductCreate/ProductUpdate avec tags?: string[] - CatalogueModal : chip input (Entrée/virgule pour ajouter, clic pour supprimer, Backspace pour retirer le dernier) - Recherche dans le catalogue et le bottom sheet étendue aux tags (insensible aux accents) - Tags affichés en pills dans la liste du catalogue v0.4.12 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
"""Ajout colonne tags (TEXT[]) sur shopping.products
|
||||
|
||||
Revision ID: 006
|
||||
Revises: 005
|
||||
Create Date: 2026-05-25
|
||||
"""
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
from sqlalchemy.dialects.postgresql import ARRAY
|
||||
|
||||
revision = '006'
|
||||
down_revision = '005'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade():
|
||||
op.add_column(
|
||||
'products',
|
||||
sa.Column('tags', ARRAY(sa.Text()), nullable=True),
|
||||
schema='shopping',
|
||||
)
|
||||
|
||||
|
||||
def downgrade():
|
||||
op.drop_column('products', 'tags', schema='shopping')
|
||||
@@ -2,7 +2,7 @@ import uuid
|
||||
from datetime import datetime, date
|
||||
from decimal import Decimal
|
||||
from sqlalchemy import String, Text, Integer, TIMESTAMP, Date, Numeric, Boolean, ForeignKey, text
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.dialects.postgresql import UUID, ARRAY
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
from app.core.database import Base
|
||||
|
||||
@@ -26,6 +26,7 @@ class Product(Base):
|
||||
frequency_score: Mapped[int] = mapped_column(Integer, server_default=text("0"))
|
||||
last_purchased_at: Mapped[date | None] = mapped_column(Date)
|
||||
avg_interval_days: Mapped[Decimal | None] = mapped_column(Numeric(8, 1))
|
||||
tags: Mapped[list[str] | None] = mapped_column(ARRAY(Text()), nullable=True)
|
||||
owner_id: Mapped[uuid.UUID | None] = mapped_column(UUID(as_uuid=True))
|
||||
created_at: Mapped[datetime] = mapped_column(TIMESTAMP(timezone=True), server_default=text("now()"))
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@ class ProductCreate(BaseModel):
|
||||
default_store_id: uuid.UUID | None = None
|
||||
image_path: str | None = None
|
||||
thumbnail_path: str | None = None
|
||||
tags: list[str] | None = None
|
||||
|
||||
|
||||
class ProductUpdate(BaseModel):
|
||||
@@ -54,6 +55,7 @@ class ProductUpdate(BaseModel):
|
||||
default_store_id: uuid.UUID | None = None
|
||||
image_path: str | None = None
|
||||
thumbnail_path: str | None = None
|
||||
tags: list[str] | None = None
|
||||
|
||||
|
||||
class ProductResponse(BaseModel):
|
||||
@@ -73,6 +75,7 @@ class ProductResponse(BaseModel):
|
||||
avg_interval_days: Decimal | None
|
||||
image_path: str | None
|
||||
thumbnail_path: str | None
|
||||
tags: list[str] | None
|
||||
|
||||
|
||||
class ListItemCreate(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user