Migrate all 39 API modules from legacy global_subapp_pkgs + create_app() + init_subapp() pattern to unified RouteRegistry.create_subapp() pattern. Each module gets its own web.Application with prefix-based isolation, deferred mounting for CORS setup, and centralized module registration via register_modules().
Key changes:
- RouteRegistry.create_subapp() with deferred mount() for CORS compatibility
- All 39 modules wired in server.py via _register_module() match/case dispatch
- register_modules() public API for test fixtures
- Fix admin_required/superadmin_required to return 403 for insufficient privileges (was 401)
- Test fixture unified to use register_modules() instead of legacy/newstyle split
JIRA Issue: BA-4807
Migrate all 39 API modules from legacy global_subapp_pkgs + create_app() + init_subapp() pattern to unified RouteRegistry.create_subapp() pattern. Each module gets its own web.Application with prefix-based isolation, deferred mounting for CORS setup, and centralized module registration via register_modules().
Key changes:
JIRA Issue: BA-4807