1824 lines
44 KiB
JSON
1824 lines
44 KiB
JSON
{
|
||
"openapi": "3.0.0",
|
||
"paths": {
|
||
"/": {
|
||
"get": {
|
||
"operationId": "AppController_getHello",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"App"
|
||
]
|
||
}
|
||
},
|
||
"/health": {
|
||
"get": {
|
||
"operationId": "HealthController_check",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Health"
|
||
]
|
||
}
|
||
},
|
||
"/archives/employees": {
|
||
"get": {
|
||
"operationId": "EmployeesArchiveController_findOneArchived",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Archived employee found"
|
||
}
|
||
},
|
||
"summary": "Fetch employee in archives with its Id",
|
||
"tags": [
|
||
"Employee Archives"
|
||
]
|
||
}
|
||
},
|
||
"/archives/expenses": {
|
||
"get": {
|
||
"operationId": "ExpensesArchiveController_findOneArchived",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Archived expense found"
|
||
}
|
||
},
|
||
"summary": "Fetch expense in archives with its Id",
|
||
"tags": [
|
||
"Expense Archives"
|
||
]
|
||
}
|
||
},
|
||
"/archives/shifts": {
|
||
"get": {
|
||
"operationId": "ShiftsArchiveController_findOneArchived",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Archived shift found"
|
||
}
|
||
},
|
||
"summary": "Fetch shift in archives with its Id",
|
||
"tags": [
|
||
"Shift Archives"
|
||
]
|
||
}
|
||
},
|
||
"/archives/timesheets": {
|
||
"get": {
|
||
"operationId": "TimesheetsArchiveController_findOneArchived",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Archived timesheet found"
|
||
}
|
||
},
|
||
"summary": "Fetch timesheet in archives with its Id",
|
||
"tags": [
|
||
"Timesheet Archives"
|
||
]
|
||
}
|
||
},
|
||
"/employees/employee-list": {
|
||
"get": {
|
||
"operationId": "EmployeesController_findListEmployees",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": "List of employees with scoped info found",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/components/schemas/EmployeeListItemDto"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": {
|
||
"description": "List of employees with scoped info not found"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"summary": "Find all employees with scoped info",
|
||
"tags": [
|
||
"Employees"
|
||
]
|
||
}
|
||
},
|
||
"/employees/{email}": {
|
||
"patch": {
|
||
"operationId": "EmployeesController_updateOrArchiveOrRestore",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"description": "Email of the employee",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/UpdateEmployeeDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": "Employee updated or restored",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateEmployeeDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"202": {
|
||
"description": "Employee archived successfully",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateEmployeeDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"404": {
|
||
"description": "Employee not found in active or archive"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
},
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"summary": "Update, archive or restore an employee",
|
||
"tags": [
|
||
"Employees"
|
||
]
|
||
}
|
||
},
|
||
"/employees/profile/{email}": {
|
||
"get": {
|
||
"operationId": "EmployeesController_findOneProfile",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"description": "Identifier of the employee",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Employee profile found",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/EmployeeProfileItemDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": {
|
||
"description": "Employee profile not found"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"summary": "Find employee profile",
|
||
"tags": [
|
||
"Employees"
|
||
]
|
||
}
|
||
},
|
||
"/timesheets": {
|
||
"get": {
|
||
"operationId": "TimesheetsController_getPeriodByQuery",
|
||
"parameters": [
|
||
{
|
||
"name": "year",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
},
|
||
{
|
||
"name": "period_no",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
},
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Timesheets"
|
||
]
|
||
}
|
||
},
|
||
"/timesheets/{email}": {
|
||
"get": {
|
||
"operationId": "TimesheetsController_getByEmail",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "offset",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Timesheets"
|
||
]
|
||
}
|
||
},
|
||
"/timesheets/shifts/{email}": {
|
||
"post": {
|
||
"operationId": "TimesheetsController_createTimesheetShifts",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "offset",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateWeekShiftsDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"201": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Timesheets"
|
||
]
|
||
}
|
||
},
|
||
"/Expenses/upsert/{email}/{date}": {
|
||
"put": {
|
||
"operationId": "ExpensesController_upsert_by_date",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "date",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/UpsertExpenseDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Expenses"
|
||
]
|
||
}
|
||
},
|
||
"/Expenses/list/{email}/{year}/{period_no}": {
|
||
"get": {
|
||
"operationId": "ExpensesController_findExpenseListByPayPeriodAndEmail",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "year",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
},
|
||
{
|
||
"name": "period_no",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Expenses"
|
||
]
|
||
}
|
||
},
|
||
"/shifts/upsert/{email}": {
|
||
"put": {
|
||
"operationId": "ShiftsController_upsert_by_date",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "action",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/UpsertShiftDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Shifts"
|
||
]
|
||
}
|
||
},
|
||
"/shifts/delete/{email}/{date}": {
|
||
"delete": {
|
||
"operationId": "ShiftsController_remove",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "date",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/UpsertShiftDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Shifts"
|
||
]
|
||
}
|
||
},
|
||
"/shifts/approval/{id}": {
|
||
"patch": {
|
||
"operationId": "ShiftsController_approve",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Shifts"
|
||
]
|
||
}
|
||
},
|
||
"/shifts/summary": {
|
||
"get": {
|
||
"operationId": "ShiftsController_getSummary",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Shifts"
|
||
]
|
||
}
|
||
},
|
||
"/shifts/export.csv": {
|
||
"get": {
|
||
"operationId": "ShiftsController_exportCsv",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Shifts"
|
||
]
|
||
}
|
||
},
|
||
"/notifications/summary": {
|
||
"get": {
|
||
"operationId": "NotificationsController_summary",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Notifications"
|
||
]
|
||
}
|
||
},
|
||
"/notifications/stream": {
|
||
"get": {
|
||
"operationId": "NotificationsController_stream",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Notifications"
|
||
]
|
||
}
|
||
},
|
||
"/leave-requests/upsert": {
|
||
"post": {
|
||
"operationId": "LeaveRequestController_upsertLeaveRequest",
|
||
"parameters": [],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/UpsertLeaveRequestDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"201": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"access-token": []
|
||
}
|
||
],
|
||
"tags": [
|
||
"Leave Requests"
|
||
]
|
||
}
|
||
},
|
||
"/auth/v1/login": {
|
||
"get": {
|
||
"operationId": "AuthController_login",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Auth"
|
||
]
|
||
}
|
||
},
|
||
"/auth/callback": {
|
||
"get": {
|
||
"operationId": "AuthController_loginCallback",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Auth"
|
||
]
|
||
}
|
||
},
|
||
"/auth/me": {
|
||
"get": {
|
||
"operationId": "AuthController_getProfile",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Auth"
|
||
]
|
||
}
|
||
},
|
||
"/oauth-sessions": {
|
||
"post": {
|
||
"operationId": "OauthSessionsController_create",
|
||
"parameters": [],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateOauthSessionDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"201": {
|
||
"description": "OAuth session created",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateOauthSessionDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": {
|
||
"description": "Incomplete task or invalid data"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"sessions": []
|
||
}
|
||
],
|
||
"summary": "Create OAuth session",
|
||
"tags": [
|
||
"OAuth Sessions"
|
||
]
|
||
},
|
||
"get": {
|
||
"operationId": "OauthSessionsController_findAll",
|
||
"parameters": [],
|
||
"responses": {
|
||
"201": {
|
||
"description": "List of OAuth session found",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/components/schemas/CreateOauthSessionDto"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": {
|
||
"description": "List of OAuth session not found"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"sessions": []
|
||
}
|
||
],
|
||
"summary": "Find all OAuth session",
|
||
"tags": [
|
||
"OAuth Sessions"
|
||
]
|
||
}
|
||
},
|
||
"/oauth-sessions/{id}": {
|
||
"get": {
|
||
"operationId": "OauthSessionsController_findOne",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"201": {
|
||
"description": "OAuth session found",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateOauthSessionDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": {
|
||
"description": "OAuth session not found"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"sessions": []
|
||
}
|
||
],
|
||
"summary": "Find OAuth session",
|
||
"tags": [
|
||
"OAuth Sessions"
|
||
]
|
||
},
|
||
"patch": {
|
||
"operationId": "OauthSessionsController_update",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/UpdateOauthSessionDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"201": {
|
||
"description": "OAuth session updated",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateOauthSessionDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": {
|
||
"description": "OAuth session not found"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"sessions": []
|
||
}
|
||
],
|
||
"summary": "Update OAuth session",
|
||
"tags": [
|
||
"OAuth Sessions"
|
||
]
|
||
},
|
||
"delete": {
|
||
"operationId": "OauthSessionsController_remove",
|
||
"parameters": [
|
||
{
|
||
"name": "id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"201": {
|
||
"description": "OAuth session deleted",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/CreateOauthSessionDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"400": {
|
||
"description": "OAuth session not found"
|
||
}
|
||
},
|
||
"security": [
|
||
{
|
||
"sessions": []
|
||
}
|
||
],
|
||
"summary": "Delete OAuth session",
|
||
"tags": [
|
||
"OAuth Sessions"
|
||
]
|
||
}
|
||
},
|
||
"/pay-periods/current-and-all": {
|
||
"get": {
|
||
"operationId": "PayPeriodsController_getCurrentAndAll",
|
||
"parameters": [
|
||
{
|
||
"name": "date",
|
||
"required": false,
|
||
"in": "query",
|
||
"description": "Override for resolving the current period",
|
||
"schema": {
|
||
"example": "2025-08-11",
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Find current and all pay periods",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/PayPeriodBundleDto"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"summary": "Return current pay period and the full list",
|
||
"tags": [
|
||
"pay-periods"
|
||
]
|
||
}
|
||
},
|
||
"/pay-periods/date/{date}": {
|
||
"get": {
|
||
"operationId": "PayPeriodsController_findByDate",
|
||
"parameters": [
|
||
{
|
||
"name": "date",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Pay period found for the selected date",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/PayPeriodDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"404": {
|
||
"description": "Pay period not found for the selected date"
|
||
}
|
||
},
|
||
"summary": "Resolve a period by a date within it",
|
||
"tags": [
|
||
"pay-periods"
|
||
]
|
||
}
|
||
},
|
||
"/pay-periods/{year}/{periodNumber}": {
|
||
"get": {
|
||
"operationId": "PayPeriodsController_findOneByYear",
|
||
"parameters": [
|
||
{
|
||
"name": "year",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"example": 2024,
|
||
"type": "number"
|
||
}
|
||
},
|
||
{
|
||
"name": "periodNumber",
|
||
"required": true,
|
||
"in": "path",
|
||
"description": "1..26",
|
||
"schema": {
|
||
"example": 1,
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Pay period found",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/PayPeriodDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"404": {
|
||
"description": "Pay period not found"
|
||
}
|
||
},
|
||
"summary": "Find pay period by year and period number",
|
||
"tags": [
|
||
"pay-periods"
|
||
]
|
||
}
|
||
},
|
||
"/pay-periods/crew/bulk-approval": {
|
||
"patch": {
|
||
"operationId": "PayPeriodsController_bulkApproval",
|
||
"parameters": [],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/BulkCrewApprovalDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": "Pay period approved"
|
||
}
|
||
},
|
||
"summary": "Approve all selected timesheets in the period",
|
||
"tags": [
|
||
"pay-periods"
|
||
]
|
||
}
|
||
},
|
||
"/pay-periods/{year}/{periodNumber}/{email}": {
|
||
"get": {
|
||
"operationId": "PayPeriodsController_getCrewOverview",
|
||
"parameters": [
|
||
{
|
||
"name": "year",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"example": 2024,
|
||
"type": "number"
|
||
}
|
||
},
|
||
{
|
||
"name": "periodNumber",
|
||
"required": true,
|
||
"in": "path",
|
||
"description": "1..26",
|
||
"schema": {
|
||
"example": 1,
|
||
"type": "number"
|
||
}
|
||
},
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "includeSubtree",
|
||
"required": false,
|
||
"in": "query",
|
||
"description": "Include indirect reports",
|
||
"schema": {
|
||
"example": false,
|
||
"type": "boolean"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Crew overview",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/PayPeriodOverviewDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"404": {
|
||
"description": "Pay period not found"
|
||
}
|
||
},
|
||
"summary": "Supervisor crew overview for a given pay period",
|
||
"tags": [
|
||
"pay-periods"
|
||
]
|
||
}
|
||
},
|
||
"/pay-periods/overview/{year}/{periodNumber}": {
|
||
"get": {
|
||
"operationId": "PayPeriodsController_getOverviewByYear",
|
||
"parameters": [
|
||
{
|
||
"name": "year",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"example": 2024,
|
||
"type": "number"
|
||
}
|
||
},
|
||
{
|
||
"name": "periodNumber",
|
||
"required": true,
|
||
"in": "path",
|
||
"description": "1..26",
|
||
"schema": {
|
||
"example": 1,
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": "Pay period overview found",
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/PayPeriodOverviewDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"404": {
|
||
"description": "Pay period not found"
|
||
}
|
||
},
|
||
"summary": "Detailed view of a pay period by year + number",
|
||
"tags": [
|
||
"pay-periods"
|
||
]
|
||
}
|
||
},
|
||
"/preferences/{email}": {
|
||
"patch": {
|
||
"operationId": "PreferencesController_updatePreferences",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/PreferencesDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Preferences"
|
||
]
|
||
}
|
||
},
|
||
"/schedule-presets/{email}": {
|
||
"put": {
|
||
"operationId": "SchedulePresetsController_upsert",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "action",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/SchedulePresetsDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"SchedulePresets"
|
||
]
|
||
},
|
||
"get": {
|
||
"operationId": "SchedulePresetsController_findListByEmail",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"SchedulePresets"
|
||
]
|
||
}
|
||
},
|
||
"/schedule-presets/apply-presets/{email}": {
|
||
"post": {
|
||
"operationId": "SchedulePresetsController_applyPresets",
|
||
"parameters": [
|
||
{
|
||
"name": "email",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "preset",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "start",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"201": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"SchedulePresets"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"info": {
|
||
"title": "Targo_Backend",
|
||
"description": "Documentation de l`API REST pour Targo (NestJS + Prisma)",
|
||
"version": "1.0",
|
||
"contact": {}
|
||
},
|
||
"tags": [
|
||
{
|
||
"name": "Users",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "Employees",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "Customers",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "Timesheets",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "Shifts",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "Leave Requests",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "Shift Codes",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "OAuth Access Tokens",
|
||
"description": ""
|
||
},
|
||
{
|
||
"name": "Authorization",
|
||
"description": ""
|
||
}
|
||
],
|
||
"servers": [],
|
||
"components": {
|
||
"securitySchemes": {
|
||
"access-token": {
|
||
"scheme": "bearer",
|
||
"bearerFormat": "JWT",
|
||
"type": "http",
|
||
"name": "Authorization",
|
||
"description": "Invalid JWT token",
|
||
"in": "header"
|
||
}
|
||
},
|
||
"schemas": {
|
||
"EmployeeListItemDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"UpdateEmployeeDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"id": {
|
||
"type": "number",
|
||
"example": 1,
|
||
"description": "Unique ID of an employee(primary-key, auto-incremented)"
|
||
},
|
||
"user_id": {
|
||
"type": "string",
|
||
"example": "0e6e2e1f-b157-4c7c-ae3f-999b3e4f914d",
|
||
"description": "UUID of the user linked to that employee"
|
||
},
|
||
"first_name": {
|
||
"type": "string",
|
||
"example": "Frodo",
|
||
"description": "Employee`s first name"
|
||
},
|
||
"last_name": {
|
||
"type": "string",
|
||
"example": "Baggins",
|
||
"description": "Employee`s last name"
|
||
},
|
||
"email": {
|
||
"type": "string",
|
||
"example": "i_cant_do_this_sam@targointernet.com",
|
||
"description": "Employee`s email"
|
||
},
|
||
"phone_number": {
|
||
"type": "string",
|
||
"example": "82538437464",
|
||
"description": "Employee`s phone number"
|
||
},
|
||
"residence": {
|
||
"type": "string",
|
||
"example": "1 Bagshot Row, Hobbiton, The Shire, Middle-earth",
|
||
"description": "Employee`s residence"
|
||
},
|
||
"external_payroll_id": {
|
||
"type": "number",
|
||
"example": 7464,
|
||
"description": "external ID for the pay system"
|
||
},
|
||
"company_code": {
|
||
"type": "number",
|
||
"example": 335567447,
|
||
"description": "Employee`s company code"
|
||
},
|
||
"job_title": {
|
||
"type": "string",
|
||
"example": "technicient",
|
||
"description": "employee`s job title"
|
||
},
|
||
"first_work_day": {
|
||
"format": "date-time",
|
||
"type": "string",
|
||
"example": "23/09/3018",
|
||
"description": "New hire date or undefined"
|
||
},
|
||
"last_work_day": {
|
||
"format": "date-time",
|
||
"type": "string",
|
||
"example": "25/03/3019",
|
||
"description": "Termination date (null to restore)"
|
||
},
|
||
"supervisor_id": {
|
||
"type": "number",
|
||
"description": "Supervisor ID"
|
||
}
|
||
}
|
||
},
|
||
"CreateEmployeeDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"id": {
|
||
"type": "number",
|
||
"example": 1,
|
||
"description": "Unique ID of an employee(primary-key, auto-incremented)"
|
||
},
|
||
"user_id": {
|
||
"type": "string",
|
||
"example": "0e6e2e1f-b157-4c7c-ae3f-999b3e4f914d",
|
||
"description": "UUID of the user linked to that employee"
|
||
},
|
||
"first_name": {
|
||
"type": "string",
|
||
"example": "Frodo",
|
||
"description": "Employee`s first name"
|
||
},
|
||
"last_name": {
|
||
"type": "string",
|
||
"example": "Baggins",
|
||
"description": "Employee`s last name"
|
||
},
|
||
"email": {
|
||
"type": "string",
|
||
"example": "i_cant_do_this_sam@targointernet.com",
|
||
"description": "Employee`s email"
|
||
},
|
||
"phone_number": {
|
||
"type": "string",
|
||
"example": "82538437464",
|
||
"description": "Employee`s phone number"
|
||
},
|
||
"residence": {
|
||
"type": "string",
|
||
"example": "1 Bagshot Row, Hobbiton, The Shire, Middle-earth",
|
||
"description": "Employee`s residence"
|
||
},
|
||
"external_payroll_id": {
|
||
"type": "number",
|
||
"example": 7464,
|
||
"description": "external ID for the pay system"
|
||
},
|
||
"company_code": {
|
||
"type": "number",
|
||
"example": 335567447,
|
||
"description": "Employee`s company code"
|
||
},
|
||
"job_title": {
|
||
"type": "string",
|
||
"example": "technicient",
|
||
"description": "employee`s job title"
|
||
},
|
||
"first_work_day": {
|
||
"type": "string",
|
||
"example": "23/09/3018",
|
||
"description": "Employee`s first working day"
|
||
},
|
||
"last_work_day": {
|
||
"type": "string",
|
||
"example": "25/03/3019",
|
||
"description": "Employee`s last working day"
|
||
}
|
||
},
|
||
"required": [
|
||
"id",
|
||
"user_id",
|
||
"first_name",
|
||
"last_name",
|
||
"email",
|
||
"phone_number",
|
||
"external_payroll_id",
|
||
"company_code",
|
||
"job_title",
|
||
"first_work_day"
|
||
]
|
||
},
|
||
"EmployeeProfileItemDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"CreateWeekShiftsDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"UpsertExpenseDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"UpsertShiftDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"UpsertLeaveRequestDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"CreateOauthSessionDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"id": {
|
||
"type": "string",
|
||
"example": "cklwi0vb70000z2z20q6f19qk",
|
||
"description": "Unique ID of an OAuth token (auto-generated)"
|
||
},
|
||
"user_id": {
|
||
"type": "string",
|
||
"example": "S7A2U8R7O6N6",
|
||
"description": "User`s unique identification number"
|
||
},
|
||
"application": {
|
||
"type": "string",
|
||
"example": "app.targo.ca",
|
||
"description": "URL in which the access token is used for"
|
||
},
|
||
"access_token": {
|
||
"type": "string",
|
||
"example": "L5O6R4D3/O6F3#T8H4E3&R6I4N6G4S7 ...",
|
||
"description": "Access token"
|
||
},
|
||
"refresh_token": {
|
||
"type": "string",
|
||
"example": "Th3731102h1p07Th3R1n92",
|
||
"description": "Refresh token"
|
||
},
|
||
"access_token_expiry": {
|
||
"format": "date-time",
|
||
"type": "string",
|
||
"example": "25/12/3018",
|
||
"description": "Access token`s expiry date"
|
||
},
|
||
"refresh_token_expiry": {
|
||
"format": "date-time",
|
||
"type": "string",
|
||
"example": "26/02/3019",
|
||
"description": "Refresh token`s expiry date"
|
||
},
|
||
"scopes": {
|
||
"example": "access tolkiens, email, etc... ",
|
||
"description": "scopes of infos linked to the access token",
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
},
|
||
"required": [
|
||
"id",
|
||
"user_id",
|
||
"application",
|
||
"access_token",
|
||
"refresh_token",
|
||
"access_token_expiry"
|
||
]
|
||
},
|
||
"UpdateOauthSessionDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"id": {
|
||
"type": "string",
|
||
"example": "cklwi0vb70000z2z20q6f19qk",
|
||
"description": "Unique ID of an OAuth token (auto-generated)"
|
||
},
|
||
"user_id": {
|
||
"type": "string",
|
||
"example": "S7A2U8R7O6N6",
|
||
"description": "User`s unique identification number"
|
||
},
|
||
"application": {
|
||
"type": "string",
|
||
"example": "app.targo.ca",
|
||
"description": "URL in which the access token is used for"
|
||
},
|
||
"access_token": {
|
||
"type": "string",
|
||
"example": "L5O6R4D3/O6F3#T8H4E3&R6I4N6G4S7 ...",
|
||
"description": "Access token"
|
||
},
|
||
"refresh_token": {
|
||
"type": "string",
|
||
"example": "Th3731102h1p07Th3R1n92",
|
||
"description": "Refresh token"
|
||
},
|
||
"access_token_expiry": {
|
||
"format": "date-time",
|
||
"type": "string",
|
||
"example": "25/12/3018",
|
||
"description": "Access token`s expiry date"
|
||
},
|
||
"refresh_token_expiry": {
|
||
"format": "date-time",
|
||
"type": "string",
|
||
"example": "26/02/3019",
|
||
"description": "Refresh token`s expiry date"
|
||
},
|
||
"scopes": {
|
||
"example": "access tolkiens, email, etc... ",
|
||
"description": "scopes of infos linked to the access token",
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"PayPeriodDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"pay_period_no": {
|
||
"type": "number",
|
||
"example": 1,
|
||
"description": "numéro cyclique de la période entre 1 et 26"
|
||
},
|
||
"period_start": {
|
||
"type": "string",
|
||
"example": "2023-12-17",
|
||
"format": "date"
|
||
},
|
||
"period_end": {
|
||
"type": "string",
|
||
"example": "2023-12-30",
|
||
"format": "date"
|
||
},
|
||
"payday": {
|
||
"type": "string",
|
||
"example": "2023-01-04",
|
||
"format": "date"
|
||
},
|
||
"pay_year": {
|
||
"type": "number",
|
||
"example": 2023
|
||
},
|
||
"label": {
|
||
"type": "string",
|
||
"example": "2023-12-17 → 2023-12-30"
|
||
}
|
||
},
|
||
"required": [
|
||
"pay_period_no",
|
||
"period_start",
|
||
"period_end",
|
||
"payday",
|
||
"pay_year",
|
||
"label"
|
||
]
|
||
},
|
||
"PayPeriodBundleDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"current": {
|
||
"description": "Current pay period (resolved from date)",
|
||
"allOf": [
|
||
{
|
||
"$ref": "#/components/schemas/PayPeriodDto"
|
||
}
|
||
]
|
||
},
|
||
"periods": {
|
||
"description": "All pay periods",
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/components/schemas/PayPeriodDto"
|
||
}
|
||
}
|
||
},
|
||
"required": [
|
||
"current",
|
||
"periods"
|
||
]
|
||
},
|
||
"BulkCrewApprovalDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"EmployeePeriodOverviewDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"employee_name": {
|
||
"type": "string",
|
||
"example": "Alex Dupont",
|
||
"description": "Nom complet de lemployé"
|
||
},
|
||
"regular_hours": {
|
||
"type": "number",
|
||
"example": 40,
|
||
"description": "pay-period`s regular hours"
|
||
},
|
||
"other_hours": {
|
||
"type": "object",
|
||
"example": 0,
|
||
"description": "pay-period`s other hours"
|
||
},
|
||
"expenses": {
|
||
"type": "number",
|
||
"example": 420.69,
|
||
"description": "pay-period`s total expenses ($)"
|
||
},
|
||
"mileage": {
|
||
"type": "number",
|
||
"example": 40,
|
||
"description": "pay-period total mileages (km)"
|
||
},
|
||
"is_approved": {
|
||
"type": "boolean",
|
||
"example": true,
|
||
"description": "Tous les timesheets de la période sont approuvés pour cet employé"
|
||
}
|
||
},
|
||
"required": [
|
||
"employee_name",
|
||
"regular_hours",
|
||
"other_hours",
|
||
"expenses",
|
||
"mileage",
|
||
"is_approved"
|
||
]
|
||
},
|
||
"PayPeriodOverviewDto": {
|
||
"type": "object",
|
||
"properties": {
|
||
"pay_period_no": {
|
||
"type": "number",
|
||
"example": 1,
|
||
"description": "Period number (1–26)"
|
||
},
|
||
"pay_year": {
|
||
"type": "number",
|
||
"example": 2023,
|
||
"description": "Calendar year of the period"
|
||
},
|
||
"period_start": {
|
||
"type": "string",
|
||
"example": "2023-12-17",
|
||
"format": "date",
|
||
"description": "Period start date (YYYY-MM-DD)"
|
||
},
|
||
"period_end": {
|
||
"type": "string",
|
||
"example": "2023-12-30",
|
||
"format": "date",
|
||
"description": "Period end date (YYYY-MM-DD)"
|
||
},
|
||
"payday": {
|
||
"type": "string",
|
||
"example": "2023-12-30",
|
||
"format": "date",
|
||
"description": "Period pay day(YYYY-MM-DD)"
|
||
},
|
||
"label": {
|
||
"type": "string",
|
||
"example": "2023-12-17 → 2023-12-30",
|
||
"description": "Human-readable label"
|
||
},
|
||
"employees_overview": {
|
||
"description": "Per-employee overview for the period",
|
||
"type": "array",
|
||
"items": {
|
||
"$ref": "#/components/schemas/EmployeePeriodOverviewDto"
|
||
}
|
||
}
|
||
},
|
||
"required": [
|
||
"pay_period_no",
|
||
"pay_year",
|
||
"period_start",
|
||
"period_end",
|
||
"payday",
|
||
"label",
|
||
"employees_overview"
|
||
]
|
||
},
|
||
"PreferencesDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
},
|
||
"SchedulePresetsDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
}
|
||
}
|
||
}
|
||
} |