# Comprehensive Workflow Detail API

## Overview
API endpoint untuk mendapatkan detail lengkap dari Approval Workflow beserta semua data terkait termasuk steps, client settings, dan informasi pendukung lainnya.

## Endpoint
```
POST /approval-workflows/comprehensive-details
```

## Request

### Headers
```
Authorization: Bearer <access_token>
Content-Type: application/json
```

### Request Body
```json
{
  "workflowId": 1
}
```

### Request Structure
```go
type ComprehensiveWorkflowDetailRequest struct {
    WorkflowId uint `json:"workflowId" validate:"required"`
}
```

## Response

### Success Response (200)
```json
{
  "success": true,
  "messages": ["Comprehensive workflow details retrieved successfully"],
  "data": {
    "workflow": {
      "id": 1,
      "name": "Standard Article Approval",
      "description": "Standard approval workflow for articles",
      "isDefault": true,
      "isActive": true,
      "requiresApproval": true,
      "autoPublish": false,
      "clientId": "123e4567-e89b-12d3-a456-426614174000",
      "createdAt": "2024-01-01T00:00:00Z",
      "updatedAt": "2024-01-01T00:00:00Z",
      "totalSteps": 3,
      "activeSteps": 3,
      "hasBranches": false,
      "maxStepOrder": 3
    },
    "steps": [
      {
        "id": 1,
        "workflowId": 1,
        "stepOrder": 1,
        "stepName": "Content Review",
        "requiredUserLevelId": 2,
        "requiredUserLevelName": "Editor",
        "canSkip": false,
        "autoApproveAfterHours": null,
        "isActive": true,
        "parentStepId": null,
        "parentStepName": null,
        "conditionType": null,
        "conditionValue": null,
        "isParallel": false,
        "branchName": null,
        "branchOrder": null,
        "hasChildren": false,
        "isFirstStep": true,
        "isLastStep": false
      },
      {
        "id": 2,
        "workflowId": 1,
        "stepOrder": 2,
        "stepName": "Final Approval",
        "requiredUserLevelId": 3,
        "requiredUserLevelName": "Manager",
        "canSkip": false,
        "autoApproveAfterHours": null,
        "isActive": true,
        "parentStepId": null,
        "parentStepName": null,
        "conditionType": null,
        "conditionValue": null,
        "isParallel": false,
        "branchName": null,
        "branchOrder": null,
        "hasChildren": false,
        "isFirstStep": false,
        "isLastStep": true
      }
    ],
    "clientSettings": {
      "id": 1,
      "clientId": "123e4567-e89b-12d3-a456-426614174000",
      "requiresApproval": true,
      "defaultWorkflowId": 1,
      "defaultWorkflowName": "Standard Article Approval",
      "autoPublishArticles": false,
      "approvalExemptUsers": [1, 2],
      "approvalExemptRoles": [1],
      "approvalExemptCategories": [1, 2],
      "requireApprovalFor": ["articles", "news"],
      "skipApprovalFor": ["announcements"],
      "isActive": true,
      "createdAt": "2024-01-01T00:00:00Z",
      "updatedAt": "2024-01-01T00:00:00Z",
      "exemptUsersDetails": [
        {
          "id": 1,
          "username": "admin",
          "fullname": "Administrator",
          "email": "admin@example.com",
          "userLevelId": 1,
          "userLevelName": "Super Admin",
          "isActive": true
        }
      ],
      "exemptRolesDetails": [
        {
          "id": 1,
          "roleName": "Super Admin",
          "isActive": true
        }
      ],
      "exemptCategoriesDetails": [
        {
          "id": 1,
          "categoryName": "Announcements",
          "isActive": true
        }
      ]
    },
    "relatedData": {
      "userLevels": [
        {
          "id": 1,
          "name": "Super Admin",
          "aliasName": "super_admin",
          "levelNumber": 1,
          "isApprovalActive": true,
          "isActive": true
        },
        {
          "id": 2,
          "name": "Editor",
          "aliasName": "editor",
          "levelNumber": 2,
          "isApprovalActive": true,
          "isActive": true
        }
      ]
    },
    "statistics": {
      "totalArticlesProcessed": 0,
      "pendingArticles": 0,
      "approvedArticles": 0,
      "rejectedArticles": 0,
      "averageProcessingTime": 0,
      "mostActiveStep": "",
      "lastUsedAt": null
    },
    "lastUpdated": "2024-01-01T00:00:00Z"
  }
}
```

## Response Structure

