feat(marketing): register 3 new Flask blueprints (marketing, billing, legal)

- marketing_bp at root "/"
- billing_bp at /checkout/* (routes added in B-2.7)
- legal_bp at /legal/* (routes added in B-2.9)
- Tests verify all 3 blueprints register correctly
- Coexists with existing recordings_bp at "/" (resolved in B-1.3)
This commit is contained in:
Allison
2026-04-27 16:15:55 -04:00
parent accd9ebf36
commit e01523125e
6 changed files with 132 additions and 0 deletions

View File

@@ -585,6 +585,11 @@ from src.api.api_v1 import api_v1_bp, init_api_v1_helpers
from src.api.audit import audit_bp
from src.api.docs import docs_bp
# Marketing redesign 2026 blueprints (Phase 1: B-1.2)
from src.marketing import marketing_bp
from src.billing import billing_bp
from src.legal import legal_bp
# Database initialization (extracted to src/init_db.py)
from src.init_db import initialize_database
with app.app_context():
@@ -632,6 +637,14 @@ csrf.exempt(api_v1_bp) # API v1 uses token auth, not CSRF
app.register_blueprint(audit_bp)
app.register_blueprint(docs_bp)
# Marketing redesign 2026 blueprints (Phase 1: B-1.2)
# - marketing_bp at "/" (placeholder; coexists with recordings_bp.index, resolved in B-1.3)
# - billing_bp at /checkout/* (routes added in B-2.7 and B-2.8)
# - legal_bp at /legal/* (routes added in B-2.9)
app.register_blueprint(marketing_bp)
app.register_blueprint(billing_bp)
app.register_blueprint(legal_bp)
# File monitor and scheduler initialization functions below
# Startup functions (extracted to src/config/startup.py)

11
src/billing/__init__.py Normal file
View File

@@ -0,0 +1,11 @@
"""Billing blueprint - Stripe Checkout, webhook, subscription management.
Mounted at /checkout/* prefix for the customer-facing checkout flow. The
/webhooks/stripe route (added in B-2.8) bypasses the prefix and is also
csrf-exempted.
Routes added in Tasks B-2.7 (checkout) and B-2.8 (webhook).
"""
from flask import Blueprint
billing_bp = Blueprint('billing', __name__, url_prefix='/checkout')

11
src/legal/__init__.py Normal file
View File

@@ -0,0 +1,11 @@
"""Legal blueprint - Conditions, Confidentialite (Loi 25), Cookies, Remboursement,
Accessibilite, Mentions.
Mounted at /legal/* prefix. Content rendered from markdown files in
src/legal/content/ (added in Task B-2.9).
Routes added in Task B-2.9.
"""
from flask import Blueprint
legal_bp = Blueprint('legal', __name__, url_prefix='/legal')

11
src/marketing/__init__.py Normal file
View File

@@ -0,0 +1,11 @@
"""Marketing blueprint - landing pages, public content, SEO/GEO assets.
Mounted at root "/" (no url_prefix). Coexists with the legacy /api/* and /app/*
blueprints. Routes added incrementally in Phase 2 (Tasks A-2.x).
"""
from flask import Blueprint
marketing_bp = Blueprint('marketing', __name__)
# Import routes module so it registers route handlers via decorators
from . import routes # noqa: E402,F401

20
src/marketing/routes.py Normal file
View File

@@ -0,0 +1,20 @@
"""Marketing routes - minimal Phase 1 placeholder.
Real templates and content arrive in Tasks A-2.1 through A-2.8.
"""
from flask import Response
from . import marketing_bp
@marketing_bp.route('/')
def landing():
"""Placeholder root route.
Phase 1: returns a minimal HTML response so the route exists for tests.
Phase 2 (A-2.1): replaced with proper template render.
"""
return Response(
'<!DOCTYPE html><html><body><p>DictIA marketing - Phase 1 bootstrap</p></body></html>',
mimetype='text/html'
)