# State Machine Diagrams

This document contains Mermaid state diagrams for all models with state machines in ThrillWiki.

## EditSubmission / PhotoSubmission States

User submissions for edits and photos follow the same state flow.

```mermaid
stateDiagram-v2
    [*] --> PENDING: User submits
    
    PENDING --> APPROVED: Moderator approves
    PENDING --> REJECTED: Moderator rejects
    PENDING --> ESCALATED: Moderator escalates
    
    ESCALATED --> APPROVED: Admin approves
    ESCALATED --> REJECTED: Admin rejects
    
    APPROVED --> [*]
    REJECTED --> [*]
    
    note right of PENDING
        Guards: None (any authenticated user)
        Callbacks: None
    end note
    
    note right of APPROVED
        Guards: PermissionGuard (moderator+)
        Callbacks: 
        - Apply changes to target object
        - Send approval notification
        - Invalidate cache
    end note
    
    note right of REJECTED
        Guards: PermissionGuard (moderator+)
        Callbacks:
        - Send rejection notification with reason
    end note
    
    note right of ESCALATED
        Guards: PermissionGuard (moderator+)
        Callbacks:
        - Notify admins of escalation
        - Update escalation_level
    end note
```

### Transition Matrix

| From State | To State | Required Role | Guard |
|------------|----------|---------------|-------|
| PENDING | APPROVED | MODERATOR+ | PermissionGuard |
| PENDING | REJECTED | MODERATOR+ | PermissionGuard |
| PENDING | ESCALATED | MODERATOR+ | PermissionGuard |
| ESCALATED | APPROVED | ADMIN+ | PermissionGuard |
| ESCALATED | REJECTED | ADMIN+ | PermissionGuard |

## ModerationReport States

Content reports from users follow a review workflow.

```mermaid
stateDiagram-v2
    [*] --> PENDING: User reports content
    
    PENDING --> UNDER_REVIEW: Moderator claims report
    
    UNDER_REVIEW --> RESOLVED: Issue fixed
    UNDER_REVIEW --> DISMISSED: Invalid report
    
    RESOLVED --> [*]
    DISMISSED --> [*]
    
    note right of PENDING
        Priority: LOW, MEDIUM, HIGH, CRITICAL
        Auto-assigned based on report type
    end note
    
    note right of UNDER_REVIEW
        Guards: PermissionGuard (moderator+)
        Sets: assigned_moderator
        Callbacks: Update queue counts
    end note
    
    note right of RESOLVED
        Guards: AssignmentGuard (assigned moderator)
        Sets: resolved_at, resolution_action
        Callbacks: Notify reporter
    end note
    
    note right of DISMISSED
        Guards: AssignmentGuard (assigned moderator)
        Sets: resolved_at, resolution_notes
        Callbacks: Notify reporter
    end note
```

### Transition Matrix

| From State | To State | Required Role | Additional Guard |
|------------|----------|---------------|------------------|
| PENDING | UNDER_REVIEW | MODERATOR+ | None |
| UNDER_REVIEW | RESOLVED | MODERATOR+ | AssignmentGuard |
| UNDER_REVIEW | DISMISSED | MODERATOR+ | AssignmentGuard |

## ModerationQueue States

Queue items for moderator work.

```mermaid
stateDiagram-v2
    [*] --> PENDING: Item created
    
    PENDING --> IN_PROGRESS: Moderator claims
    PENDING --> CANCELLED: Cancelled
    
    IN_PROGRESS --> COMPLETED: Work finished
    IN_PROGRESS --> CANCELLED: Cancelled
    
    COMPLETED --> [*]
    CANCELLED --> [*]
    
    note right of IN_PROGRESS
        Guards: PermissionGuard (moderator+)
        Sets: assigned_to, assigned_at
    end note
    
    note right of COMPLETED
        Guards: AssignmentGuard
        Sets: completed_at
    end note
```

## BulkOperation States

Admin bulk operations with progress tracking.

