refactor: move fallback error templates to shared directory with improved naming

Reorganize error template structure to consolidate shared templates in a dedicated location.

Changes:
- Move templates/fallback/* to templates/shared/ with -fallback suffix
  - 404.html → 404-fallback.html
  - 500.html → 500-fallback.html
  - generic.html → generic-fallback.html
- Update error_renderer.py to use new template paths
  - Modified template selection logic in _find_template()
  - Updated documentation strings to reflect new paths
- Update error rendering documentation
  - HTML_ERROR_RENDERING_FLOW_DIAGRAM.md: Updated diagrams and examples
  - ERROR_RENDERING_DEVELOPER_DOCUMENTATION.md: Updated file structure and paths

Benefits:
- Clearer organization with all shared templates in shared/ directory
- Consistent naming convention (-fallback suffix) indicates purpose
- Aligns with existing cdn-fallback.html in same directory

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-25 21:06:16 +01:00
parent 5fd68ce6bd
commit 1f2ccb4668
6 changed files with 24 additions and 23 deletions

View File

@@ -69,8 +69,8 @@ class ErrorPageRenderer:
Template Selection Priority: Template Selection Priority:
1. Context-specific error page: {context}/errors/{status_code}.html 1. Context-specific error page: {context}/errors/{status_code}.html
2. Context-specific generic: {context}/errors/generic.html 2. Context-specific generic: {context}/errors/generic.html
3. Fallback error page: fallback/{status_code}.html 3. Shared fallback error page: shared/{status_code}-fallback.html
4. Fallback generic: fallback/generic.html 4. Shared fallback generic: shared/generic-fallback.html
Args: Args:
request: FastAPI request object request: FastAPI request object
@@ -150,8 +150,8 @@ class ErrorPageRenderer:
Priority: Priority:
1. {context}/errors/{status_code}.html 1. {context}/errors/{status_code}.html
2. {context}/errors/generic.html 2. {context}/errors/generic.html
3. fallback/{status_code}.html 3. shared/{status_code}-fallback.html
4. fallback/generic.html 4. shared/generic-fallback.html
""" """
templates_dir = ErrorPageRenderer.get_templates_dir() templates_dir = ErrorPageRenderer.get_templates_dir()
@@ -176,13 +176,13 @@ class ErrorPageRenderer:
if (templates_dir / generic_template).exists(): if (templates_dir / generic_template).exists():
return generic_template return generic_template
# Try fallback status code template # Try shared fallback status code template
fallback_specific = f"fallback/{status_code}.html" fallback_specific = f"shared/{status_code}-fallback.html"
if (templates_dir / fallback_specific).exists(): if (templates_dir / fallback_specific).exists():
return fallback_specific return fallback_specific
# Use fallback generic template (must exist) # Use shared fallback generic template (must exist)
return "fallback/generic.html" return "shared/generic-fallback.html"
@staticmethod @staticmethod
def _prepare_template_data( def _prepare_template_data(

View File

@@ -85,7 +85,7 @@ app/templates/
├── admin/errors/ # Admin error pages (Phase 1 - COMPLETE) ├── admin/errors/ # Admin error pages (Phase 1 - COMPLETE)
├── vendor/errors/ # Vendor error pages (Phase 2 - PENDING) ├── vendor/errors/ # Vendor error pages (Phase 2 - PENDING)
├── shop/errors/ # Shop error pages (Phase 3 - PENDING) ├── shop/errors/ # Shop error pages (Phase 3 - PENDING)
└── fallback/ # Generic fallback pages (COMPLETE) └── shared/ # Shared fallback error pages (COMPLETE)
``` ```
--- ---
@@ -153,8 +153,8 @@ ErrorPageRenderer.render_error_page(
1. `{context}/errors/{status_code}.html` (e.g., `admin/errors/404.html`) 1. `{context}/errors/{status_code}.html` (e.g., `admin/errors/404.html`)
2. `{context}/errors/generic.html` (e.g., `admin/errors/generic.html`) 2. `{context}/errors/generic.html` (e.g., `admin/errors/generic.html`)
3. `fallback/{status_code}.html` (e.g., `fallback/404.html`) 3. `shared/{status_code}-fallback.html` (e.g., `shared/404-fallback.html`)
4. `fallback/generic.html` (absolute fallback) 4. `shared/generic-fallback.html` (absolute fallback)
**Template Variables Provided:** **Template Variables Provided:**
@@ -353,10 +353,11 @@ app/templates/
│ └── errors/ │ └── errors/
│ └── (same structure as admin) │ └── (same structure as admin)
└── fallback/ └── shared/
├── 404.html ├── 404-fallback.html
├── 500.html ├── 500-fallback.html
── generic.html ── generic-fallback.html
└── cdn-fallback.html
``` ```
### Base Template Pattern ### Base Template Pattern

View File

@@ -83,8 +83,8 @@
│ Priority: │ │ Priority: │
│ 1. {context}/errors/{code} │ │ 1. {context}/errors/{code} │
│ 2. {context}/errors/generic│ │ 2. {context}/errors/generic│
│ 3. fallback/{code}.html │ 3. shared/{code}-fallback
│ 4. fallback/generic.html │ 4. shared/generic-fallback
└──────────┬───────────────────┘ └──────────┬───────────────────┘
┌──────────────┼──────────────┐ ┌──────────────┼──────────────┐
@@ -152,8 +152,8 @@ For a 404 error in ADMIN context:
``` ```
1. Check: app/templates/admin/errors/404.html ✓ EXISTS → USE THIS 1. Check: app/templates/admin/errors/404.html ✓ EXISTS → USE THIS
2. Check: app/templates/admin/errors/generic.html (skipped) 2. Check: app/templates/admin/errors/generic.html (skipped)
3. Check: app/templates/fallback/404.html (skipped) 3. Check: app/templates/shared/404-fallback.html (skipped)
4. Check: app/templates/fallback/generic.html (skipped) 4. Check: app/templates/shared/generic-fallback.html (skipped)
``` ```
For a 429 error in SHOP context (not created yet): For a 429 error in SHOP context (not created yet):
@@ -161,8 +161,8 @@ For a 429 error in SHOP context (not created yet):
``` ```
1. Check: app/templates/shop/errors/429.html ✗ Missing 1. Check: app/templates/shop/errors/429.html ✗ Missing
2. Check: app/templates/shop/errors/generic.html ✗ Missing 2. Check: app/templates/shop/errors/generic.html ✗ Missing
3. Check: app/templates/fallback/429.html ✗ Missing 3. Check: app/templates/shared/429-fallback.html ✗ Missing
4. Check: app/templates/fallback/generic.html ✓ EXISTS → USE THIS 4. Check: app/templates/shared/generic-fallback.html ✓ EXISTS → USE THIS
``` ```
--- ---
@@ -283,8 +283,8 @@ app/
│ ├── shop/ │ ├── shop/
│ │ └── errors/ # TODO: Shop error pages (themed) │ │ └── errors/ # TODO: Shop error pages (themed)
│ │ │ │
│ └── fallback/ │ └── shared/
│ └── (minimal pages) # NEW: Unknown context fallback │ └── *-fallback.html # Shared fallback error pages
middleware/ middleware/
├── vendor_context.py # Vendor detection (existing) ├── vendor_context.py # Vendor detection (existing)