Add Workfeed module with routes, configurations, and API integration handling for employees, shifts, and departments. Update OpenAPI spec and include unit tests for endpoint wiring and filtering logic.
This commit is contained in:
+246
@@ -7677,6 +7677,193 @@ paths:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WeatherApiObjectResponse'
|
||||
|
||||
/modules/workfeed/employees:
|
||||
get:
|
||||
tags:
|
||||
- Modules
|
||||
summary: List Workfeed employees
|
||||
description: List employees from Workfeed with optional filtering and pagination
|
||||
operationId: workfeedListEmployees
|
||||
parameters:
|
||||
- name: search
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Search term for employee lookup
|
||||
- name: departmentId
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Filter by Workfeed department identifier
|
||||
- name: includeInactive
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
oneOf:
|
||||
- type: boolean
|
||||
- type: string
|
||||
description: Include inactive employees (`true`/`false`)
|
||||
- name: limit
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
minimum: 1
|
||||
description: Page size limit
|
||||
- name: cursor
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Cursor for paginated navigation
|
||||
responses:
|
||||
'200':
|
||||
description: Workfeed employees retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WorkfeedObjectResponse'
|
||||
|
||||
/modules/workfeed/employees/{id}:
|
||||
get:
|
||||
tags:
|
||||
- Modules
|
||||
summary: Get Workfeed employee
|
||||
description: Retrieve a single Workfeed employee by identifier
|
||||
operationId: workfeedGetEmployee
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
description: Workfeed employee identifier
|
||||
responses:
|
||||
'200':
|
||||
description: Workfeed employee retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WorkfeedObjectResponse'
|
||||
|
||||
/modules/workfeed/shifts:
|
||||
get:
|
||||
tags:
|
||||
- Modules
|
||||
summary: List Workfeed shifts
|
||||
description: List Workfeed shifts with optional timeframe and pagination filters
|
||||
operationId: workfeedListShifts
|
||||
parameters:
|
||||
- name: from
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Shift start range filter (provider-specific date/time format)
|
||||
- name: to
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Shift end range filter (provider-specific date/time format)
|
||||
- name: departmentId
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Filter by Workfeed department identifier
|
||||
- name: employeeId
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Filter by Workfeed employee identifier
|
||||
- name: status
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Filter by shift status
|
||||
- name: limit
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
minimum: 1
|
||||
description: Page size limit
|
||||
- name: cursor
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Cursor for paginated navigation
|
||||
responses:
|
||||
'200':
|
||||
description: Workfeed shifts retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WorkfeedObjectResponse'
|
||||
|
||||
/modules/workfeed/shifts/{id}:
|
||||
get:
|
||||
tags:
|
||||
- Modules
|
||||
summary: Get Workfeed shift
|
||||
description: Retrieve a single Workfeed shift by identifier
|
||||
operationId: workfeedGetShift
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
description: Workfeed shift identifier
|
||||
responses:
|
||||
'200':
|
||||
description: Workfeed shift retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WorkfeedObjectResponse'
|
||||
|
||||
/modules/workfeed/departments:
|
||||
get:
|
||||
tags:
|
||||
- Modules
|
||||
summary: List Workfeed departments
|
||||
description: List departments from Workfeed with optional filtering and pagination
|
||||
operationId: workfeedListDepartments
|
||||
parameters:
|
||||
- name: search
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Search term for department lookup
|
||||
- name: limit
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: integer
|
||||
minimum: 1
|
||||
description: Page size limit
|
||||
- name: cursor
|
||||
in: query
|
||||
required: false
|
||||
schema:
|
||||
type: string
|
||||
description: Cursor for paginated navigation
|
||||
responses:
|
||||
'200':
|
||||
description: Workfeed departments retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WorkfeedObjectResponse'
|
||||
|
||||
/departments/weather:
|
||||
get:
|
||||
tags:
|
||||
@@ -8441,6 +8628,35 @@ paths:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ModuleConfigUpdateResponse'
|
||||
|
||||
/workfeed/config:
|
||||
get:
|
||||
tags: [Config]
|
||||
summary: Get Workfeed config
|
||||
operationId: getWorkfeedConfig
|
||||
responses:
|
||||
'200':
|
||||
description: Workfeed configuration retrieved successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/WorkfeedConfigListResponse'
|
||||
post:
|
||||
tags: [Config]
|
||||
summary: Update Workfeed config
|
||||
operationId: updateWorkfeedConfig
|
||||
requestBody:
|
||||
required: false
|
||||
content:
|
||||
application/json:
|
||||
schema: {}
|
||||
responses:
|
||||
'200':
|
||||
description: Workfeed configuration updated successfully
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/ModuleConfigUpdateResponse'
|
||||
|
||||
/gatewayapi/config:
|
||||
get:
|
||||
tags: [Config]
|
||||
@@ -9890,6 +10106,18 @@ components:
|
||||
- type: string
|
||||
required: [module, variable, type, value]
|
||||
|
||||
WorkfeedConfigEntry:
|
||||
type: object
|
||||
properties:
|
||||
module: { type: string, enum: [workfeed] }
|
||||
variable: { type: string, enum: [enabled, api_url, api_key] }
|
||||
type: { type: string, enum: [bool, string] }
|
||||
value:
|
||||
oneOf:
|
||||
- type: boolean
|
||||
- type: string
|
||||
required: [module, variable, type, value]
|
||||
|
||||
GatewayApiConfigEntry:
|
||||
type: object
|
||||
properties:
|
||||
@@ -10084,6 +10312,14 @@ components:
|
||||
data: { type: array, items: { $ref: '#/components/schemas/WeatherApiConfigEntry' } }
|
||||
required: [data]
|
||||
|
||||
WorkfeedConfigListResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/ModuleConfigEnvelopeBase'
|
||||
- type: object
|
||||
properties:
|
||||
data: { type: array, items: { $ref: '#/components/schemas/WorkfeedConfigEntry' } }
|
||||
required: [data]
|
||||
|
||||
GatewayApiConfigListResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/ModuleConfigEnvelopeBase'
|
||||
@@ -10203,6 +10439,16 @@ components:
|
||||
additionalProperties: true
|
||||
required: [data]
|
||||
|
||||
WorkfeedObjectResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/ModuleConfigEnvelopeBase'
|
||||
- type: object
|
||||
properties:
|
||||
data:
|
||||
type: object
|
||||
additionalProperties: true
|
||||
required: [data]
|
||||
|
||||
DepartmentWeatherTimelineResponse:
|
||||
allOf:
|
||||
- $ref: '#/components/schemas/ModuleConfigEnvelopeBase'
|
||||
|
||||
Reference in New Issue
Block a user