remove intermediate grocery table and add related_products feature

This commit is contained in:
2025-05-28 09:22:47 +02:00
parent 3ea5db4214
commit 112ea41e88
16 changed files with 1140 additions and 1532 deletions

View File

@@ -60,31 +60,10 @@ class GroceryCategory(GroceryCategoryBase):
class Config:
from_attributes = True
# Grocery schemas
class GroceryBase(BaseModel):
name: str
category_id: int
class GroceryCreate(GroceryBase):
pass
class GroceryUpdate(BaseModel):
name: Optional[str] = None
category_id: Optional[int] = None
class Grocery(GroceryBase):
id: int
created_at: datetime
updated_at: Optional[datetime] = None
category: GroceryCategory
class Config:
from_attributes = True
# Base schemas
# Product schemas
class ProductBase(BaseModel):
name: str
grocery_id: int
category_id: int
brand_id: Optional[int] = None
organic: bool = False
weight: Optional[float] = None
@@ -95,7 +74,7 @@ class ProductCreate(ProductBase):
class ProductUpdate(BaseModel):
name: Optional[str] = None
grocery_id: Optional[int] = None
category_id: Optional[int] = None
brand_id: Optional[int] = None
organic: Optional[bool] = None
weight: Optional[float] = None
@@ -105,7 +84,7 @@ class Product(ProductBase):
id: int
created_at: datetime
updated_at: Optional[datetime] = None
grocery: Grocery
category: GroceryCategory
brand: Optional[Brand] = None
class Config:
@@ -142,7 +121,7 @@ class ProductInEvent(BaseModel):
class ProductWithEventData(BaseModel):
id: int
name: str
grocery: Grocery
category: GroceryCategory
brand: Optional[Brand] = None
organic: bool
weight: Optional[float] = None
@@ -193,4 +172,30 @@ class ShopStats(BaseModel):
avg_per_visit: float
# Update forward references
BrandInShop.model_rebuild()
BrandInShop.model_rebuild()
# Related Products schemas
class RelatedProductBase(BaseModel):
product_id: int
related_product_id: int
relationship_type: Optional[str] = None
class RelatedProductCreate(RelatedProductBase):
pass
class RelatedProductUpdate(BaseModel):
relationship_type: Optional[str] = None
class RelatedProduct(RelatedProductBase):
id: int
created_at: datetime
class Config:
from_attributes = True
# Product with related products
class ProductWithRelated(Product):
related_products: List["Product"] = []
class Config:
from_attributes = True