Files
orion/scripts
Samir Boulahtit c9c280a8c7 refactor: update seed script and Makefile for company architecture
Seed Script Updates:
- Add create_demo_companies() function to seed 3 demo companies with owners
- Update create_demo_vendors() to link vendors to companies (not create owners)
- Fix VendorTheme to use JSON colors format (not individual columns)
- Fix VendorDomain to use 'domain' field (not 'domain_name')
- Update seed summary to show company information
- Update credentials output to show company owners instead of vendor owners

Makefile Refactoring:
- Separate production initialization from demo data seeding
- Update init-prod to run 4 steps:
  1. Create admin user + alerts (init_production.py)
  2. Initialize log settings (init_log_settings.py)
  3. Create CMS defaults (create_default_content_pages.py)
  4. Create platform pages (create_platform_pages.py)
- Update db-setup workflow: migrate-up + init-prod + seed-demo
- Update db-reset workflow: migrate-down + migrate-up + init-prod + seed-demo-reset
- Add utility commands: create-cms-defaults, create-platform-pages, init-logging
- Enhance help documentation with clear production vs demo distinction

Architecture:
- init-prod: Production-safe platform initialization (run in prod + dev)
- seed-demo: Demo data only (NEVER run in production)
- Clear separation of concerns for production deployment
2025-12-01 21:50:36 +01:00
..

Architecture Validation Scripts

This directory contains scripts for validating and enforcing architectural patterns across the codebase.

Architecture Validator

Overview

validate_architecture.py is an automated tool that checks the codebase against architectural rules defined in .architecture-rules.yaml.

Key Features

  • API Endpoint Validation: Ensures proper separation of concerns, Pydantic usage, exception handling
  • Service Layer Validation: Enforces domain exceptions, database session patterns
  • Model Validation: Checks proper separation of SQLAlchemy and Pydantic models
  • Exception Handling: Validates proper exception patterns
  • JavaScript Patterns: Enforces coding standards for frontend code
  • Template Validation: Ensures templates follow required patterns

Usage

# Validate entire codebase
python scripts/validate_architecture.py

# Validate specific directory
python scripts/validate_architecture.py app/api/

# Verbose output with code context
python scripts/validate_architecture.py --verbose

# Show only errors (suppress warnings)
python scripts/validate_architecture.py --errors-only

# Use custom config file
python scripts/validate_architecture.py --config custom-rules.yaml

Exit Codes

  • 0: Validation passed (warnings allowed)
  • 1: Validation failed (errors found)

Integration with Pre-commit

Install pre-commit hooks to run validation automatically:

# Install pre-commit
pip install pre-commit

# Setup hooks
pre-commit install

# Run manually on all files
pre-commit run --all-files

# Run on staged files only
pre-commit run

Configuration

The validation rules are defined in .architecture-rules.yaml at the project root. This file contains:

  • Core Principles: Separation of concerns, type safety, exception handling
  • API Endpoint Rules: (API-001 through API-004)
  • Service Layer Rules: (SVC-001 through SVC-004)
  • Model Rules: (MDL-001 through MDL-002)
  • Exception Rules: (EXC-001 through EXC-002)
  • JavaScript Rules: (JS-001 through JS-003)
  • Template Rules: (TPL-001)

Rule Categories

API Endpoint Rules

  • API-001: Use Pydantic models for request/response
  • API-002: No business logic in endpoints
  • API-003: Proper exception handling (catch and convert to HTTPException)
  • API-004: Authentication on protected endpoints

Service Layer Rules

  • SVC-001: No HTTPException in services (use domain exceptions)
  • SVC-002: Create custom exception classes (avoid generic Exception)
  • SVC-003: Database session as parameter (not created internally)
  • SVC-004: Use Pydantic for input validation

Model Rules

  • MDL-001: Use SQLAlchemy Base for database models
  • MDL-002: Separate Pydantic from SQLAlchemy models

Exception Rules

  • EXC-001: Define custom exceptions in exceptions module
  • EXC-002: Never use bare except

JavaScript Rules

  • JS-001: Use apiClient directly (not window.apiClient)
  • JS-002: Use centralized logger (not console)
  • JS-003: Alpine components must spread ...data()

Example Output

🔍 Starting architecture validation...

📡 Validating API endpoints...
🔧 Validating service layer...
📦 Validating models...
⚠️  Validating exception handling...
🟨 Validating JavaScript...
📄 Validating templates...

================================================================================
📊 ARCHITECTURE VALIDATION REPORT
================================================================================

Files checked: 145
Total violations: 3

❌ ERRORS (2):
--------------------------------------------------------------------------------

  [API-002] Endpoint must NOT contain business logic
  File: app/api/v1/admin/vendors.py:45
  Issue: Database operations should be in service layer
  💡 Suggestion: Move database operations to service layer

  [SVC-001] Service must NOT raise HTTPException
  File: app/services/vendor_service.py:78
  Issue: Service raises HTTPException - use domain exceptions instead
  💡 Suggestion: Create custom exception class (e.g., VendorNotFoundError) and raise that

⚠️  WARNINGS (1):
--------------------------------------------------------------------------------

  [JS-001] Use apiClient directly
  File: static/admin/js/vendors.js:23
  Issue: Use apiClient directly instead of window.apiClient
  💡 Suggestion: Replace window.apiClient with apiClient

================================================================================
❌ VALIDATION FAILED - Fix errors before committing
================================================================================

CI/CD Integration

Add to your CI pipeline (GitHub Actions example):

# .github/workflows/ci.yml
name: CI

on: [push, pull_request]

jobs:
  validate-architecture:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'

      - name: Install dependencies
        run: |
          pip install pyyaml

      - name: Validate Architecture
        run: |
          python scripts/validate_architecture.py

Documentation

For detailed architectural patterns and examples, see:

Extending the Validator

To add new rules:

  1. Add rule definition to .architecture-rules.yaml
  2. Implement validation logic in validate_architecture.py
  3. Add examples to docs/architecture/architecture-patterns.md
  4. Test with python scripts/validate_architecture.py --verbose

Troubleshooting

Issue: Validator reports false positives

Solution: Add exception patterns to .architecture-rules.yaml under ignore section

Issue: Validator doesn't catch a specific violation

Solution: The rule might not be implemented yet. Check .architecture-rules.yaml and validate_architecture.py to add the rule.

Issue: Pre-commit hook fails but manual run passes

Solution: Ensure pre-commit is using the same Python environment:

pre-commit clean
pre-commit install

Contributing

When adding new architectural patterns:

  1. Document the pattern in docs/architecture/architecture-patterns.md
  2. Add validation rule to .architecture-rules.yaml
  3. Implement validation in validate_architecture.py
  4. Test thoroughly with existing codebase
  5. Update this README with the new rule

Questions? See the Architecture Patterns Documentation