[ PROMPT_NODE_23351 ]
Sequence Diagrams
[ SKILL_DOCUMENTATION ]
# Sequence Diagrams
Sequence diagrams show interactions between participants over time. They're ideal for API flows, authentication sequences, and system component interactions.
## Basic Syntax
```mermaid
sequenceDiagram
participant A
participant B
A->>B: Message
```
## Participants and Actors
```mermaid
sequenceDiagram
actor User
participant Frontend
participant API
participant Database
User->>Frontend: Click button
Frontend->>API: POST /data
```
**Difference:**
- `participant` - System components (services, classes, databases)
- `actor` - External entities (users, external systems)
## Message Types
### Solid Arrow (Synchronous)
```mermaid
sequenceDiagram
Client->>Server: Request
Server-->>Client: Response
```
- `->>` Solid arrow (request)
- `-->>` Dotted arrow (response/return)
### Open Arrow (Asynchronous)
```mermaid
sequenceDiagram
Client-)Server: Async message
Server--)Client: Async response
```
- `-)` Solid open arrow
- `--)` Dotted open arrow
### Cross/X (Delete)
```mermaid
sequenceDiagram
Client-xServer: Delete
```
## Activations
Show when a participant is actively processing:
```mermaid
sequenceDiagram
Client->>+Server: Request
Server->>+Database: Query
Database-->>-Server: Data
Server-->>-Client: Response
```
- `+` after arrow activates
- `-` before arrow deactivates
## Alt/Else (Conditional Logic)
```mermaid
sequenceDiagram
User->>API: POST /login
API->>Database: Query user
Database-->>API: User data
alt Valid credentials
API-->>User: 200 OK + Token
else Invalid credentials
API-->>User: 401 Unauthorized
else Account locked
API-->>User: 403 Forbidden
end
```
## Opt (Optional)
```mermaid
sequenceDiagram
User->>API: POST /order
API->>PaymentService: Process payment
opt Payment successful
API->>EmailService: Send confirmation
end
API-->>User: Order result
```
## Par (Parallel)
Show concurrent operations:
```mermaid
sequenceDiagram
API->>Service: Process order
par Send email
Service->>EmailService: Send confirmation
and Update inventory
Service->>InventoryService: Reduce stock
and Log event
Service->>LogService: Log order
end
Service-->>API: Complete
```
## Loop
```mermaid
sequenceDiagram
Client->>Server: Request batch
loop For each item
Server->>Database: Process item
Database-->>Server: Result
end
Server-->>Client: All results
```
**Loop with condition:**
```mermaid
sequenceDiagram
loop Every 5 seconds
Monitor->>API: Health check
API-->>Monitor: Status
end
```
## Break (Early Exit)
```mermaid
sequenceDiagram
User->>API: Submit form
API->>Validator: Validate input
break Input invalid
API-->>User: 400 Bad Request
end
API->>Database: Save data
Database-->>API: Success
API-->>User: 200 OK
```
## Notes
### Note over single participant
```mermaid
sequenceDiagram
User->>API: Request
Note over API: Validates JWT token
API-->>User: Response
```
### Note spanning participants
```mermaid
sequenceDiagram
Frontend->>API: Request
Note over Frontend,API: HTTPS encrypted
API-->>Frontend: Response
```
### Right/Left notes
```mermaid
sequenceDiagram
User->>System: Action
Note right of System: Logs to database
System-->>User: Response
Note left of User: Updates UI
```
## Sequence Numbers
Automatically number messages:
```mermaid
sequenceDiagram
autonumber
User->>Frontend: Login
Frontend->>API: Authenticate
API->>Database: Verify credentials
Database-->>API: User data
API-->>Frontend: JWT token
Frontend-->>User: Success
```
## Links and Tooltips
Add clickable links:
```mermaid
sequenceDiagram
participant A as Service A
link A: Dashboard @ https://dashboard.example.com
link A: API Docs @ https://docs.example.com
A->>B: Message
```
## Comprehensive Example: User Authentication Flow
```mermaid
sequenceDiagram
autonumber
actor User
participant Frontend
participant AuthAPI
participant Database
participant Redis
participant EmailService
User->>+Frontend: Enter credentials
Frontend->>+AuthAPI: POST /auth/login
AuthAPI->>+Database: Query user by email
Database-->>-AuthAPI: User record
alt User not found
AuthAPI-->>Frontend: 404 User not found
Frontend-->>User: Show error
else User found
AuthAPI->>AuthAPI: Verify password hash
alt Invalid password
AuthAPI->>Database: Increment failed attempts
opt Failed attempts > 5
AuthAPI->>Database: Lock account
AuthAPI->>EmailService: Send security alert
end
AuthAPI-->>Frontend: 401 Invalid credentials
Frontend-->>User: Show error
else Valid password
AuthAPI->>AuthAPI: Generate JWT token
AuthAPI->>+Redis: Store session
Redis-->>-AuthAPI: Confirm
par Update login metadata
AuthAPI->>Database: Update last_login
and Track analytics
AuthAPI->>Database: Log login event
end
AuthAPI-->>-Frontend: 200 OK + JWT token
Frontend->>Frontend: Store token in localStorage
Frontend-->>-User: Redirect to dashboard
opt First login
EmailService->>User: Welcome email
end
end
end
```
## API Request/Response Example
```mermaid
sequenceDiagram
autonumber
participant Client
participant Gateway
participant AuthService
participant UserService
participant Database
Client->>+Gateway: GET /api/users/123
Note over Gateway: Rate limiting check
Gateway->>+AuthService: Validate JWT
AuthService->>AuthService: Verify signature
alt Token invalid or expired
AuthService-->>Gateway: 401 Unauthorized
Gateway-->>Client: 401 Unauthorized
else Token valid
AuthService-->>-Gateway: User context
Gateway->>+UserService: GET /users/123
UserService->>+Database: SELECT * FROM users WHERE id=123
Database-->>-UserService: User record
alt User not found
UserService-->>Gateway: 404 Not Found
Gateway-->>Client: 404 Not Found
else User found
UserService-->>-Gateway: 200 OK + User data
Gateway-->>-Client: 200 OK + User data
end
end
```
## Microservices Communication
```mermaid
sequenceDiagram
actor User
participant Gateway
participant OrderService
participant PaymentService
participant InventoryService
participant NotificationService
participant MessageQueue
User->>+Gateway: POST /orders
Gateway->>+OrderService: Create order
OrderService->>+InventoryService: Check stock
InventoryService-->>-OrderService: Stock available
break Insufficient stock
OrderService-->>Gateway: 400 Out of stock
Gateway-->>User: Error message
end
OrderService->>OrderService: Reserve order
OrderService->>+PaymentService: Charge customer
alt Payment successful
PaymentService-->>-OrderService: Payment confirmed
OrderService->>MessageQueue: Publish OrderConfirmed event
par Async processing
MessageQueue->>InventoryService: Reduce stock
and
MessageQueue->>NotificationService: Send confirmation
NotificationService->>User: Email confirmation
end
OrderService-->>-Gateway: 201 Created
Gateway-->>User: Order confirmed
else Payment failed
PaymentService-->>OrderService: Payment declined
OrderService->>OrderService: Release reservation
OrderService-->>Gateway: 402 Payment Required
Gateway-->>User: Payment failed
end
```
## Best Practices
1. **Order participants logically** - Typically: User → Frontend → Backend → Database
2. **Use activations** - Shows when components are actively processing
3. **Group related logic** - Use alt/opt/par to organize conditional flows
4. **Add descriptive notes** - Explain complex logic or important details
5. **Keep diagrams focused** - One scenario per diagram
6. **Number messages** - Use autonumber for complex flows
7. **Show error paths** - Document failure scenarios with alt/else
8. **Indicate async operations** - Use open arrows for fire-and-forget messages
## Common Use Cases
### Authentication
- Login flows
- OAuth/SSO flows
- Token refresh
- Password reset
### API Operations
- CRUD operations
- Search and filtering
- Batch processing
- Webhook handling
### System Integration
- Microservice communication
- Third-party API calls
- Message queue processing
- Event-driven architecture
### Business Processes
- Order fulfillment
- Payment processing
- Approval workflows
- Notification chains
Source: claude-code-templates (MIT). See About Us for full credits.