# 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.