# Coding-Konventionen ## Naming - Alle internen Funktionen beginnen mit `_` Prefix (nicht exportierbar) - **camelCase** fuer Variablen und Funktionsnamen (kein snake_case) - **PascalCase** fuer Klassen und Pydantic-Models - Dateien: `camelCase` fuer Module (z.B. `mainServiceAi.py`, `routeBilling.py`) ## Frontend (React/TypeScript) - Keine Browser-Dialoge (`alert`, `confirm`, `prompt`) -- stattdessen `useConfirm()` / `usePrompt()` Hooks - CSS Modules fuer Styling - Hooks-Pattern fuer State und API-Zugriffe (`useApiRequest`, `useBilling`, etc.) - Fehler propagieren -- keine stillen Fallbacks bei kritischen Pfaden ## Backend (FastAPI/Python) - **Pydantic-Models** als einzige Quelle fuer UI-Feld-Definitionen - **`PowerOnModel`** als Basis mit System-Audit-Feldern (`sysCreatedAt`, `sysCreatedBy`, `sysModifiedAt`, `sysModifiedBy`) - Fehler propagieren -- Exceptions explizit werfen, nicht schlucken - Config ueber `APP_CONFIG` (aus `modules/shared/configuration.py`) ## Projektstruktur Gateway ``` gateway/ app.py # FastAPI-App, Middleware, Startup config.ini # Statische Konfiguration modules/ auth/ # JWT, OAuth, CSRF, Authentication datamodels/ # Pydantic-Models (zentrale Quelle) features/ # Feature-Module (workspace, automation, ...) / main.py # FEATURE_CODE, Registrierung routeFeature.py # HTTP-Endpunkte interfaceFeature.py # DB-Interface datamodelFeature.py # Feature-spezifische Models interfaces/ # DB-Interfaces (CRUD, Queries) routes/ # Core-Routes (billing, admin, GDPR, ...) security/ # RBAC-Engine serviceCenter/ core/ # serviceSecurity, serviceUtils, serviceStreaming services/ # serviceAi, serviceChat, serviceAgent, ... registry.py # Service-Registrierung und Dependencies shared/ # configuration.py, Utilities system/ # registry.py (Feature-Discovery) workflows/ methods/ # Unified Action Library processing/ # WorkflowProcessor, Modes automation/ # v1 Runtime automation2/ # v2 Engine connectors/ # Externe Systeme (DB, SharePoint, Jira, ...) aicore/ # AI-Provider-Plugins, Model-Selector ``` ## Anti-Patterns - Keine impliziten Type-Conversions in API-Responses - Keine DB-Queries in Route-Handlern (immer ueber Interfaces) - Kein direkter `os.environ`-Zugriff -- immer `APP_CONFIG` - Keine hartkodierten Secrets -- verschluesselt in Env-Dateien