858 lines
20 KiB
JSON
858 lines
20 KiB
JSON
{
|
||
"openapi": "3.0.0",
|
||
"paths": {
|
||
"/health": {
|
||
"get": {
|
||
"operationId": "HealthController_check",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Health"
|
||
]
|
||
}
|
||
},
|
||
"/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"
|
||
]
|
||
}
|
||
},
|
||
"/notifications/summary": {
|
||
"get": {
|
||
"operationId": "NotificationsController_summary",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Notifications"
|
||
]
|
||
}
|
||
},
|
||
"/notifications/stream": {
|
||
"get": {
|
||
"operationId": "NotificationsController_stream",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Notifications"
|
||
]
|
||
}
|
||
},
|
||
"/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/{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": {
|
||
"patch": {
|
||
"operationId": "PreferencesController_updatePreferences",
|
||
"parameters": [
|
||
{
|
||
"name": "PreferencesDto",
|
||
"required": true,
|
||
"in": "body",
|
||
"schema": {
|
||
"$ref": "#/components/schemas/PreferencesDto"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Preferences"
|
||
]
|
||
}
|
||
},
|
||
"/timesheets": {
|
||
"get": {
|
||
"operationId": "TimesheetController_getTimesheetByIds",
|
||
"parameters": [
|
||
{
|
||
"name": "employee_email",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "year",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
},
|
||
{
|
||
"name": "period_number",
|
||
"required": true,
|
||
"in": "query",
|
||
"schema": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Timesheet"
|
||
]
|
||
}
|
||
},
|
||
"/shift/{timesheet_id}": {
|
||
"post": {
|
||
"operationId": "ShiftController_createBatch",
|
||
"parameters": [
|
||
{
|
||
"name": "timesheet_id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"type": "array",
|
||
"items": {
|
||
"type": "string"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"201": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Shift"
|
||
]
|
||
}
|
||
},
|
||
"/shift": {
|
||
"patch": {
|
||
"operationId": "ShiftController_updateBatch",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Shift"
|
||
]
|
||
}
|
||
},
|
||
"/shift/{shift_id}": {
|
||
"delete": {
|
||
"operationId": "ShiftController_remove",
|
||
"parameters": [
|
||
{
|
||
"name": "shift_id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Shift"
|
||
]
|
||
}
|
||
},
|
||
"/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"
|
||
]
|
||
}
|
||
},
|
||
"/expense/{timesheet_id}": {
|
||
"post": {
|
||
"operationId": "ExpenseController_create",
|
||
"parameters": [
|
||
{
|
||
"name": "timesheet_id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"requestBody": {
|
||
"required": true,
|
||
"content": {
|
||
"application/json": {
|
||
"schema": {
|
||
"$ref": "#/components/schemas/ExpenseDto"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"responses": {
|
||
"201": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Expense"
|
||
]
|
||
}
|
||
},
|
||
"/expense": {
|
||
"patch": {
|
||
"operationId": "ExpenseController_update",
|
||
"parameters": [],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Expense"
|
||
]
|
||
}
|
||
},
|
||
"/expense/{expense_id}": {
|
||
"delete": {
|
||
"operationId": "ExpenseController_remove",
|
||
"parameters": [
|
||
{
|
||
"name": "expense_id",
|
||
"required": true,
|
||
"in": "path",
|
||
"schema": {
|
||
"type": "number"
|
||
}
|
||
}
|
||
],
|
||
"responses": {
|
||
"200": {
|
||
"description": ""
|
||
}
|
||
},
|
||
"tags": [
|
||
"Expense"
|
||
]
|
||
}
|
||
}
|
||
},
|
||
"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": {
|
||
"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"
|
||
]
|
||
},
|
||
"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": {}
|
||
},
|
||
"ExpenseDto": {
|
||
"type": "object",
|
||
"properties": {}
|
||
}
|
||
}
|
||
}
|
||
} |