```mermaid
stateDiagram-v2
    [*] --> PENDING: Operation created
    
    PENDING --> RUNNING: Operation starts
    PENDING --> CANCELLED: Admin cancels
    
    RUNNING --> COMPLETED: All items processed
    RUNNING --> FAILED: Fatal error
    RUNNING --> CANCELLED: Admin cancels (if cancellable)
    
    COMPLETED --> [*]
    FAILED --> [*]
    CANCELLED --> [*]
    
    note right of PENDING
        Guards: PermissionGuard (admin+)
        Fields: total_items, parameters
    end note
    
    note right of RUNNING
        Guards: PermissionGuard (admin+)
        Sets: started_at
        Progress: processed_items / total_items
    end note
    
    note right of COMPLETED
        Sets: completed_at
        Fields: processed_items, results
    end note
    
    note right of FAILED
        Sets: completed_at
        Fields: failed_items, results (error)
    end note
```

### Transition Matrix

| From State | To State | Required Role | Condition |
|------------|----------|---------------|-----------|
| PENDING | RUNNING | ADMIN+ | None |
| PENDING | CANCELLED | ADMIN+ | None |
| RUNNING | COMPLETED | ADMIN+ | None |
| RUNNING | FAILED | ADMIN+ | None |
| RUNNING | CANCELLED | ADMIN+ | can_cancel=True |

## Park Status States

Park lifecycle management.

```mermaid
stateDiagram-v2
    [*] --> UNDER_CONSTRUCTION: New park announced
    [*] --> OPERATING: Existing park

    UNDER_CONSTRUCTION --> OPERATING: Grand opening
    
    OPERATING --> CLOSED_TEMP: Seasonal/temporary closure
    OPERATING --> CLOSED_PERM: Permanent closure
    
    CLOSED_TEMP --> OPERATING: Reopens
    CLOSED_TEMP --> CLOSED_PERM: Becomes permanent
    
    CLOSED_PERM --> DEMOLISHED: Site cleared
    CLOSED_PERM --> RELOCATED: Moved to new location
    
    DEMOLISHED --> [*]
    RELOCATED --> [*]
    
    note right of OPERATING
        Default state for active parks
        Guards: Any authenticated user
    end note
    
    note right of CLOSED_TEMP
        Seasonal closures, maintenance
        Guards: Any authenticated user
    end note
    
    note right of CLOSED_PERM
        Guards: PermissionGuard (moderator+)
        Sets: closing_date
        Callbacks: Update ride statuses
    end note
    
    note right of DEMOLISHED
        Guards: PermissionGuard (moderator+)
        Final state - no transitions out
    end note
    
    note right of RELOCATED
        Guards: PermissionGuard (moderator+)
        Final state - link to new location
    end note
```

### Transition Matrix

| From State | To State | Required Role | Sets |
|------------|----------|---------------|------|
| UNDER_CONSTRUCTION | OPERATING | USER+ | None |
| OPERATING | CLOSED_TEMP | USER+ | None |
| OPERATING | CLOSED_PERM | MODERATOR+ | closing_date |
| CLOSED_TEMP | OPERATING | USER+ | None |
| CLOSED_TEMP | CLOSED_PERM | MODERATOR+ | closing_date |
| CLOSED_PERM | DEMOLISHED | MODERATOR+ | None |
| CLOSED_PERM | RELOCATED | MODERATOR+ | None |

## Ride Status States

Ride lifecycle with scheduled closures.

