feat: add Create Product and CRUD actions to vendor-products page

- Add "Create Product" button in header
- Update actions column to View, Edit, Delete
- Add create/edit pages with forms and vendor selector
- Add POST/PATCH API endpoints for vendor products
- Add create_product and update_product service methods

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-25 11:20:17 +01:00
parent ef7c79908c
commit d65ffa58f6
9 changed files with 937 additions and 6 deletions

View File

@@ -21,12 +21,14 @@ class VendorProductListItem(BaseModel):
vendor_id: int
vendor_name: str | None = None
vendor_code: str | None = None
marketplace_product_id: int
marketplace_product_id: int | None = None
vendor_sku: str | None = None
title: str | None = None
brand: str | None = None
price: float | None = None
currency: str | None = None
effective_price: float | None = None
effective_currency: str | None = None
is_active: bool | None = None
is_featured: bool | None = None
is_digital: bool | None = None
@@ -142,3 +144,43 @@ class RemoveProductResponse(BaseModel):
"""Response from product removal."""
message: str
class VendorProductCreate(BaseModel):
"""Schema for creating a vendor product."""
vendor_id: int
title: str
brand: str | None = None
vendor_sku: str | None = None
gtin: str | None = None
price: float | None = None
currency: str = "EUR"
availability: str | None = None
is_active: bool = True
is_featured: bool = False
is_digital: bool = False
description: str | None = None
class VendorProductUpdate(BaseModel):
"""Schema for updating a vendor product."""
title: str | None = None
brand: str | None = None
vendor_sku: str | None = None
gtin: str | None = None
price_override: float | None = None
currency_override: str | None = None
availability: str | None = None
is_active: bool | None = None
is_featured: bool | None = None
is_digital: bool | None = None
description: str | None = None
class VendorProductCreateResponse(BaseModel):
"""Response from product creation."""
id: int
message: str