kontenhumas-be/docs/COMPREHENSIVE_APPROVAL_WORK...

323 lines
9.1 KiB
Markdown

# Comprehensive Approval Workflow API
## Overview
This document describes the new comprehensive API endpoint that creates approval workflows along with all their dependencies (client approval settings) in a single API call.
## Endpoint Details
### POST `/approval-workflows/with-client-settings`
**Description**: Creates a comprehensive approval workflow with workflow steps and client approval settings in a single transaction.
**Authentication**: Bearer token required
**Request Body**:
```json
{
"name": "Standard Article Approval",
"description": "Standard approval workflow for articles",
"isActive": true,
"isDefault": true,
"requiresApproval": true,
"autoPublish": false,
"steps": [
{
"stepOrder": 1,
"stepName": "Editor Review",
"requiredUserLevelId": 2,
"canSkip": false,
"autoApproveAfterHours": null,
"isActive": true,
"parentStepId": null,
"conditionType": "always",
"conditionValue": null,
"isParallel": false,
"branchName": null,
"branchOrder": null
},
{
"stepOrder": 2,
"stepName": "Manager Approval",
"requiredUserLevelId": 3,
"canSkip": false,
"autoApproveAfterHours": 24,
"isActive": true,
"parentStepId": null,
"conditionType": "always",
"conditionValue": null,
"isParallel": false,
"branchName": null,
"branchOrder": null
}
],
"clientApprovalSettings": {
"requiresApproval": true,
"autoPublishArticles": false,
"approvalExemptUsers": [],
"approvalExemptRoles": [],
"approvalExemptCategories": [],
"requireApprovalFor": ["article", "news"],
"skipApprovalFor": ["announcement"],
"isActive": true
}
}
```
**Response**:
```json
{
"success": true,
"messages": ["Comprehensive approval workflow with client settings successfully created"],
"data": {
"workflow": {
"id": 1,
"name": "Standard Article Approval",
"description": "Standard approval workflow for articles",
"isActive": true,
"isDefault": true,
"requiresApproval": true,
"autoPublish": false,
"clientId": "uuid-here",
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
"clientSettings": {
"id": 1,
"clientId": "uuid-here",
"requiresApproval": true,
"defaultWorkflowId": 1,
"autoPublishArticles": false,
"approvalExemptUsers": [],
"approvalExemptRoles": [],
"approvalExemptCategories": [],
"requireApprovalFor": ["article", "news"],
"skipApprovalFor": ["announcement"],
"isActive": true,
"createdAt": "2024-01-01T00:00:00Z",
"updatedAt": "2024-01-01T00:00:00Z"
},
"message": "Comprehensive approval workflow with client settings created successfully"
}
}
```
## Features
### 1. Atomic Transaction
- Creates workflow, workflow steps, and client approval settings in a single transaction
- Automatic rollback if any step fails
- Ensures data consistency
### 2. Comprehensive Validation
- Validates workflow structure and steps
- Checks for existing client approval settings
- Validates multi-branch workflow logic
- Ensures proper step ordering
### 3. Multi-Branch Support
- Supports complex approval workflows with parallel branches
- Conditional step execution
- Parent-child step relationships
- Branch naming and ordering
### 4. Client Settings Integration
- Automatically links workflow to client approval settings
- Sets default workflow if specified
- Configures approval exemptions
- Sets content type approval rules
### 5. Error Handling
- Comprehensive error messages
- Automatic cleanup on failure
- Detailed logging for debugging
- Graceful degradation
## Request Structure Details
### Workflow Fields
- `name`: Workflow name (required)
- `description`: Workflow description (required)
- `isActive`: Whether workflow is active
- `isDefault`: Whether to set as default workflow
- `requiresApproval`: Whether workflow requires approval
- `autoPublish`: Whether to auto-publish after approval
### Step Fields
- `stepOrder`: Order of the step in workflow
- `stepName`: Name of the approval step
- `requiredUserLevelId`: User level required for this step
- `canSkip`: Whether this step can be skipped
- `autoApproveAfterHours`: Auto-approve after specified hours
- `isActive`: Whether step is active
### Multi-Branch Fields
- `parentStepId`: Parent step for branching
- `conditionType`: Condition type (user_level, user_level_hierarchy, always, custom)
- `conditionValue`: JSON condition value
- `isParallel`: Whether step runs in parallel
- `branchName`: Name of the branch
- `branchOrder`: Order within branch
### Client Settings Fields
- `requiresApproval`: Global approval requirement
- `autoPublishArticles`: Auto-publish after creation
- `approvalExemptUsers`: User IDs exempt from approval
- `approvalExemptRoles`: Role IDs exempt from approval
- `approvalExemptCategories`: Category IDs exempt from approval
- `requireApprovalFor`: Content types requiring approval
- `skipApprovalFor`: Content types skipping approval
- `isActive`: Whether settings are active
## Usage Examples
### Basic Workflow
```bash
curl -X POST "https://api.example.com/approval-workflows/with-client-settings" \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"name": "Simple Approval",
"description": "Two-step approval process",
"isActive": true,
"isDefault": true,
"steps": [
{
"stepOrder": 1,
"stepName": "Editor Review",
"requiredUserLevelId": 2,
"canSkip": false,
"isActive": true
},
{
"stepOrder": 2,
"stepName": "Manager Approval",
"requiredUserLevelId": 3,
"canSkip": false,
"isActive": true
}
],
"clientApprovalSettings": {
"requiresApproval": true,
"autoPublishArticles": false,
"isActive": true
}
}'
```
### Complex Multi-Branch Workflow
```bash
curl -X POST "https://api.example.com/approval-workflows/with-client-settings" \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{
"name": "Complex Multi-Branch Approval",
"description": "Complex workflow with parallel branches",
"isActive": true,
"isDefault": false,
"steps": [
{
"stepOrder": 1,
"stepName": "Initial Review",
"requiredUserLevelId": 2,
"canSkip": false,
"isActive": true
},
{
"stepOrder": 2,
"stepName": "Technical Review",
"requiredUserLevelId": 4,
"canSkip": false,
"isActive": true,
"parentStepId": 1,
"conditionType": "user_level",
"conditionValue": "{\"minLevel\": 4}",
"isParallel": true,
"branchName": "technical",
"branchOrder": 1
},
{
"stepOrder": 2,
"stepName": "Content Review",
"requiredUserLevelId": 3,
"canSkip": false,
"isActive": true,
"parentStepId": 1,
"conditionType": "user_level",
"conditionValue": "{\"minLevel\": 3}",
"isParallel": true,
"branchName": "content",
"branchOrder": 2
},
{
"stepOrder": 3,
"stepName": "Final Approval",
"requiredUserLevelId": 5,
"canSkip": false,
"isActive": true
}
],
"clientApprovalSettings": {
"requiresApproval": true,
"autoPublishArticles": false,
"approvalExemptUsers": [1],
"approvalExemptRoles": [1],
"approvalExemptCategories": [1],
"requireApprovalFor": ["article", "news", "blog"],
"skipApprovalFor": ["announcement", "update"],
"isActive": true
}
}'
```
## Error Responses
### Validation Error
```json
{
"success": false,
"messages": ["Validation failed: [\"Workflow name is required\", \"Workflow must have at least one step\"]"],
"data": null
}
```
### Client Settings Already Exist
```json
{
"success": false,
"messages": ["client approval settings already exist for this client"],
"data": null
}
```
### Authentication Error
```json
{
"success": false,
"messages": ["clientId not found in auth token"],
"data": null
}
```
## Implementation Details
### Files Modified/Created
1. `app/module/approval_workflows/request/approval_workflows.request.go` - Added comprehensive request structs
2. `app/module/approval_workflows/service/approval_workflows.service.go` - Added service method with transaction logic
3. `app/module/approval_workflows/controller/approval_workflows.controller.go` - Added controller method
4. `app/module/approval_workflows/approval_workflows.module.go` - Added route registration
### Dependencies
- Client Approval Settings Repository
- Approval Workflow Steps Repository
- Users Repository
- Validation utilities
- Response utilities
### Transaction Safety
- Automatic rollback on any failure
- Comprehensive error handling
- Detailed logging for debugging
- Data consistency guarantees
This comprehensive API endpoint provides a single, atomic way to create complete approval workflows with all necessary dependencies, ensuring data consistency and providing a better developer experience.