feat: add marketplace products admin UI with copy-to-vendor functionality
- Add admin marketplace products page to browse imported products - Add admin vendor products page to manage vendor catalog - Add product detail pages for both marketplace and vendor products - Implement copy-to-vendor API to copy marketplace products to vendor catalogs - Add vendor product service with CRUD operations - Update sidebar navigation with new product management links - Add integration and unit tests for new endpoints and services 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -25,6 +25,8 @@ Routes:
|
||||
- GET /users → User management page (auth required)
|
||||
- GET /customers → Customer management page (auth required)
|
||||
- GET /imports → Import history page (auth required)
|
||||
- GET /marketplace-products → Marketplace products catalog (auth required)
|
||||
- GET /vendor-products → Vendor products catalog (auth required)
|
||||
- GET /settings → Settings page (auth required)
|
||||
- GET /platform-homepage → Platform homepage manager (auth required)
|
||||
- GET /content-pages → Content pages list (auth required)
|
||||
@@ -517,6 +519,99 @@ async def admin_marketplace_page(
|
||||
)
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# PRODUCT CATALOG ROUTES
|
||||
# ============================================================================
|
||||
|
||||
|
||||
@router.get("/marketplace-products", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def admin_marketplace_products_page(
|
||||
request: Request,
|
||||
current_user: User = Depends(get_current_admin_from_cookie_or_header),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Render marketplace products page.
|
||||
Browse the master product repository imported from external sources.
|
||||
"""
|
||||
return templates.TemplateResponse(
|
||||
"admin/marketplace-products.html",
|
||||
{
|
||||
"request": request,
|
||||
"user": current_user,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/marketplace-products/{product_id}",
|
||||
response_class=HTMLResponse,
|
||||
include_in_schema=False,
|
||||
)
|
||||
async def admin_marketplace_product_detail_page(
|
||||
request: Request,
|
||||
product_id: int = Path(..., description="Marketplace Product ID"),
|
||||
current_user: User = Depends(get_current_admin_from_cookie_or_header),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Render marketplace product detail page.
|
||||
Shows full product information from the master repository.
|
||||
"""
|
||||
return templates.TemplateResponse(
|
||||
"admin/marketplace-product-detail.html",
|
||||
{
|
||||
"request": request,
|
||||
"user": current_user,
|
||||
"product_id": product_id,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@router.get("/vendor-products", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def admin_vendor_products_page(
|
||||
request: Request,
|
||||
current_user: User = Depends(get_current_admin_from_cookie_or_header),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Render vendor products catalog page.
|
||||
Browse vendor-specific product catalogs with override capability.
|
||||
"""
|
||||
return templates.TemplateResponse(
|
||||
"admin/vendor-products.html",
|
||||
{
|
||||
"request": request,
|
||||
"user": current_user,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@router.get(
|
||||
"/vendor-products/{product_id}",
|
||||
response_class=HTMLResponse,
|
||||
include_in_schema=False,
|
||||
)
|
||||
async def admin_vendor_product_detail_page(
|
||||
request: Request,
|
||||
product_id: int = Path(..., description="Vendor Product ID"),
|
||||
current_user: User = Depends(get_current_admin_from_cookie_or_header),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Render vendor product detail page.
|
||||
Shows full product information with vendor-specific overrides.
|
||||
"""
|
||||
return templates.TemplateResponse(
|
||||
"admin/vendor-product-detail.html",
|
||||
{
|
||||
"request": request,
|
||||
"user": current_user,
|
||||
"product_id": product_id,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
# ============================================================================
|
||||
# SETTINGS ROUTES
|
||||
# ============================================================================
|
||||
|
||||
Reference in New Issue
Block a user