refactor: remove all backward compatibility code across 70 files
Some checks failed
CI / ruff (push) Successful in 11s
CI / validate (push) Has been cancelled
CI / dependency-scanning (push) Has been cancelled
CI / docs (push) Has been cancelled
CI / deploy (push) Has been cancelled
CI / pytest (push) Has started running

Clean up 28 backward compatibility instances identified in the codebase.
The app is not live, so all shims are replaced with the target architecture:

- Remove legacy Inventory.location column (use bin_location exclusively)
- Remove dashboard _extract_metric_value helper (use flat metrics dict)
- Remove legacy stat field duplicates (total_stores, total_imports, etc.)
- Remove 13 re-export shims and class aliases across modules
- Remove module-enabling JSON fallback (use PlatformModule junction table)
- Remove menu_to_legacy_format() conversion (return dataclasses directly)
- Remove title/description from MarketplaceProductBase schema
- Clean billing convenience method docstrings
- Clean test fixtures and backward-compat comments
- Add PlatformModule seeding to init_production.py

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-15 13:20:29 +01:00
parent b0db8133a0
commit aad18c27ab
70 changed files with 501 additions and 841 deletions

View File

@@ -8,9 +8,9 @@ The application serves multiple frontends from a single codebase:
| Frontend | Description | Example URLs |
|----------|-------------|--------------|
| **ADMIN** | Platform administration | `/admin/*`, `/api/v1/admin/*`, `admin.oms.lu/*` |
| **ADMIN** | Platform administration | `/admin/*`, `/api/v1/admin/*`, `admin.omsflow.lu/*` |
| **STORE** | Store dashboard | `/store/*`, `/api/v1/store/*` |
| **STOREFRONT** | Customer-facing shop | `/storefront/*`, `/stores/*`, `orion.oms.lu/*` |
| **STOREFRONT** | Customer-facing shop | `/storefront/*`, `/stores/*`, `orion.omsflow.lu/*` |
| **PLATFORM** | Marketing pages | `/`, `/pricing`, `/about` |
The `FrontendDetector` class provides centralized, consistent detection of which frontend a request targets.
@@ -64,13 +64,13 @@ class FrontendType(str, Enum):
The `FrontendDetector` uses the following priority order:
```
1. Admin subdomain (admin.oms.lu) → ADMIN
1. Admin subdomain (admin.omsflow.lu) → ADMIN
2. Path-based detection:
- /admin/* or /api/v1/admin/* → ADMIN
- /store/* or /api/v1/store/* → STORE
- /storefront/*, /shop/*, /stores/* → STOREFRONT
- /api/v1/platform/* → PLATFORM
3. Store subdomain (orion.oms.lu) → STOREFRONT
3. Store subdomain (orion.omsflow.lu) → STOREFRONT
4. Store context set by middleware → STOREFRONT
5. Default → PLATFORM
```
@@ -133,7 +133,7 @@ from app.modules.enums import FrontendType
# Full detection
frontend_type = FrontendDetector.detect(
host="orion.oms.lu",
host="orion.omsflow.lu",
path="/products",
has_store_context=True
)
@@ -167,10 +167,10 @@ if FrontendDetector.is_storefront(host, path, has_store_context=True):
| Request | Host | Path | Frontend |
|---------|------|------|----------|
| Admin subdomain | admin.oms.lu | /dashboard | ADMIN |
| Store subdomain | orion.oms.lu | /products | STOREFRONT |
| Admin subdomain | admin.omsflow.lu | /dashboard | ADMIN |
| Store subdomain | orion.omsflow.lu | /products | STOREFRONT |
| Custom domain | mybakery.lu | /products | STOREFRONT |
| Platform root | oms.lu | /pricing | PLATFORM |
| Platform root | omsflow.lu | /pricing | PLATFORM |
## Request State

View File

@@ -20,7 +20,7 @@ This middleware layer is **system-wide** and enables the multi-tenant architectu
**What it does**:
- Detects platform from:
- Custom domain (e.g., `oms.lu`, `loyalty.lu`)
- Custom domain (e.g., `omsflow.lu`, `rewardflow.lu`)
- Path prefix in development (e.g., `/platforms/oms/`, `/platforms/loyalty/`)
- Default to `main` platform for localhost without prefix
- Rewrites path for platform-prefixed requests (strips `/platforms/{code}/`)
@@ -33,7 +33,7 @@ Request arrives
┌─────────────────────────────────────┐
│ Production domain? (oms.lu, etc.) │
│ Production domain? (omsflow.lu, etc.) │
└─────────────────────────────────────┘
│ YES → Use that platform
@@ -135,13 +135,13 @@ Injects: request.state.store = <Store object>
**Detection Priority** (handled by `FrontendDetector`):
```python
1. Admin subdomain (admin.oms.lu) ADMIN
1. Admin subdomain (admin.omsflow.lu) ADMIN
2. Path-based detection:
- /admin/* or /api/v1/admin/* ADMIN
- /store/* or /api/v1/store/* STORE
- /storefront/*, /shop/*, /stores/* STOREFRONT
- /api/v1/platform/* PLATFORM
3. Store subdomain (orion.oms.lu) STOREFRONT
3. Store subdomain (orion.omsflow.lu) STOREFRONT
4. Store context set by middleware STOREFRONT
5. Default PLATFORM
```

View File

