1. Status badge: Render HTML in DataTable cell using {@html}
2. Form alignment: Consistent horizontal layout for all fields
- Labels on left (w-28), inputs on right (flex-1)
- Added dollar sign prefix for hourly rate
- Wider modal (max-w-lg)
3. API docs: Regenerated with scribe:generate
444 lines
11 KiB
YAML
444 lines
11 KiB
YAML
## Autogenerated by Scribe. DO NOT MODIFY.
|
|
|
|
name: 'Team Members'
|
|
description: |-
|
|
|
|
Endpoints for managing team members.
|
|
endpoints:
|
|
-
|
|
custom: []
|
|
httpMethods:
|
|
- GET
|
|
uri: api/team-members
|
|
metadata:
|
|
custom: []
|
|
groupName: 'Team Members'
|
|
groupDescription: |-
|
|
|
|
Endpoints for managing team members.
|
|
subgroup: ''
|
|
subgroupDescription: ''
|
|
title: 'List all team members'
|
|
description: 'Get a list of all team members with optional filtering by active status.'
|
|
authenticated: true
|
|
deprecated: false
|
|
headers:
|
|
Content-Type: application/json
|
|
Accept: application/json
|
|
urlParameters: []
|
|
cleanUrlParameters: []
|
|
queryParameters:
|
|
active:
|
|
custom: []
|
|
name: active
|
|
description: 'Filter by active status.'
|
|
required: false
|
|
example: true
|
|
type: boolean
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
cleanQueryParameters:
|
|
active: true
|
|
bodyParameters: []
|
|
cleanBodyParameters: []
|
|
fileParameters: []
|
|
responses:
|
|
-
|
|
custom: []
|
|
status: 200
|
|
content: |-
|
|
[
|
|
{
|
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"name": "John Doe",
|
|
"role_id": 1,
|
|
"role": {
|
|
"id": 1,
|
|
"name": "Backend Developer"
|
|
},
|
|
"hourly_rate": "150.00",
|
|
"active": true,
|
|
"created_at": "2024-01-15T10:00:00.000000Z",
|
|
"updated_at": "2024-01-15T10:00:00.000000Z"
|
|
}
|
|
]
|
|
headers: []
|
|
description: ''
|
|
responseFields: []
|
|
auth: []
|
|
controller: null
|
|
method: null
|
|
route: null
|
|
-
|
|
custom: []
|
|
httpMethods:
|
|
- POST
|
|
uri: api/team-members
|
|
metadata:
|
|
custom: []
|
|
groupName: 'Team Members'
|
|
groupDescription: |-
|
|
|
|
Endpoints for managing team members.
|
|
subgroup: ''
|
|
subgroupDescription: ''
|
|
title: 'Create a new team member'
|
|
description: 'Create a new team member with name, role, and hourly rate.'
|
|
authenticated: true
|
|
deprecated: false
|
|
headers:
|
|
Content-Type: application/json
|
|
Accept: application/json
|
|
urlParameters: []
|
|
cleanUrlParameters: []
|
|
queryParameters: []
|
|
cleanQueryParameters: []
|
|
bodyParameters:
|
|
name:
|
|
custom: []
|
|
name: name
|
|
description: 'Team member name.'
|
|
required: true
|
|
example: 'John Doe'
|
|
type: string
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
role_id:
|
|
custom: []
|
|
name: role_id
|
|
description: 'Role ID.'
|
|
required: true
|
|
example: 1
|
|
type: integer
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
hourly_rate:
|
|
custom: []
|
|
name: hourly_rate
|
|
description: 'Hourly rate (must be > 0).'
|
|
required: true
|
|
example: '150.00'
|
|
type: numeric
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
active:
|
|
custom: []
|
|
name: active
|
|
description: 'Active status (defaults to true).'
|
|
required: false
|
|
example: true
|
|
type: boolean
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
cleanBodyParameters:
|
|
name: 'John Doe'
|
|
role_id: 1
|
|
hourly_rate: '150.00'
|
|
active: true
|
|
fileParameters: []
|
|
responses:
|
|
-
|
|
custom: []
|
|
status: 201
|
|
content: |-
|
|
{
|
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"name": "John Doe",
|
|
"role_id": 1,
|
|
"role": {
|
|
"id": 1,
|
|
"name": "Backend Developer"
|
|
},
|
|
"hourly_rate": "150.00",
|
|
"active": true,
|
|
"created_at": "2024-01-15T10:00:00.000000Z",
|
|
"updated_at": "2024-01-15T10:00:00.000000Z"
|
|
}
|
|
headers: []
|
|
description: ''
|
|
-
|
|
custom: []
|
|
status: 422
|
|
content: '{"message":"Validation failed","errors":{"name":["The name field is required."],"hourly_rate":["Hourly rate must be greater than 0"]}}'
|
|
headers: []
|
|
description: ''
|
|
responseFields: []
|
|
auth: []
|
|
controller: null
|
|
method: null
|
|
route: null
|
|
-
|
|
custom: []
|
|
httpMethods:
|
|
- GET
|
|
uri: 'api/team-members/{id}'
|
|
metadata:
|
|
custom: []
|
|
groupName: 'Team Members'
|
|
groupDescription: |-
|
|
|
|
Endpoints for managing team members.
|
|
subgroup: ''
|
|
subgroupDescription: ''
|
|
title: 'Get a single team member'
|
|
description: 'Get details of a specific team member by ID.'
|
|
authenticated: true
|
|
deprecated: false
|
|
headers:
|
|
Content-Type: application/json
|
|
Accept: application/json
|
|
urlParameters:
|
|
id:
|
|
custom: []
|
|
name: id
|
|
description: 'Team member UUID.'
|
|
required: true
|
|
example: 550e8400-e29b-41d4-a716-446655440000
|
|
type: string
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
cleanUrlParameters:
|
|
id: 550e8400-e29b-41d4-a716-446655440000
|
|
queryParameters: []
|
|
cleanQueryParameters: []
|
|
bodyParameters: []
|
|
cleanBodyParameters: []
|
|
fileParameters: []
|
|
responses:
|
|
-
|
|
custom: []
|
|
status: 200
|
|
content: |-
|
|
{
|
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"name": "John Doe",
|
|
"role_id": 1,
|
|
"role": {
|
|
"id": 1,
|
|
"name": "Backend Developer"
|
|
},
|
|
"hourly_rate": "150.00",
|
|
"active": true,
|
|
"created_at": "2024-01-15T10:00:00.000000Z",
|
|
"updated_at": "2024-01-15T10:00:00.000000Z"
|
|
}
|
|
headers: []
|
|
description: ''
|
|
-
|
|
custom: []
|
|
status: 404
|
|
content: '{"message":"Team member not found"}'
|
|
headers: []
|
|
description: ''
|
|
responseFields: []
|
|
auth: []
|
|
controller: null
|
|
method: null
|
|
route: null
|
|
-
|
|
custom: []
|
|
httpMethods:
|
|
- PUT
|
|
- PATCH
|
|
uri: 'api/team-members/{id}'
|
|
metadata:
|
|
custom: []
|
|
groupName: 'Team Members'
|
|
groupDescription: |-
|
|
|
|
Endpoints for managing team members.
|
|
subgroup: ''
|
|
subgroupDescription: ''
|
|
title: 'Update a team member'
|
|
description: 'Update details of an existing team member.'
|
|
authenticated: true
|
|
deprecated: false
|
|
headers:
|
|
Content-Type: application/json
|
|
Accept: application/json
|
|
urlParameters:
|
|
id:
|
|
custom: []
|
|
name: id
|
|
description: 'Team member UUID.'
|
|
required: true
|
|
example: 550e8400-e29b-41d4-a716-446655440000
|
|
type: string
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
cleanUrlParameters:
|
|
id: 550e8400-e29b-41d4-a716-446655440000
|
|
queryParameters: []
|
|
cleanQueryParameters: []
|
|
bodyParameters:
|
|
name:
|
|
custom: []
|
|
name: name
|
|
description: 'Team member name.'
|
|
required: false
|
|
example: 'John Doe'
|
|
type: string
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
role_id:
|
|
custom: []
|
|
name: role_id
|
|
description: 'Role ID.'
|
|
required: false
|
|
example: 1
|
|
type: integer
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
hourly_rate:
|
|
custom: []
|
|
name: hourly_rate
|
|
description: 'Hourly rate (must be > 0).'
|
|
required: false
|
|
example: '175.00'
|
|
type: numeric
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
active:
|
|
custom: []
|
|
name: active
|
|
description: 'Active status.'
|
|
required: false
|
|
example: false
|
|
type: boolean
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
cleanBodyParameters:
|
|
name: 'John Doe'
|
|
role_id: 1
|
|
hourly_rate: '175.00'
|
|
active: false
|
|
fileParameters: []
|
|
responses:
|
|
-
|
|
custom: []
|
|
status: 200
|
|
content: |-
|
|
{
|
|
"id": "550e8400-e29b-41d4-a716-446655440000",
|
|
"name": "John Doe",
|
|
"role_id": 1,
|
|
"role": {
|
|
"id": 1,
|
|
"name": "Backend Developer"
|
|
},
|
|
"hourly_rate": "175.00",
|
|
"active": false,
|
|
"created_at": "2024-01-15T10:00:00.000000Z",
|
|
"updated_at": "2024-01-15T11:00:00.000000Z"
|
|
}
|
|
headers: []
|
|
description: ''
|
|
-
|
|
custom: []
|
|
status: 404
|
|
content: '{"message":"Team member not found"}'
|
|
headers: []
|
|
description: ''
|
|
-
|
|
custom: []
|
|
status: 422
|
|
content: '{"message":"Validation failed","errors":{"hourly_rate":["Hourly rate must be greater than 0"]}}'
|
|
headers: []
|
|
description: ''
|
|
responseFields: []
|
|
auth: []
|
|
controller: null
|
|
method: null
|
|
route: null
|
|
-
|
|
custom: []
|
|
httpMethods:
|
|
- DELETE
|
|
uri: 'api/team-members/{id}'
|
|
metadata:
|
|
custom: []
|
|
groupName: 'Team Members'
|
|
groupDescription: |-
|
|
|
|
Endpoints for managing team members.
|
|
subgroup: ''
|
|
subgroupDescription: ''
|
|
title: 'Delete a team member'
|
|
description: 'Delete a team member. Cannot delete if member has allocations or actuals.'
|
|
authenticated: true
|
|
deprecated: false
|
|
headers:
|
|
Content-Type: application/json
|
|
Accept: application/json
|
|
urlParameters:
|
|
id:
|
|
custom: []
|
|
name: id
|
|
description: 'Team member UUID.'
|
|
required: true
|
|
example: 550e8400-e29b-41d4-a716-446655440000
|
|
type: string
|
|
enumValues: []
|
|
exampleWasSpecified: true
|
|
nullable: false
|
|
deprecated: false
|
|
cleanUrlParameters:
|
|
id: 550e8400-e29b-41d4-a716-446655440000
|
|
queryParameters: []
|
|
cleanQueryParameters: []
|
|
bodyParameters: []
|
|
cleanBodyParameters: []
|
|
fileParameters: []
|
|
responses:
|
|
-
|
|
custom: []
|
|
status: 200
|
|
content: '{"message":"Team member deleted successfully"}'
|
|
headers: []
|
|
description: ''
|
|
-
|
|
custom: []
|
|
status: 404
|
|
content: '{"message":"Team member not found"}'
|
|
headers: []
|
|
description: ''
|
|
-
|
|
custom: []
|
|
status: 422
|
|
content: '{"message":"Cannot delete team member with active allocations","suggestion":"Consider deactivating the team member instead"}'
|
|
headers: []
|
|
description: ''
|
|
-
|
|
custom: []
|
|
status: 422
|
|
content: '{"message":"Cannot delete team member with historical data","suggestion":"Consider deactivating the team member instead"}'
|
|
headers: []
|
|
description: ''
|
|
responseFields: []
|
|
auth: []
|
|
controller: null
|
|
method: null
|
|
route: null
|