kontenhumas-be/docs/USERS_INFO_APPROVAL_WORKFLO...

188 lines
6.0 KiB
Markdown
Raw Normal View History

2025-10-02 02:50:11 +00:00
# Users Info API Enhancement - Approval Workflow Information
## Overview
This document describes the enhancement made to the `users/info` API to include approval workflow information, allowing users to know whether their client has set up approval workflows or not.
## Changes Made
### 1. Response Structure Enhancement
**File**: `app/module/users/response/users.response.go`
Added new fields to `UsersResponse` struct:
```go
type UsersResponse struct {
// ... existing fields ...
// Approval Workflow Info
ApprovalWorkflowInfo *ApprovalWorkflowInfo `json:"approvalWorkflowInfo,omitempty"`
}
type ApprovalWorkflowInfo struct {
HasWorkflowSetup bool `json:"hasWorkflowSetup"`
DefaultWorkflowId *uint `json:"defaultWorkflowId,omitempty"`
DefaultWorkflowName *string `json:"defaultWorkflowName,omitempty"`
RequiresApproval *bool `json:"requiresApproval,omitempty"`
AutoPublishArticles *bool `json:"autoPublishArticles,omitempty"`
IsApprovalActive *bool `json:"isApprovalActive,omitempty"`
}
```
### 2. Service Layer Enhancement
**File**: `app/module/users/service/users.service.go`
#### Added Dependencies
- `ApprovalWorkflowsRepository` - to access approval workflow data
- `ClientApprovalSettingsRepository` - to access client approval settings
#### Enhanced ShowUserInfo Method
The `ShowUserInfo` method now:
1. Retrieves user information as before
2. Calls `getApprovalWorkflowInfo()` to get workflow information
3. Combines both pieces of information in the response
#### New Method: getApprovalWorkflowInfo
```go
func (_i *usersService) getApprovalWorkflowInfo(clientId *uuid.UUID) (*response.ApprovalWorkflowInfo, error)
```
This method:
- Checks if client has approval settings configured
- Retrieves default workflow information if available
- Returns comprehensive workflow status information
### 3. Mapper Enhancement
**File**: `app/module/users/mapper/users.mapper.go`
Updated `UsersResponseMapper` to include a comment indicating that `ApprovalWorkflowInfo` will be set by the service layer.
## API Response Examples
### Client with Workflow Setup
```json
{
"success": true,
"messages": ["Users successfully retrieve"],
"data": {
"id": 1,
"username": "john.doe",
"email": "john.doe@example.com",
"fullname": "John Doe",
"userLevelId": 2,
"userLevelGroup": "Editor",
"isActive": true,
"approvalWorkflowInfo": {
"hasWorkflowSetup": true,
"defaultWorkflowId": 1,
"defaultWorkflowName": "Standard Article Approval",
"requiresApproval": true,
"autoPublishArticles": false,
"isApprovalActive": true
}
}
}
```
### Client without Workflow Setup
```json
{
"success": true,
"messages": ["Users successfully retrieve"],
"data": {
"id": 1,
"username": "john.doe",
"email": "john.doe@example.com",
"fullname": "John Doe",
"userLevelId": 2,
"userLevelGroup": "Editor",
"isActive": true,
"approvalWorkflowInfo": {
"hasWorkflowSetup": false
}
}
}
```
### Client with Workflow but No Default Workflow
```json
{
"success": true,
"messages": ["Users successfully retrieve"],
"data": {
"id": 1,
"username": "john.doe",
"email": "john.doe@example.com",
"fullname": "John Doe",
"userLevelId": 2,
"userLevelGroup": "Editor",
"isActive": true,
"approvalWorkflowInfo": {
"hasWorkflowSetup": true,
"requiresApproval": true,
"autoPublishArticles": false,
"isApprovalActive": true
}
}
}
```
## Field Descriptions
### ApprovalWorkflowInfo Fields
| Field | Type | Description |
|-------|------|-------------|
| `hasWorkflowSetup` | `bool` | Indicates whether the client has any approval workflow configuration |
| `defaultWorkflowId` | `*uint` | ID of the default workflow (if set) |
| `defaultWorkflowName` | `*string` | Name of the default workflow (if set) |
| `requiresApproval` | `*bool` | Whether the client requires approval for articles |
| `autoPublishArticles` | `*bool` | Whether articles are auto-published after creation |
| `isApprovalActive` | `*bool` | Whether the approval system is active for this client |
## Error Handling
The implementation includes robust error handling:
1. **Graceful Degradation**: If workflow information cannot be retrieved, the API still returns user information without workflow data
2. **Logging**: All errors are logged for debugging purposes
3. **Non-blocking**: Workflow information retrieval failures don't prevent user information from being returned
## Usage Scenarios
### 1. Frontend Dashboard
The frontend can now check `approvalWorkflowInfo.hasWorkflowSetup` to:
- Show/hide approval workflow setup prompts
- Display workflow status indicators
- Guide users through workflow configuration
### 2. Article Creation Flow
Before creating articles, the frontend can check:
- `requiresApproval` - to determine if approval is needed
- `autoPublishArticles` - to know if articles will be auto-published
- `isApprovalActive` - to verify the approval system is active
### 3. Workflow Management
The frontend can display:
- Current default workflow name
- Workflow configuration status
- Approval system status
## Benefits
1. **Single API Call**: Users can get both user info and workflow status in one request
2. **Real-time Status**: Always shows current workflow configuration status
3. **User Experience**: Users immediately know if they need to set up workflows
4. **Frontend Efficiency**: Reduces the need for multiple API calls
5. **Backward Compatibility**: Existing API consumers continue to work without changes
## Implementation Notes
- The `approvalWorkflowInfo` field is optional (`omitempty`) to maintain backward compatibility
- Error handling ensures the API remains stable even if workflow services are unavailable
- The implementation follows the existing code patterns and architecture
- All changes are non-breaking and additive
This enhancement provides users with immediate visibility into their approval workflow setup status, improving the overall user experience and reducing confusion about workflow configuration.