refactor: remove backward compatibility code for pre-launch baseline
Clean up accumulated backward-compat shims, deprecated wrappers, unused aliases, and legacy code across the codebase. Since the platform is not live yet, this establishes a clean baseline. Changes: - Delete deprecated middleware/context.py (RequestContext, get_request_context) - Remove unused factory get_store_email_settings_service() - Remove deprecated pagination_full macro, /admin/platform-homepage route - Remove ConversationResponse, InvoiceSettings* unprefixed aliases - Simplify celery_config.py (remove empty LEGACY_TASK_MODULES) - Standardize billing exceptions: *Error aliases → *Exception names - Consolidate duplicate TierNotFoundError/FeatureNotFoundError classes - Remove deprecated is_admin_request() from Store/PlatformContextManager - Remove is_platform_default field, MediaUploadResponse legacy flat fields - Remove MediaItemResponse.url alias, update JS to use file_url - Update all affected tests and documentation Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@ Admin pages for managing platform and store content pages.
|
||||
"""
|
||||
|
||||
from fastapi import APIRouter, Depends, Path, Request
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from fastapi.responses import HTMLResponse
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.api.deps import get_db, require_menu_access
|
||||
@@ -22,22 +22,6 @@ router = APIRouter()
|
||||
# ============================================================================
|
||||
|
||||
|
||||
@router.get("/platform-homepage", include_in_schema=False)
|
||||
async def admin_platform_homepage_manager(
|
||||
request: Request,
|
||||
current_user: User = Depends(require_menu_access("platforms", FrontendType.ADMIN)),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
"""
|
||||
Deprecated: Redirects to platforms page.
|
||||
|
||||
Platform homepages are now managed via:
|
||||
- /admin/platforms → Select platform → Homepage button
|
||||
- Or directly: /admin/content-pages?platform_code={code}&slug=home
|
||||
"""
|
||||
return RedirectResponse(url="/admin/platforms", status_code=302)
|
||||
|
||||
|
||||
@router.get("/content-pages", response_class=HTMLResponse, include_in_schema=False)
|
||||
async def admin_content_pages_list(
|
||||
request: Request,
|
||||
|
||||
@@ -90,7 +90,6 @@ class ContentPageResponse(BaseModel):
|
||||
show_in_header: bool
|
||||
show_in_legal: bool
|
||||
is_platform_page: bool = False
|
||||
is_platform_default: bool = False # Deprecated: use is_platform_page
|
||||
is_store_default: bool = False
|
||||
is_store_override: bool = False
|
||||
page_tier: str | None = None
|
||||
|
||||
@@ -37,7 +37,6 @@ class MediaItemResponse(BaseModel):
|
||||
filename: str
|
||||
original_filename: str | None = None
|
||||
file_url: str
|
||||
url: str | None = None # Alias for file_url for JS compatibility
|
||||
thumbnail_url: str | None = None
|
||||
media_type: str # image, video, document
|
||||
mime_type: str | None = None
|
||||
@@ -53,11 +52,6 @@ class MediaItemResponse(BaseModel):
|
||||
|
||||
model_config = {"from_attributes": True}
|
||||
|
||||
def model_post_init(self, __context: Any) -> None:
|
||||
"""Set url from file_url if not provided."""
|
||||
if self.url is None:
|
||||
object.__setattr__(self, "url", self.file_url)
|
||||
|
||||
|
||||
class MediaListResponse(BaseModel):
|
||||
"""Paginated list of media items."""
|
||||
@@ -80,13 +74,6 @@ class MediaUploadResponse(BaseModel):
|
||||
success: bool = True
|
||||
message: str | None = None
|
||||
media: MediaItemResponse | None = None
|
||||
# Legacy fields for backwards compatibility
|
||||
id: int | None = None
|
||||
file_url: str | None = None
|
||||
thumbnail_url: str | None = None
|
||||
filename: str | None = None
|
||||
file_size: int | None = None
|
||||
media_type: str | None = None
|
||||
|
||||
|
||||
class UploadedFileInfo(BaseModel):
|
||||
|
||||
@@ -15,7 +15,6 @@ from app.modules.cms.services.media_service import (
|
||||
)
|
||||
from app.modules.cms.services.store_email_settings_service import (
|
||||
StoreEmailSettingsService,
|
||||
get_store_email_settings_service, # Deprecated: use store_email_settings_service
|
||||
store_email_settings_service,
|
||||
)
|
||||
from app.modules.cms.services.store_theme_service import (
|
||||
@@ -32,5 +31,4 @@ __all__ = [
|
||||
"store_theme_service",
|
||||
"StoreEmailSettingsService",
|
||||
"store_email_settings_service",
|
||||
"get_store_email_settings_service", # Deprecated
|
||||
]
|
||||
|
||||
@@ -481,14 +481,3 @@ class StoreEmailSettingsService:
|
||||
|
||||
# Module-level service instance (singleton pattern)
|
||||
store_email_settings_service = StoreEmailSettingsService()
|
||||
|
||||
|
||||
# Deprecated: Factory function for backwards compatibility
|
||||
def get_store_email_settings_service(db: Session) -> StoreEmailSettingsService:
|
||||
"""
|
||||
Factory function to get a StoreEmailSettingsService instance.
|
||||
|
||||
Deprecated: Use the singleton `store_email_settings_service` instead and pass
|
||||
`db` to individual methods.
|
||||
"""
|
||||
return store_email_settings_service
|
||||
|
||||
@@ -262,9 +262,9 @@ function mediaPickerMixin(storeIdGetter, multiSelect = false) {
|
||||
*/
|
||||
setMainImage(media) {
|
||||
if (this.form) {
|
||||
this.form.primary_image_url = media.url;
|
||||
this.form.primary_image_url = media.file_url;
|
||||
}
|
||||
mediaPickerLog.info('Main image set:', media.url);
|
||||
mediaPickerLog.info('Main image set:', media.file_url);
|
||||
},
|
||||
|
||||
/**
|
||||
@@ -272,13 +272,13 @@ function mediaPickerMixin(storeIdGetter, multiSelect = false) {
|
||||
*/
|
||||
addAdditionalImages(mediaList) {
|
||||
if (this.form && Array.isArray(this.form.additional_images)) {
|
||||
const newUrls = mediaList.map(m => m.url);
|
||||
const newUrls = mediaList.map(m => m.file_url);
|
||||
this.form.additional_images = [
|
||||
...this.form.additional_images,
|
||||
...newUrls
|
||||
];
|
||||
}
|
||||
mediaPickerLog.info('Additional images added:', mediaList.map(m => m.url));
|
||||
mediaPickerLog.info('Additional images added:', mediaList.map(m => m.file_url));
|
||||
},
|
||||
|
||||
/**
|
||||
|
||||
@@ -73,7 +73,7 @@ function storeContentPagesManager() {
|
||||
|
||||
// Platform pages - filter to only show actual platform defaults
|
||||
const allPages = platformResponse.data || platformResponse || [];
|
||||
this.platformPages = allPages.filter(p => p.is_platform_default);
|
||||
this.platformPages = allPages.filter(p => p.is_platform_page);
|
||||
|
||||
// Store's custom pages (includes overrides)
|
||||
this.customPages = storeResponse.data || storeResponse || [];
|
||||
|
||||
Reference in New Issue
Block a user