From 2e5f50b6bd5200268071eb6e91c4e1c1e5fa9a4e Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sun, 28 Dec 2025 21:21:58 +0100 Subject: [PATCH] fix: add vendor page creation endpoint and update JS logic MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add POST /admin/content-pages/vendor endpoint for vendor overrides - Update JS to use /vendor or /platform endpoint based on vendor selection - Platform endpoint forces vendor_id=None, vendor endpoint requires vendor_id 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- app/api/v1/admin/content_pages.py | 46 ++++++++++++++++++++++++++++ static/admin/js/content-page-edit.js | 9 ++++-- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/app/api/v1/admin/content_pages.py b/app/api/v1/admin/content_pages.py index f26cbb78..74a1fb3a 100644 --- a/app/api/v1/admin/content_pages.py +++ b/app/api/v1/admin/content_pages.py @@ -161,6 +161,52 @@ def create_platform_page( return page.to_dict() +# ============================================================================ +# VENDOR PAGES +# ============================================================================ + + +@router.post("/vendor", response_model=ContentPageResponse, status_code=201) +def create_vendor_page( + page_data: ContentPageCreate, + current_user: User = Depends(get_current_admin_api), + db: Session = Depends(get_db), +): + """ + Create a vendor-specific content page override. + + Vendor pages override platform defaults for a specific vendor. + """ + if not page_data.vendor_id: + from fastapi import HTTPException + + raise HTTPException( + status_code=400, + detail="vendor_id is required for vendor pages. Use /platform for platform defaults.", + ) + + page = content_page_service.create_page( + db, + slug=page_data.slug, + title=page_data.title, + content=page_data.content, + vendor_id=page_data.vendor_id, + content_format=page_data.content_format, + template=page_data.template, + meta_description=page_data.meta_description, + meta_keywords=page_data.meta_keywords, + is_published=page_data.is_published, + show_in_footer=page_data.show_in_footer, + show_in_header=page_data.show_in_header, + show_in_legal=page_data.show_in_legal, + display_order=page_data.display_order, + created_by=current_user.id, + ) + db.commit() + + return page.to_dict() + + # ============================================================================ # ALL CONTENT PAGES (Platform + Vendors) # ============================================================================ diff --git a/static/admin/js/content-page-edit.js b/static/admin/js/content-page-edit.js index 76df5641..d12d6ce6 100644 --- a/static/admin/js/content-page-edit.js +++ b/static/admin/js/content-page-edit.js @@ -163,10 +163,13 @@ function contentPageEditor(pageId) { this.successMessage = 'Page updated successfully!'; contentPageEditLog.info('Page updated'); } else { - // Create new page - response = await apiClient.post('/admin/content-pages/platform', payload); + // Create new page - use vendor or platform endpoint based on selection + const endpoint = this.form.vendor_id + ? '/admin/content-pages/vendor' + : '/admin/content-pages/platform'; + response = await apiClient.post(endpoint, payload); this.successMessage = 'Page created successfully!'; - contentPageEditLog.info('Page created'); + contentPageEditLog.info('Page created', { endpoint, vendor_id: this.form.vendor_id }); // Redirect to edit page after creation const pageData = response.data || response;