@@ -123,7 +123,7 @@ The system uses different URL patterns for development vs production:
**Production (custom domains):**
- Main marketing site: `orion.lu/``main` platform
- Platform sites: `oms.lu/`, `loyalty.lu/` → specific platform
- Platform sites: `omsflow.lu/`, `rewardflow.lu/` → specific platform
### Request Processing
@@ -259,7 +259,7 @@ Request: GET /about
1. Insert platform record:
```sql
INSERT INTO platforms (code, name, description, domain, path_prefix)
VALUES ('loyalty', 'Loyalty Program', 'Customer loyalty and rewards', 'loyalty.lu', 'loyalty');
VALUES ('loyalty', 'Loyalty Program', 'Customer loyalty and rewards', 'rewardflow.lu', 'loyalty');
```
2. Create platform-specific content pages:
@@ -270,7 +270,7 @@ Request: GET /about
3. Configure routing:
- **Development:** Access at `localhost:9999/platforms/loyalty/`
- **Production:** Access at `loyalty.lu/`
- **Production:** Access at `rewardflow.lu/`
- Platform detected automatically by `PlatformContextMiddleware`
- No additional route configuration needed
@@ -285,5 +285,5 @@ Request: GET /about
| Platform | Code | Dev URL | Prod URL |
|----------|------|---------|----------|
| Main Marketing | `main` | `localhost:9999/` | `orion.lu/` |
| OMS | `oms` | `localhost:9999/platforms/oms/` | `oms.lu/` |
| Loyalty | `loyalty` | `localhost:9999/platforms/loyalty/` | `loyalty.lu/` |
| OMS | `oms` | `localhost:9999/platforms/oms/` | `omsflow.lu/` |
| Loyalty | `loyalty` | `localhost:9999/platforms/loyalty/` | `rewardflow.lu/` |

View File

@@ -63,14 +63,14 @@ Orion supports multiple platforms (OMS, Loyalty, Site Builder), each with its ow
|-----|----------------|
| `orion.lu/` | Main marketing site homepage |
| `orion.lu/about` | Main marketing site about page |
| `oms.lu/` | OMS platform homepage |
| `oms.lu/pricing` | OMS platform pricing page |
| `oms.lu/admin/` | Admin panel for OMS platform |
| `oms.lu/store/{code}/` | Store dashboard on OMS |
| `omsflow.lu/` | OMS platform homepage |
| `omsflow.lu/pricing` | OMS platform pricing page |
| `omsflow.lu/admin/` | Admin panel for OMS platform |
| `omsflow.lu/store/{code}/` | Store dashboard on OMS |
| `https://mybakery.lu/storefront/` | Store storefront (store's custom domain) |
| `loyalty.lu/` | Loyalty platform homepage |
| `rewardflow.lu/` | Loyalty platform homepage |
**Note:** In production, stores configure their own custom domains for storefronts. The platform domain (e.g., `oms.lu`) is used for admin and store dashboards, while storefronts use store-owned domains.
**Note:** In production, stores configure their own custom domains for storefronts. The platform domain (e.g., `omsflow.lu`) is used for admin and store dashboards, while storefronts use store-owned domains.
### Quick Reference by Platform
@@ -83,9 +83,9 @@ Dev:
Storefront: http://localhost:8000/platforms/oms/stores/{store_code}/storefront/
Prod:
Platform: https://oms.lu/
Admin: https://oms.lu/admin/
Store: https://oms.lu/store/{store_code}/
Platform: https://omsflow.lu/
Admin: https://omsflow.lu/admin/
Store: https://omsflow.lu/store/{store_code}/
Storefront: https://mybakery.lu/storefront/ (store's custom domain)
```
@@ -98,9 +98,9 @@ Dev:
Storefront: http://localhost:8000/platforms/loyalty/stores/{store_code}/storefront/
Prod:
Platform: https://loyalty.lu/
Admin: https://loyalty.lu/admin/
Store: https://loyalty.lu/store/{store_code}/
Platform: https://rewardflow.lu/
Admin: https://rewardflow.lu/admin/
Store: https://rewardflow.lu/store/{store_code}/
Storefront: https://myrewards.lu/storefront/ (store's custom domain)
```
@@ -112,7 +112,7 @@ Request arrives
┌─────────────────────────────────────┐
│ Check: Is this production domain? │
│ (oms.lu, loyalty.lu, etc.) │
│ (omsflow.lu, rewardflow.lu, etc.) │
└─────────────────────────────────────┘
├── YES → Route to that platform
@@ -139,8 +139,8 @@ Request arrives
| Platform | Code | Dev URL | Prod Domain |
|----------|------|---------|-------------|
| Main Marketing | `main` | `localhost:8000/` | `orion.lu` |
| OMS | `oms` | `localhost:8000/platforms/oms/` | `oms.lu` |
| Loyalty | `loyalty` | `localhost:8000/platforms/loyalty/` | `loyalty.lu` |
| OMS | `oms` | `localhost:8000/platforms/oms/` | `omsflow.lu` |
| Loyalty | `loyalty` | `localhost:8000/platforms/loyalty/` | `rewardflow.lu` |
| Site Builder | `site-builder` | `localhost:8000/platforms/site-builder/` | `sitebuilder.lu` |
**See:** [Multi-Platform CMS Architecture](../multi-platform-cms.md) for content management details.