{ "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" ] } }, "/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/{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" ] } }, "/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": {} } } } }