### ComprehensiveWorkflowDetailResponse
```go
type ComprehensiveWorkflowDetailResponse struct {
    Workflow       WorkflowDetailInfo           `json:"workflow"`
    Steps          []WorkflowStepDetailInfo     `json:"steps"`
    ClientSettings ClientApprovalSettingsDetail `json:"clientSettings"`
    RelatedData    RelatedDataInfo              `json:"relatedData"`
    Statistics     WorkflowStatisticsInfo       `json:"statistics"`
    LastUpdated    time.Time                    `json:"lastUpdated"`
}
```

### WorkflowDetailInfo
```go
type WorkflowDetailInfo struct {
    ID               uint      `json:"id"`
    Name             string    `json:"name"`
    Description      *string   `json:"description"`
    IsDefault        *bool     `json:"isDefault"`
    IsActive         *bool     `json:"isActive"`
    RequiresApproval *bool     `json:"requiresApproval"`
    AutoPublish      *bool     `json:"autoPublish"`
    ClientId         *string   `json:"clientId"`
    CreatedAt        time.Time `json:"createdAt"`
    UpdatedAt        time.Time `json:"updatedAt"`
    
    // Additional workflow info
    TotalSteps   int  `json:"totalSteps"`
    ActiveSteps  int  `json:"activeSteps"`
    HasBranches  bool `json:"hasBranches"`
    MaxStepOrder int  `json:"maxStepOrder"`
}
```

### WorkflowStepDetailInfo
```go
type WorkflowStepDetailInfo struct {
    ID                    uint   `json:"id"`
    WorkflowId            uint   `json:"workflowId"`
    StepOrder             int    `json:"stepOrder"`
    StepName              string `json:"stepName"`
    RequiredUserLevelId   uint   `json:"requiredUserLevelId"`
    RequiredUserLevelName string `json:"requiredUserLevelName"`
    CanSkip               *bool  `json:"canSkip"`
    AutoApproveAfterHours *int   `json:"autoApproveAfterHours"`
    IsActive              *bool  `json:"isActive"`
    
    // Multi-branch support fields
    ParentStepId   *uint   `json:"parentStepId"`
    ParentStepName *string `json:"parentStepName"`
    ConditionType  *string `json:"conditionType"`
    ConditionValue *string `json:"conditionValue"`
    IsParallel     *bool   `json:"isParallel"`
    BranchName     *string `json:"branchName"`
    BranchOrder    *int    `json:"branchOrder"`
    
    // Additional step info
    HasChildren bool `json:"hasChildren"`
    IsFirstStep bool `json:"isFirstStep"`
    IsLastStep  bool `json:"isLastStep"`
}
```

### ClientApprovalSettingsDetail
```go
type ClientApprovalSettingsDetail struct {
    ID                       uint                    `json:"id"`
    ClientId                 string                  `json:"clientId"`
    RequiresApproval         *bool                   `json:"requiresApproval"`
    DefaultWorkflowId        *uint                   `json:"defaultWorkflowId"`
    DefaultWorkflowName      *string                 `json:"defaultWorkflowName"`
    AutoPublishArticles      *bool                   `json:"autoPublishArticles"`
    ApprovalExemptUsers      []uint                  `json:"approvalExemptUsers"`
    ApprovalExemptRoles      []uint                  `json:"approvalExemptRoles"`
    ApprovalExemptCategories []uint                  `json:"approvalExemptCategories"`
    RequireApprovalFor       []string                `json:"requireApprovalFor"`
    SkipApprovalFor          []string                `json:"skipApprovalFor"`
    IsActive                 *bool                   `json:"isActive"`
    CreatedAt                time.Time               `json:"createdAt"`
    UpdatedAt                time.Time               `json:"updatedAt"`
    
    // Detailed exempt information
    ExemptUsersDetails      []UserDetailInfo      `json:"exemptUsersDetails"`
    ExemptRolesDetails      []UserRoleDetailInfo  `json:"exemptRolesDetails"`
    ExemptCategoriesDetails []CategoryDetailInfo  `json:"exemptCategoriesDetails"`
}
```

### RelatedDataInfo
```go
type RelatedDataInfo struct {
    UserLevels []UserLevelDetailInfo `json:"userLevels"`
}
```

### WorkflowStatisticsInfo
```go
type WorkflowStatisticsInfo struct {
    TotalArticlesProcessed int     `json:"totalArticlesProcessed"`
    PendingArticles        int     `json:"pendingArticles"`
    ApprovedArticles       int     `json:"approvedArticles"`
    RejectedArticles       int     `json:"rejectedArticles"`
    AverageProcessingTime  int     `json:"averageProcessingTime"`
    MostActiveStep         string  `json:"mostActiveStep"`
    LastUsedAt             *string `json:"lastUsedAt"`
}
```

