From 51a2114e027a5f30bb95036bc8e42d06676af307 Mon Sep 17 00:00:00 2001 From: Samir Boulahtit Date: Sat, 18 Apr 2026 10:30:09 +0200 Subject: [PATCH] refactor(cms): migrate store theme UI from tenancy to CMS module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move store theme admin pages, templates, and JS from tenancy module to CMS module where the data layer (model, service, API, schemas) already lives. Eliminates split ownership. Moved: - Route handlers: GET /store-themes, GET /stores/{code}/theme - Templates: store-theme.html, store-themes.html - JS: store-theme.js, store-themes.js - Updated static references: tenancy_static → cms_static Deleted old tenancy files (no remaining references). Menu item in CMS definition already pointed to correct route. Co-Authored-By: Claude Opus 4.6 (1M context) --- app/modules/cms/routes/pages/admin.py | 50 ++++++++++++++++++- .../static/admin/js/store-theme.js | 0 .../static/admin/js/store-themes.js | 0 .../templates/cms}/admin/store-theme.html | 2 +- .../templates/cms}/admin/store-themes.html | 2 +- app/modules/tenancy/routes/pages/admin.py | 46 ----------------- docs/proposals/cms-redesign-alignment.md | 2 +- 7 files changed, 52 insertions(+), 50 deletions(-) rename app/modules/{tenancy => cms}/static/admin/js/store-theme.js (100%) rename app/modules/{tenancy => cms}/static/admin/js/store-themes.js (100%) rename app/modules/{tenancy/templates/tenancy => cms/templates/cms}/admin/store-theme.html (99%) rename app/modules/{tenancy/templates/tenancy => cms/templates/cms}/admin/store-themes.html (98%) diff --git a/app/modules/cms/routes/pages/admin.py b/app/modules/cms/routes/pages/admin.py index ac0d17d6..c49d5129 100644 --- a/app/modules/cms/routes/pages/admin.py +++ b/app/modules/cms/routes/pages/admin.py @@ -2,7 +2,8 @@ """ CMS Admin Page Routes (HTML rendering). -Admin pages for managing platform and store content pages. +Admin pages for managing platform and store content pages, +and store theme customization. """ from fastapi import APIRouter, Depends, Path, Request @@ -10,6 +11,7 @@ from fastapi.responses import HTMLResponse from sqlalchemy.orm import Session from app.api.deps import get_db, require_menu_access +from app.modules.core.utils.page_context import get_admin_context from app.modules.enums import FrontendType from app.modules.tenancy.models import User from app.templates_config import templates @@ -86,3 +88,49 @@ async def admin_content_page_edit( "page_id": page_id, }, ) + + +# ============================================================================ +# STORE THEMES +# ============================================================================ + + +@router.get("/store-themes", response_class=HTMLResponse, include_in_schema=False) +async def admin_store_themes_page( + request: Request, + current_user: User = Depends( + require_menu_access("store-themes", FrontendType.ADMIN) + ), + db: Session = Depends(get_db), +): + """ + Render store themes selection page. + Allows admins to select a store to customize their theme. + """ + return templates.TemplateResponse( + "cms/admin/store-themes.html", + get_admin_context(request, db, current_user), + ) + + +@router.get( + "/stores/{store_code}/theme", + response_class=HTMLResponse, + include_in_schema=False, +) +async def admin_store_theme_page( + request: Request, + store_code: str = Path(..., description="Store code"), + current_user: User = Depends( + require_menu_access("store-themes", FrontendType.ADMIN) + ), + db: Session = Depends(get_db), +): + """ + Render store theme customization page. + Allows admins to customize colors, fonts, layout, and branding. + """ + return templates.TemplateResponse( + "cms/admin/store-theme.html", + get_admin_context(request, db, current_user, store_code=store_code), + ) diff --git a/app/modules/tenancy/static/admin/js/store-theme.js b/app/modules/cms/static/admin/js/store-theme.js similarity index 100% rename from app/modules/tenancy/static/admin/js/store-theme.js rename to app/modules/cms/static/admin/js/store-theme.js diff --git a/app/modules/tenancy/static/admin/js/store-themes.js b/app/modules/cms/static/admin/js/store-themes.js similarity index 100% rename from app/modules/tenancy/static/admin/js/store-themes.js rename to app/modules/cms/static/admin/js/store-themes.js diff --git a/app/modules/tenancy/templates/tenancy/admin/store-theme.html b/app/modules/cms/templates/cms/admin/store-theme.html similarity index 99% rename from app/modules/tenancy/templates/tenancy/admin/store-theme.html rename to app/modules/cms/templates/cms/admin/store-theme.html index f159e770..d43caced 100644 --- a/app/modules/tenancy/templates/tenancy/admin/store-theme.html +++ b/app/modules/cms/templates/cms/admin/store-theme.html @@ -459,5 +459,5 @@ {% endblock %} {% block extra_scripts %} - + {% endblock %} diff --git a/app/modules/tenancy/templates/tenancy/admin/store-themes.html b/app/modules/cms/templates/cms/admin/store-themes.html similarity index 98% rename from app/modules/tenancy/templates/tenancy/admin/store-themes.html rename to app/modules/cms/templates/cms/admin/store-themes.html index 875e13e5..40177648 100644 --- a/app/modules/tenancy/templates/tenancy/admin/store-themes.html +++ b/app/modules/cms/templates/cms/admin/store-themes.html @@ -125,5 +125,5 @@ {% block extra_scripts %} - + {% endblock %} diff --git a/app/modules/tenancy/routes/pages/admin.py b/app/modules/tenancy/routes/pages/admin.py index 1ac6a178..e5f2134a 100644 --- a/app/modules/tenancy/routes/pages/admin.py +++ b/app/modules/tenancy/routes/pages/admin.py @@ -243,52 +243,6 @@ async def admin_store_roles_page( ) -# ============================================================================ -# STORE THEMES ROUTES -# ============================================================================ - - -@router.get("/store-themes", response_class=HTMLResponse, include_in_schema=False) -async def admin_store_themes_page( - request: Request, - current_user: User = Depends( - require_menu_access("store-themes", FrontendType.ADMIN) - ), - db: Session = Depends(get_db), -): - """ - Render store themes selection page. - Allows admins to select a store to customize their theme. - """ - return templates.TemplateResponse( - "tenancy/admin/store-themes.html", - get_admin_context(request, db, current_user), - ) - - -@router.get( - "/stores/{store_code}/theme", - response_class=HTMLResponse, - include_in_schema=False, -) -async def admin_store_theme_page( - request: Request, - store_code: str = Path(..., description="Store code"), - current_user: User = Depends( - require_menu_access("store-themes", FrontendType.ADMIN) - ), - db: Session = Depends(get_db), -): - """ - Render store theme customization page. - Allows admins to customize colors, fonts, layout, and branding. - """ - return templates.TemplateResponse( - "tenancy/admin/store-theme.html", - get_admin_context(request, db, current_user, store_code=store_code), - ) - - # ============================================================================ # MERCHANT USER MANAGEMENT ROUTES (All Admins) # ============================================================================ diff --git a/docs/proposals/cms-redesign-alignment.md b/docs/proposals/cms-redesign-alignment.md index 5a09cf73..d480f3c3 100644 --- a/docs/proposals/cms-redesign-alignment.md +++ b/docs/proposals/cms-redesign-alignment.md @@ -242,7 +242,7 @@ This proposal covers the CMS foundation. The broader [storefront builder vision] | Section partials | `app/modules/cms/templates/cms/platform/sections/_*.html` | | CMS definition (admin menu) | `app/modules/cms/definition.py` | | Tenancy definition (admin menu) | `app/modules/tenancy/definition.py` | -| Store theme page | `app/modules/tenancy/templates/tenancy/admin/store-theme.html` | +| Store theme page | `app/modules/cms/templates/cms/admin/store-theme.html` | | Store themes list | `app/modules/cms/templates/cms/admin/store-themes.html` | | Storefront landing templates | `app/modules/cms/templates/cms/storefront/landing-*.html` | | Seed data | `scripts/seed/create_default_content_pages.py` |