refactor: remove all backward compatibility code across 70 files
Some checks failed
Some checks failed
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:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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/` |
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user