```mermaid
stateDiagram-v2
    [*] --> UNDER_CONSTRUCTION: New ride announced
    [*] --> OPERATING: Existing ride

    UNDER_CONSTRUCTION --> OPERATING: Grand opening
    
    OPERATING --> CLOSED_TEMP: Maintenance/refurb
    OPERATING --> SBNO: Extended closure
    OPERATING --> CLOSING: Scheduled closure
    
    CLOSED_TEMP --> OPERATING: Reopens
    CLOSED_TEMP --> SBNO: Extended to SBNO
    CLOSED_TEMP --> CLOSED_PERM: Permanent closure
    
    SBNO --> OPERATING: Revival
    SBNO --> CLOSED_PERM: Confirmed closure
    
    CLOSING --> SBNO: Becomes SBNO
    CLOSING --> CLOSED_PERM: Closure date reached
    
    CLOSED_PERM --> DEMOLISHED: Removed
    CLOSED_PERM --> RELOCATED: Moved
    
    DEMOLISHED --> [*]
    RELOCATED --> [*]
    
    note right of OPERATING
        Active ride
        Guards: Any authenticated user
    end note
    
    note right of CLOSED_TEMP
        Short-term closure
        Guards: Any authenticated user
    end note
    
    note right of SBNO
        Standing But Not Operating
        Guards: PermissionGuard (moderator+)
        Long-term uncertainty
    end note
    
    note right of CLOSING
        Scheduled to close
        Guards: PermissionGuard (moderator+)
        Requires: closing_date, post_closing_status
        Automated transition on date
    end note
    
    note right of CLOSED_PERM
        Guards: PermissionGuard (moderator+)
        Sets: closing_date
    end note
    
    note right of DEMOLISHED
        Guards: PermissionGuard (moderator+)
        Final state
    end note
    
    note right of RELOCATED
        Guards: PermissionGuard (moderator+)
        Final state - link to new installation
    end note
```

### CLOSING State Automation

The CLOSING state is special - it represents a ride that has been announced to close on a specific date. When the `closing_date` is reached, the ride automatically transitions to the `post_closing_status` (SBNO, CLOSED_PERM, DEMOLISHED, or RELOCATED).

```mermaid
sequenceDiagram
    participant User
    participant Ride
    participant Scheduler
    
    User->>Ride: mark_closing(closing_date, post_closing_status)
    Ride->>Ride: transition_to_closing()
    Ride->>Ride: Set closing_date, post_closing_status
    Ride->>Ride: Save
    
    Note over Scheduler: Daily job runs
    
    Scheduler->>Ride: Check closing_date <= today
    alt Date reached
        Scheduler->>Ride: apply_post_closing_status()
        Ride->>Ride: Transition to post_closing_status
        Ride->>Ride: Save
    end
```

### Transition Matrix

| From State | To State | Required Role | Sets |
|------------|----------|---------------|------|
| UNDER_CONSTRUCTION | OPERATING | USER+ | None |
| OPERATING | CLOSED_TEMP | USER+ | None |
| OPERATING | SBNO | MODERATOR+ | None |
| OPERATING | CLOSING | MODERATOR+ | closing_date, post_closing_status |
| CLOSED_TEMP | OPERATING | USER+ | None |
| CLOSED_TEMP | SBNO | MODERATOR+ | None |
| CLOSED_TEMP | CLOSED_PERM | MODERATOR+ | closing_date |
| SBNO | OPERATING | MODERATOR+ | None |
| SBNO | CLOSED_PERM | MODERATOR+ | None |
| CLOSING | SBNO | MODERATOR+ | None |
| CLOSING | CLOSED_PERM | MODERATOR+ | None |
| CLOSED_PERM | DEMOLISHED | MODERATOR+ | None |
| CLOSED_PERM | RELOCATED | MODERATOR+ | None |

## State Color Legend

All state machines use consistent colors for states:

| Color | Meaning | Example States |
|-------|---------|----------------|
| 🟡 Yellow | Pending/Waiting | PENDING, UNDER_REVIEW, CLOSING |
| 🟢 Green | Active/Approved | OPERATING, APPROVED, COMPLETED |
| 🔴 Red | Closed/Rejected | REJECTED, FAILED, CLOSED_PERM |
| 🟠 Orange | Warning/SBNO | SBNO, ESCALATED, IN_PROGRESS |
| ⚫ Gray | Final/Terminal | DEMOLISHED, RELOCATED, CANCELLED |
| 🔵 Blue | Temporary | CLOSED_TEMP, UNDER_CONSTRUCTION |

## Guard Icons

| Icon | Guard Type | Description |
|------|-----------|-------------|
| 🔐 | PermissionGuard | Role-based access |
| 👤 | OwnershipGuard | Owner verification |
| 📋 | AssignmentGuard | Assigned user check |
| 📊 | StateGuard | State validation |
| 📝 | MetadataGuard | Required fields |