## Error Responses

### 400 Bad Request
```json
{
  "success": false,
  "messages": ["Validation failed: workflowId is required"],
  "data": null
}
```

### 401 Unauthorized
```json
{
  "success": false,
  "messages": ["Unauthorized access"],
  "data": null
}
```

### 404 Not Found
```json
{
  "success": false,
  "messages": ["Workflow not found"],
  "data": null
}
```

### 500 Internal Server Error
```json
{
  "success": false,
  "messages": ["Internal server error"],
  "data": null
}
```

## Features

### 1. Comprehensive Workflow Information
- Detail lengkap workflow termasuk metadata dan statistik
- Informasi step dengan hierarki dan kondisi
- Status aktif/inaktif dan konfigurasi approval

### 2. Detailed Step Information
- Informasi lengkap setiap step dalam workflow
- Nama user level yang diperlukan untuk approval
- Konfigurasi skip, auto-approve, dan kondisi
- Dukungan multi-branch workflow

### 3. Client Settings Integration
- Pengaturan approval global untuk client
- Daftar user, role, dan kategori yang dikecualikan
- Informasi detail untuk setiap exemption
- Workflow default yang digunakan

### 4. Related Data Support
- Daftar user level yang tersedia
- Data pendukung untuk konfigurasi workflow
- Informasi terkait untuk referensi

### 5. Statistics Information
- Statistik penggunaan workflow (placeholder untuk implementasi future)
- Informasi performa dan aktivitas
- Data untuk monitoring dan analisis

## Use Cases

### 1. Workflow Management Dashboard
- Menampilkan detail lengkap workflow untuk administrator
- Monitoring status dan konfigurasi workflow
- Analisis performa dan penggunaan

### 2. Workflow Configuration
- Mengedit workflow dengan informasi lengkap
- Mengatur step dan kondisi approval
- Konfigurasi exemption dan pengaturan client

### 3. Approval Process Monitoring
- Melihat status artikel dalam proses approval
- Tracking progress melalui step workflow
- Monitoring bottleneck dan performa

### 4. Client Settings Management
- Mengatur pengaturan approval global
- Mengelola exemption untuk user dan kategori
- Konfigurasi workflow default

## Implementation Notes

### 1. Performance Considerations
- API menggunakan single query dengan join untuk efisiensi
- Data related diambil secara terpisah untuk fleksibilitas
- Caching dapat diimplementasikan untuk data yang jarang berubah

### 2. Security
- Menggunakan authentication token untuk akses
- Validasi clientId dari token untuk multi-tenant
- Authorization check untuk akses workflow

### 3. Error Handling
- Graceful handling untuk data yang tidak ditemukan
- Logging untuk debugging dan monitoring
- Rollback mechanism untuk operasi yang gagal

### 4. Extensibility
- Struktur response dapat diperluas untuk kebutuhan future
- Statistics dapat diimplementasikan dengan query yang lebih kompleks
- Support untuk workflow yang lebih kompleks

## Dependencies

### Required Repositories
- `ApprovalWorkflowsRepository`
- `ApprovalWorkflowStepsRepository`
- `ClientApprovalSettingsRepository`
- `UsersRepository`
- `UserLevelsRepository`
- `UserRolesRepository`
- `ArticleCategoriesRepository`
- `ArticleApprovalFlowsRepository`

### Required Services
- `ApprovalWorkflowsService`
- `ClientApprovalSettingsService`

## Testing

### Unit Tests
```go
func TestGetComprehensiveWorkflowDetails(t *testing.T) {
    // Test cases for comprehensive workflow details
    // Test with valid workflow ID
    // Test with invalid workflow ID
    // Test with missing client settings
    // Test with empty steps
}
```

### Integration Tests
```go
func TestComprehensiveWorkflowDetailsAPI(t *testing.T) {
    // Test API endpoint
    // Test authentication
    // Test response structure
    // Test error handling
}
```

## Future Enhancements

### 1. Real-time Statistics
- Implementasi query untuk statistik real-time
- Monitoring performa workflow
- Analytics dan reporting

### 2. Workflow Templates
- Template workflow yang dapat digunakan kembali
- Import/export workflow configuration
- Workflow marketplace

### 3. Advanced Branching
- Conditional workflow berdasarkan konten
- Dynamic step generation
- AI-powered workflow optimization

### 4. Integration Features
- Webhook untuk notifikasi
- API untuk external system integration
- Workflow automation triggers
