# Architecture

# System Overview

flowchart TB
    subgraph Client
        UI[Web UI]
        Mobile[Mobile App]
    end

    subgraph API Gateway
        GW[Gateway]
        Auth[Auth Service]
    end

    subgraph Services
        UserSvc[User Service]
        OrderSvc[Order Service]
        NotifySvc[Notification Service]
    end

    subgraph Data
        DB[(PostgreSQL)]
        Cache[(Redis)]
        Queue[Message Queue]
    end

    UI --> GW
    Mobile --> GW
    GW --> Auth
    GW --> UserSvc
    GW --> OrderSvc
    UserSvc --> DB
    UserSvc --> Cache
    OrderSvc --> DB
    OrderSvc --> Queue
    Queue --> NotifySvc

# Request Flow

sequenceDiagram
    participant U as User
    participant G as Gateway
    participant A as Auth
    participant S as Service
    participant D as Database

    U->>G: HTTP Request
    G->>A: Validate Token
    A-->>G: Token Valid
    G->>S: Forward Request
    S->>D: Query Data
    D-->>S: Return Data
    S-->>G: Response
    G-->>U: HTTP Response

# Deployment Pipeline

flowchart LR
    Dev[Developer] --> PR[Pull Request]
    PR --> CI[CI Pipeline]
    CI --> Test[Run Tests]
    Test --> Build[Build Image]
    Build --> Push[Push to Registry]
    Push --> Deploy[Deploy to K8s]

# Entity Relationships

erDiagram
    USER ||--o{ ORDER : places
    USER {
        int id PK
        string email
        string name
        datetime created_at
    }
    ORDER ||--|{ ORDER_ITEM : contains
    ORDER {
        int id PK
        int user_id FK
        decimal total
        string status
    }
    ORDER_ITEM }|--|| PRODUCT : references
    ORDER_ITEM {
        int id PK
        int order_id FK
        int product_id FK
        int quantity
    }
    PRODUCT {
        int id PK
        string name
        decimal price
    }

# Service States

stateDiagram-v2
    [*] --> Idle
    Idle --> Processing: Request Received
    Processing --> Success: Complete
    Processing --> Failed: Error
    Success --> Idle: Reset
    Failed --> Retry: Attempt < 3
    Retry --> Processing: Backoff
    Failed --> Dead: Max Attempts
    Dead --> [*]

# Project Timeline

gantt
    title Development Roadmap
    dateFormat YYYY-MM-DD
    section Phase 1
        Requirements    :done, req, 2024-01-01, 2024-01-15
        Design          :done, des, 2024-01-15, 2024-02-01
    section Phase 2
        Development     :active, dev, 2024-02-01, 2024-04-01
        Testing         :test, 2024-03-15, 2024-04-15
    section Phase 3
        Deployment      :deploy, 2024-04-15, 2024-05-01
        Launch          :milestone, 2024-05-01, 0d