feat(hosting): add HostWizard platform module and fix migration chain
Some checks failed
CI / pytest (push) Failing after 49m20s
CI / validate (push) Successful in 24s
CI / dependency-scanning (push) Successful in 33s
CI / docs (push) Has been skipped
CI / deploy (push) Has been skipped
CI / ruff (push) Successful in 10s

- Add complete hosting module (models, routes, schemas, services, templates, migrations)
- Add HostWizard platform to init_production seed (code=hosting, domain=hostwizard.lu)
- Fix cms_002 migration down_revision to z_unique_subdomain_domain
- Fix prospecting_001 migration to chain after cms_002 (remove branch label)
- Add hosting/prospecting version_locations to alembic.ini
- Fix admin_services delete endpoint to use proper response model
- Add hostwizard.lu to deployment docs (DNS, Caddy, Cloudflare)
- Add hosting and prospecting user journey docs to mkdocs nav

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-03 19:34:56 +01:00
parent 784bcb9d23
commit 8b147f53c6
46 changed files with 3907 additions and 13 deletions

View File

@@ -0,0 +1,36 @@
# app/modules/hosting/__init__.py
"""
Hosting Module - Web hosting, domains, email, and website building.
This is a self-contained module providing:
- POC website lifecycle management (draft → live pipeline)
- Client service tracking (domains, email, SSL, hosting, maintenance)
- Integration with prospecting module for prospect → merchant conversion
- Dashboard with KPIs, status charts, and renewal alerts
Module Structure:
- models/ - Database models (hosted_site, client_service)
- services/ - Business logic (lifecycle, service management, stats)
- schemas/ - Pydantic DTOs
- routes/ - API and page routes (admin + public POC viewer)
- tasks/ - Celery background tasks for expiry checks
- exceptions.py - Module-specific exceptions
"""
def __getattr__(name: str):
"""Lazy import module components to avoid circular imports."""
if name == "hosting_module":
from app.modules.hosting.definition import hosting_module
return hosting_module
if name == "get_hosting_module_with_routers":
from app.modules.hosting.definition import (
get_hosting_module_with_routers,
)
return get_hosting_module_with_routers
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
__all__ = ["hosting_module", "get_hosting_module_with_routers"]