3065 lines
78 KiB
YAML
3065 lines
78 KiB
YAML
openapi: 3.0.3
|
|
info:
|
|
title: Copenhagen Truck Wash API
|
|
description: |
|
|
This API provides access to the Copenhagen Truck Wash system, managing orders, bookings,
|
|
departments, products, customers, and various integrations including e-conomic, Stripe,
|
|
XLVask, and more.
|
|
|
|
## Authentication
|
|
Most endpoints require authentication using a Bearer token obtained from the `/auth/login`
|
|
or `/auth/employee/login` endpoints.
|
|
|
|
## Permissions
|
|
Many endpoints require specific permissions that are assigned to user groups/roles.
|
|
version: 1.0.0
|
|
contact:
|
|
name: Copenhagen Truck Wash
|
|
email: support@truckwash.dk
|
|
servers:
|
|
- url: https://api.truckwash.dk
|
|
description: Production server
|
|
- url: http://localhost
|
|
description: Local development server
|
|
|
|
security:
|
|
- BearerAuth: []
|
|
|
|
tags:
|
|
- name: Authentication
|
|
description: User and employee authentication endpoints
|
|
- name: Users
|
|
description: User management and customer operations
|
|
- name: Orders
|
|
description: Order creation, management, and retrieval
|
|
- name: Order Items
|
|
description: Managing items within orders
|
|
- name: Bookings
|
|
description: Booking management for wash services
|
|
- name: Departments
|
|
description: Department and location management
|
|
- name: Products
|
|
description: Product catalog and pricing
|
|
- name: Categories
|
|
description: Product category management
|
|
- name: Invoices
|
|
description: Invoice generation and management
|
|
- name: Payments
|
|
description: Payment processing and collection
|
|
- name: Vehicles
|
|
description: Vehicle registration and management
|
|
- name: Notifications
|
|
description: System notifications and alerts
|
|
- name: Statistics
|
|
description: Business analytics and reporting
|
|
- name: Modules
|
|
description: Third-party integrations and modules
|
|
- name: Attachments
|
|
description: File upload and attachment management
|
|
- name: Forms
|
|
description: Form submissions and management
|
|
- name: Worker
|
|
description: System worker status and maintenance
|
|
- name: Plate Scans
|
|
description: License plate scanning operations
|
|
- name: Config
|
|
description: Module configuration management
|
|
- name: Branding
|
|
description: Branding options management
|
|
|
|
paths:
|
|
# Authentication Endpoints
|
|
/auth/login:
|
|
post:
|
|
tags:
|
|
- Authentication
|
|
summary: Customer login
|
|
description: Authenticate a customer using customer number and password
|
|
operationId: customerLogin
|
|
security: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- customer_number
|
|
- password
|
|
properties:
|
|
customer_number:
|
|
type: integer
|
|
description: Customer's e-conomic customer number
|
|
example: 12345
|
|
password:
|
|
type: string
|
|
format: password
|
|
description: Customer password
|
|
minLength: 1
|
|
responses:
|
|
'200':
|
|
description: Login successful
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
token:
|
|
type: string
|
|
description: Bearer authentication token
|
|
example: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
|
|
/auth/employee/login:
|
|
post:
|
|
tags:
|
|
- Authentication
|
|
summary: Employee login
|
|
description: Authenticate an employee using user ID and password
|
|
operationId: employeeLogin
|
|
security: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- user_id
|
|
- password
|
|
properties:
|
|
user_id:
|
|
type: integer
|
|
description: Employee user ID
|
|
example: 1
|
|
password:
|
|
type: string
|
|
format: password
|
|
description: Employee password
|
|
responses:
|
|
'200':
|
|
description: Login successful
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
token:
|
|
type: string
|
|
description: Bearer authentication token
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
|
|
/auth/logout:
|
|
get:
|
|
tags:
|
|
- Authentication
|
|
summary: Logout
|
|
description: Invalidate the current authentication token
|
|
operationId: logout
|
|
responses:
|
|
'200':
|
|
description: Logout successful
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
message:
|
|
type: string
|
|
example: "Logged out"
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
|
|
/auth/session:
|
|
get:
|
|
tags:
|
|
- Authentication
|
|
summary: Get current session
|
|
description: Retrieve information about the current authenticated user session
|
|
operationId: getSession
|
|
responses:
|
|
'200':
|
|
description: Session information retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/User'
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
|
|
/auth/reCAPTCHA/public:
|
|
get:
|
|
tags:
|
|
- Authentication
|
|
summary: Get reCAPTCHA configuration
|
|
description: Retrieve public reCAPTCHA configuration for login forms
|
|
operationId: getRecaptchaConfig
|
|
security: []
|
|
responses:
|
|
'200':
|
|
description: reCAPTCHA configuration retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
rate_limit:
|
|
type: object
|
|
properties:
|
|
enabled:
|
|
type: boolean
|
|
limit:
|
|
type: integer
|
|
remaining:
|
|
type: integer
|
|
reset:
|
|
type: integer
|
|
warning:
|
|
type: string
|
|
nullable: true
|
|
recaptcha:
|
|
type: object
|
|
|
|
/auth/register/cvr:
|
|
post:
|
|
tags:
|
|
- Authentication
|
|
summary: Register new customer by CVR
|
|
description: Register a new customer account using Danish CVR number
|
|
operationId: registerCustomerByCvr
|
|
security: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- cvr
|
|
- companyPhone
|
|
- invoiceEmail
|
|
- contactEmail
|
|
- contactPhone
|
|
properties:
|
|
cvr:
|
|
type: string
|
|
description: Danish CVR number
|
|
minLength: 8
|
|
maxLength: 20
|
|
example: "44794780"
|
|
companyPhone:
|
|
type: integer
|
|
description: Company phone number
|
|
minimum: 10000000
|
|
maximum: 9999999999
|
|
example: 21754690
|
|
invoiceEmail:
|
|
type: string
|
|
format: email
|
|
description: Email for invoices
|
|
minLength: 5
|
|
maxLength: 255
|
|
example: "invoice@company.dk"
|
|
contactEmail:
|
|
type: string
|
|
format: email
|
|
description: Contact email
|
|
minLength: 5
|
|
maxLength: 255
|
|
example: "contact@company.dk"
|
|
contactPhone:
|
|
type: integer
|
|
description: Contact phone number
|
|
minimum: 10000000
|
|
maximum: 9999999999
|
|
example: 21754690
|
|
responses:
|
|
'201':
|
|
description: Customer registered successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
|
|
# User Endpoints
|
|
/users:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: List users
|
|
description: Retrieve a paginated list of users
|
|
operationId: listUsers
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
- $ref: '#/components/parameters/SearchParam'
|
|
responses:
|
|
'200':
|
|
description: Users retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/User'
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
post:
|
|
tags:
|
|
- Users
|
|
summary: Create new user
|
|
description: Create a new user account
|
|
operationId: createUser
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserCreate'
|
|
responses:
|
|
'201':
|
|
description: User created successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/User'
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
put:
|
|
tags:
|
|
- Users
|
|
summary: Update user
|
|
description: Update an existing user
|
|
operationId: updateUser
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/UserUpdate'
|
|
responses:
|
|
'200':
|
|
description: User updated successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
|
|
/users/customer:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: Get customer details
|
|
description: Get details about a specific customer
|
|
operationId: getCustomer
|
|
parameters:
|
|
- name: customer_number
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Customer retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/User'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
|
|
/superuser/user:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: Get user by ID (superuser)
|
|
description: Get detailed user information by user ID
|
|
operationId: getSuperuserUser
|
|
parameters:
|
|
- name: user_id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: User retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/User'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
|
|
/admin/customer/getUserId:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: Get user ID from customer number
|
|
description: Convert e-conomic customer number to internal user ID
|
|
operationId: getUserIdFromCustomerNumber
|
|
parameters:
|
|
- name: customer_number
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: User ID retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
user_id:
|
|
type: integer
|
|
|
|
/admin/customer/name:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: Get customer name
|
|
description: Get the full name of a customer
|
|
operationId: getCustomerName
|
|
parameters:
|
|
- name: user_id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Customer name retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
|
|
# Orders Endpoints
|
|
/orders:
|
|
get:
|
|
tags:
|
|
- Orders
|
|
summary: List orders
|
|
description: Retrieve a paginated list of orders
|
|
operationId: listOrders
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
- $ref: '#/components/parameters/SearchParam'
|
|
- name: show_wash_subscription
|
|
in: query
|
|
schema:
|
|
type: string
|
|
enum: [true, false]
|
|
responses:
|
|
'200':
|
|
description: Orders retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Order'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
post:
|
|
tags:
|
|
- Orders
|
|
summary: Create new order
|
|
description: Create a new wash order
|
|
operationId: createOrder
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OrderCreate'
|
|
responses:
|
|
'201':
|
|
description: Order created successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Order'
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
delete:
|
|
tags:
|
|
- Orders
|
|
summary: Delete order
|
|
description: Delete an existing order
|
|
operationId: deleteOrder
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Order deleted successfully
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
|
|
/order:
|
|
get:
|
|
tags:
|
|
- Orders
|
|
summary: Get order details
|
|
description: Get detailed information about a specific order
|
|
operationId: getOrder
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Order retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Order'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
put:
|
|
tags:
|
|
- Orders
|
|
summary: Update order
|
|
description: Update an existing order
|
|
operationId: updateOrder
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OrderUpdate'
|
|
responses:
|
|
'200':
|
|
description: Order updated successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
|
|
/user/orders:
|
|
get:
|
|
tags:
|
|
- Orders
|
|
summary: Get current user's orders
|
|
description: Retrieve orders for the authenticated user
|
|
operationId: getUserOrders
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Orders retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Order'
|
|
|
|
/user/order:
|
|
get:
|
|
tags:
|
|
- Orders
|
|
summary: Get user's specific order
|
|
description: Get details of a specific order for the authenticated user
|
|
operationId: getUserOrder
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Order retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Order'
|
|
|
|
/orders/mark_as_completed:
|
|
post:
|
|
tags:
|
|
- Orders
|
|
summary: Mark order as completed
|
|
description: Mark an order as completed
|
|
operationId: markOrderCompleted
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Order marked as completed successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
|
|
/order/wash-certificate:
|
|
post:
|
|
tags:
|
|
- Orders
|
|
summary: Generate wash certificate
|
|
description: Generate a wash certificate for an order
|
|
operationId: generateWashCertificate
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
order_id:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Wash certificate generated successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
|
|
# Order Items Endpoints
|
|
/order/items:
|
|
get:
|
|
tags:
|
|
- Order Items
|
|
summary: List order items
|
|
description: Get all items for a specific order
|
|
operationId: listOrderItems
|
|
parameters:
|
|
- name: order_id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Order items retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/OrderItem'
|
|
post:
|
|
tags:
|
|
- Order Items
|
|
summary: Add item to order
|
|
description: Add a new item to an existing order
|
|
operationId: addOrderItem
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OrderItemCreate'
|
|
responses:
|
|
'201':
|
|
description: Order item added successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
put:
|
|
tags:
|
|
- Order Items
|
|
summary: Update order item
|
|
description: Update an existing order item
|
|
operationId: updateOrderItem
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OrderItemUpdate'
|
|
responses:
|
|
'200':
|
|
description: Order item updated successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
delete:
|
|
tags:
|
|
- Order Items
|
|
summary: Delete order item
|
|
description: Remove an item from an order
|
|
operationId: deleteOrderItem
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Order item deleted successfully
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
|
|
# Departments Endpoints
|
|
/departments:
|
|
get:
|
|
tags:
|
|
- Departments
|
|
summary: List departments
|
|
description: Retrieve a list of all visible departments
|
|
operationId: listDepartments
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
description: Filter by specific department ID
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
- $ref: '#/components/parameters/SearchParam'
|
|
responses:
|
|
'200':
|
|
description: Departments retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Department'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
post:
|
|
tags:
|
|
- Departments
|
|
summary: Create department
|
|
description: Create a new department
|
|
operationId: createDepartment
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DepartmentCreate'
|
|
responses:
|
|
'201':
|
|
description: Department created successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
put:
|
|
tags:
|
|
- Departments
|
|
summary: Update department
|
|
description: Update an existing department
|
|
operationId: updateDepartment
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DepartmentUpdate'
|
|
responses:
|
|
'200':
|
|
description: Department updated successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
|
|
/departments/categories:
|
|
get:
|
|
tags:
|
|
- Departments
|
|
summary: Get department categories
|
|
description: Get product categories available in a department
|
|
operationId: getDepartmentCategories
|
|
parameters:
|
|
- name: department_id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Department categories retrieved successfully
|
|
post:
|
|
tags:
|
|
- Departments
|
|
summary: Add category to department
|
|
description: Associate a product category with a department
|
|
operationId: addDepartmentCategory
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
department_id:
|
|
type: integer
|
|
category_id:
|
|
type: integer
|
|
responses:
|
|
'201':
|
|
description: Category added to department successfully
|
|
|
|
/department/lanes:
|
|
get:
|
|
tags:
|
|
- Departments
|
|
summary: List department lanes
|
|
description: Retrieve a list of all department lanes
|
|
operationId: listDepartmentLanes
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
- $ref: '#/components/parameters/SearchParam'
|
|
responses:
|
|
'200':
|
|
description: Department lanes retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/DepartmentLane'
|
|
'401':
|
|
$ref: '#/components/responses/Unauthorized'
|
|
post:
|
|
tags:
|
|
- Departments
|
|
summary: Create department lane
|
|
description: Create a new department lane
|
|
operationId: createDepartmentLane
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DepartmentLaneCreate'
|
|
responses:
|
|
'201':
|
|
description: Department lane created successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
put:
|
|
tags:
|
|
- Departments
|
|
summary: Update department lane
|
|
description: Update an existing department lane
|
|
operationId: updateDepartmentLane
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/DepartmentLaneUpdate'
|
|
responses:
|
|
'200':
|
|
description: Department lane updated successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
|
|
/guest/validation/customer-number:
|
|
post:
|
|
tags:
|
|
- Users
|
|
summary: Validate customer number
|
|
description: Check if a customer number is valid and exists
|
|
operationId: validateCustomerNumber
|
|
security: []
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- customer_number
|
|
properties:
|
|
customer_number:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Customer number validation successful
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
|
|
/guest/departments:
|
|
get:
|
|
tags:
|
|
- Departments
|
|
summary: List public departments
|
|
description: Get list of departments without authentication
|
|
operationId: listGuestDepartments
|
|
security: []
|
|
responses:
|
|
'200':
|
|
description: Departments retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Department'
|
|
|
|
# Products Endpoints
|
|
/products:
|
|
get:
|
|
tags:
|
|
- Products
|
|
summary: List products
|
|
description: Retrieve a list of products with optional filters for customer pricing and department
|
|
operationId: listProducts
|
|
parameters:
|
|
- name: customer_id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
description: Customer ID for custom pricing
|
|
- name: department_id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
description: Department ID for department-specific pricing
|
|
- name: category
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
description: Filter by category ID
|
|
- name: id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
description: Get specific product by ID
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Products retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Product'
|
|
post:
|
|
tags:
|
|
- Products
|
|
summary: Create product
|
|
description: Create a new product
|
|
operationId: createProduct
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ProductCreate'
|
|
responses:
|
|
'201':
|
|
description: Product created successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
put:
|
|
tags:
|
|
- Products
|
|
summary: Update product
|
|
description: Update an existing product
|
|
operationId: updateProduct
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ProductUpdate'
|
|
responses:
|
|
'200':
|
|
description: Product updated successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
|
|
# Categories Endpoints
|
|
/categories:
|
|
get:
|
|
tags:
|
|
- Categories
|
|
summary: List categories
|
|
description: Retrieve a list of product categories
|
|
operationId: listCategories
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Categories retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Category'
|
|
post:
|
|
tags:
|
|
- Categories
|
|
summary: Create category
|
|
description: Create a new product category
|
|
operationId: createCategory
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CategoryCreate'
|
|
responses:
|
|
'201':
|
|
description: Category created successfully
|
|
put:
|
|
tags:
|
|
- Categories
|
|
summary: Update category
|
|
description: Update an existing category
|
|
operationId: updateCategory
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CategoryUpdate'
|
|
responses:
|
|
'200':
|
|
description: Category updated successfully
|
|
|
|
# Bookings Endpoints
|
|
/bookings:
|
|
get:
|
|
tags:
|
|
- Bookings
|
|
summary: List bookings
|
|
description: Retrieve a list of bookings
|
|
operationId: listBookings
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Bookings retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Booking'
|
|
put:
|
|
tags:
|
|
- Bookings
|
|
summary: Update booking
|
|
description: Update an existing booking
|
|
operationId: updateBooking
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/BookingUpdate'
|
|
responses:
|
|
'200':
|
|
description: Booking updated successfully
|
|
|
|
/user/bookings:
|
|
get:
|
|
tags:
|
|
- Bookings
|
|
summary: Get user bookings
|
|
description: Retrieve bookings for the authenticated user
|
|
operationId: getUserBookings
|
|
responses:
|
|
'200':
|
|
description: User bookings retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Booking'
|
|
|
|
# Invoices Endpoints
|
|
/invoices/draft:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: List draft invoices
|
|
description: Retrieve a list of draft invoices
|
|
operationId: listDraftInvoices
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Draft invoices retrieved successfully
|
|
|
|
/invoices/draft/close:
|
|
post:
|
|
tags:
|
|
- Invoices
|
|
summary: Close draft invoice
|
|
description: Close a draft invoice
|
|
operationId: closeDraftInvoice
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Draft invoice closed successfully
|
|
|
|
/invoices/pdf:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: Get invoice PDF
|
|
description: Download an invoice as PDF
|
|
operationId: getInvoicePdf
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: PDF retrieved successfully
|
|
content:
|
|
application/pdf:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
|
|
/user/invoices:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: Get user invoices
|
|
description: Retrieve invoices for the authenticated user
|
|
operationId: getUserInvoices
|
|
responses:
|
|
'200':
|
|
description: User invoices retrieved successfully
|
|
|
|
/collected-invoices:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: List collected invoices
|
|
description: Get list of collected invoices
|
|
operationId: listCollectedInvoices
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Collected invoices retrieved successfully
|
|
post:
|
|
tags:
|
|
- Invoices
|
|
summary: Create collected invoice
|
|
description: Create a new collected invoice
|
|
operationId: createCollectedInvoice
|
|
responses:
|
|
'201':
|
|
description: Collected invoice created successfully
|
|
put:
|
|
tags:
|
|
- Invoices
|
|
summary: Update collected invoice
|
|
description: Update a collected invoice
|
|
operationId: updateCollectedInvoice
|
|
responses:
|
|
'200':
|
|
description: Collected invoice updated successfully
|
|
|
|
/collected-invoices/ready-to-invoice:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: Get invoices ready to process
|
|
description: Get collected invoices that are ready to be processed
|
|
operationId: getReadyToInvoice
|
|
responses:
|
|
'200':
|
|
description: Ready invoices retrieved successfully
|
|
|
|
/superuser/invoicing/period:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: Get invoicing periods
|
|
description: Retrieve invoicing periods for superusers
|
|
operationId: getInvoicingPeriods
|
|
responses:
|
|
'200':
|
|
description: Invoicing periods retrieved successfully
|
|
|
|
/superuser/invoicing/period/distribution/fixed-pricing:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: Get fixed pricing distribution
|
|
description: Get invoicing distribution for fixed pricing items
|
|
operationId: getInvoicingFixedPricingDistribution
|
|
responses:
|
|
'200':
|
|
description: Fixed pricing distribution retrieved successfully
|
|
|
|
/superuser/invoicing/period/distribution/wash-subscriptions:
|
|
get:
|
|
tags:
|
|
- Invoices
|
|
summary: Get wash subscriptions distribution
|
|
description: Get invoicing distribution for wash subscriptions
|
|
operationId: getInvoicingWashSubscriptionsDistribution
|
|
responses:
|
|
'200':
|
|
description: Wash subscriptions distribution retrieved successfully
|
|
|
|
# Vehicles Endpoints
|
|
/vehicles:
|
|
get:
|
|
tags:
|
|
- Vehicles
|
|
summary: List vehicles
|
|
description: Get list of vehicles
|
|
operationId: listVehicles
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Vehicles retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Vehicle'
|
|
|
|
/vehicles/addons/available:
|
|
get:
|
|
tags:
|
|
- Vehicles
|
|
summary: Get available vehicle addons
|
|
description: Get list of available addons for a vehicle
|
|
operationId: getAvailableVehicleAddons
|
|
parameters:
|
|
- name: vehicle_id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Available addons retrieved successfully
|
|
|
|
/vehicles/addons/toggle:
|
|
post:
|
|
tags:
|
|
- Vehicles
|
|
summary: Toggle vehicle addon
|
|
description: Enable or disable a vehicle addon
|
|
operationId: toggleVehicleAddon
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
vehicle_id:
|
|
type: integer
|
|
addon_id:
|
|
type: integer
|
|
enabled:
|
|
type: boolean
|
|
responses:
|
|
'200':
|
|
description: Vehicle addon toggled successfully
|
|
|
|
# Notifications Endpoints
|
|
/notifications:
|
|
get:
|
|
tags:
|
|
- Notifications
|
|
summary: List notifications
|
|
description: Get list of notifications
|
|
operationId: listNotifications
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Notifications retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Notification'
|
|
post:
|
|
tags:
|
|
- Notifications
|
|
summary: Create notification
|
|
description: Create a new notification
|
|
operationId: createNotification
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/NotificationCreate'
|
|
responses:
|
|
'201':
|
|
description: Notification created successfully
|
|
delete:
|
|
tags:
|
|
- Notifications
|
|
summary: Delete notification
|
|
description: Delete a notification
|
|
operationId: deleteNotification
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Notification deleted successfully
|
|
|
|
# Statistics Endpoints
|
|
/statistics/bookings/new:
|
|
get:
|
|
tags:
|
|
- Statistics
|
|
summary: Get new bookings statistics
|
|
description: Get statistics for new bookings
|
|
operationId: getNewBookingsStats
|
|
responses:
|
|
'200':
|
|
description: New bookings statistics retrieved successfully
|
|
|
|
/statistics/orders/new:
|
|
get:
|
|
tags:
|
|
- Statistics
|
|
summary: Get new orders statistics
|
|
description: Get statistics for new orders
|
|
operationId: getNewOrdersStats
|
|
responses:
|
|
'200':
|
|
description: New orders statistics retrieved successfully
|
|
|
|
/statistics/income/today:
|
|
get:
|
|
tags:
|
|
- Statistics
|
|
summary: Get today's income
|
|
description: Get income statistics for today
|
|
operationId: getTodayIncome
|
|
responses:
|
|
'200':
|
|
description: Today's income statistics retrieved successfully
|
|
|
|
/statistics/income/yesterday:
|
|
get:
|
|
tags:
|
|
- Statistics
|
|
summary: Get yesterday's income
|
|
description: Get income statistics for yesterday
|
|
operationId: getYesterdayIncome
|
|
responses:
|
|
'200':
|
|
description: Yesterday's income statistics retrieved successfully
|
|
|
|
/statistics/income/this-month:
|
|
get:
|
|
tags:
|
|
- Statistics
|
|
summary: Get this month's income
|
|
description: Get income statistics for the current month
|
|
operationId: getThisMonthIncome
|
|
responses:
|
|
'200':
|
|
description: This month's income statistics retrieved successfully
|
|
|
|
/statistics/income/last-month:
|
|
get:
|
|
tags:
|
|
- Statistics
|
|
summary: Get last month's income
|
|
description: Get income statistics for the previous month
|
|
operationId: getLastMonthIncome
|
|
responses:
|
|
'200':
|
|
description: Last month's income statistics retrieved successfully
|
|
|
|
/statistics/income/this-year:
|
|
get:
|
|
tags:
|
|
- Statistics
|
|
summary: Get this year's income
|
|
description: Get income statistics for the current year
|
|
operationId: getThisYearIncome
|
|
responses:
|
|
'200':
|
|
description: This year's income statistics retrieved successfully
|
|
|
|
# Worker Endpoints
|
|
/worker/version:
|
|
get:
|
|
tags:
|
|
- Worker
|
|
summary: Get worker version
|
|
description: Get the current version of the system worker
|
|
operationId: getWorkerVersion
|
|
responses:
|
|
'200':
|
|
description: Worker version retrieved successfully
|
|
|
|
/worker/update-version:
|
|
get:
|
|
tags:
|
|
- Worker
|
|
summary: Update worker version
|
|
description: Set the target version for the worker update
|
|
operationId: updateWorkerVersion
|
|
parameters:
|
|
- name: version
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Version update target set successfully
|
|
|
|
/worker/status:
|
|
get:
|
|
tags:
|
|
- Worker
|
|
summary: Get worker status
|
|
description: Get detailed status of the system worker
|
|
operationId: getWorkerStatus
|
|
responses:
|
|
'200':
|
|
description: Worker status retrieved successfully
|
|
|
|
/worker/debug:
|
|
get:
|
|
tags:
|
|
- Worker
|
|
summary: Debug worker
|
|
description: Execute debug commands on the worker (often restricted)
|
|
operationId: debugWorker
|
|
responses:
|
|
'200':
|
|
description: Debug information retrieved successfully
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
|
|
/worker/debug/on:
|
|
get:
|
|
tags:
|
|
- Worker
|
|
summary: Enable worker debug
|
|
operationId: enableWorkerDebug
|
|
responses:
|
|
'200':
|
|
description: Worker debug enabled
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
|
|
/worker/debug/off:
|
|
get:
|
|
tags:
|
|
- Worker
|
|
summary: Disable worker debug
|
|
operationId: disableWorkerDebug
|
|
responses:
|
|
'200':
|
|
description: Worker debug disabled
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
|
|
/worker/licenseplates:
|
|
get:
|
|
tags:
|
|
- Worker
|
|
summary: Get unique license plates
|
|
description: Fetch all unique license plates from various database tables
|
|
operationId: getWorkerLicensePlates
|
|
responses:
|
|
'200':
|
|
description: License plates retrieved successfully
|
|
'403':
|
|
$ref: '#/components/responses/Forbidden'
|
|
|
|
/economic/doesCustomerExist:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Check if customer exists in e-conomic
|
|
operationId: checkEconomicCustomerExists
|
|
parameters:
|
|
- name: cvr
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Customer check completed
|
|
'404':
|
|
$ref: '#/components/responses/NotFound'
|
|
|
|
/cvr/lookup:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Lookup CVR information
|
|
description: Get detailed information for a CVR number
|
|
operationId: lookupCvr
|
|
parameters:
|
|
- name: cvr
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: CVR information retrieved successfully
|
|
|
|
/cvr/search:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Search CVR
|
|
description: Search for companies by name or CVR
|
|
operationId: searchCvr
|
|
parameters:
|
|
- name: query
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
minLength: 2
|
|
responses:
|
|
'200':
|
|
description: Search results retrieved successfully
|
|
|
|
# Plate Scans Endpoints
|
|
/numberplatescans:
|
|
get:
|
|
tags:
|
|
- Plate Scans
|
|
summary: List plate scans
|
|
description: Get a list of license plate scans
|
|
operationId: listPlateScans
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
- $ref: '#/components/parameters/SearchParam'
|
|
responses:
|
|
'200':
|
|
description: Plate scans retrieved successfully
|
|
post:
|
|
tags:
|
|
- Plate Scans
|
|
summary: Record plate scan
|
|
description: Record a new license plate scan
|
|
operationId: recordPlateScan
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- plate
|
|
- lane_id
|
|
properties:
|
|
plate:
|
|
type: string
|
|
lane_id:
|
|
type: integer
|
|
responses:
|
|
'201':
|
|
description: Plate scan recorded successfully
|
|
|
|
/numberplatescans/department:
|
|
post:
|
|
tags:
|
|
- Plate Scans
|
|
summary: Record plate scan for department
|
|
operationId: recordDepartmentPlateScan
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- plate
|
|
- department_id
|
|
properties:
|
|
plate:
|
|
type: string
|
|
department_id:
|
|
type: integer
|
|
responses:
|
|
'201':
|
|
description: Plate scan recorded successfully
|
|
|
|
/numberplatescans/post:
|
|
get:
|
|
tags:
|
|
- Plate Scans
|
|
summary: Get post-scan results
|
|
operationId: getPlateScanPostResults
|
|
responses:
|
|
'200':
|
|
description: Post-scan results retrieved successfully
|
|
|
|
/numberplatescanners:
|
|
get:
|
|
tags:
|
|
- Plate Scans
|
|
summary: List plate scanners
|
|
description: Get a list of all number plate scanners
|
|
operationId: listPlateScanners
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
- $ref: '#/components/parameters/SearchParam'
|
|
responses:
|
|
'200':
|
|
description: Plate scanners retrieved successfully
|
|
post:
|
|
tags:
|
|
- Plate Scans
|
|
summary: Add plate scanner
|
|
operationId: addPlateScanner
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required: [department_id, name, notes]
|
|
properties:
|
|
department_id: {type: integer}
|
|
name: {type: string}
|
|
notes: {type: string}
|
|
responses:
|
|
'201':
|
|
description: Plate scanner added successfully
|
|
put:
|
|
tags:
|
|
- Plate Scans
|
|
summary: Update plate scanner
|
|
operationId: updatePlateScanner
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required: [id, department_id, name, notes]
|
|
properties:
|
|
id: {type: integer}
|
|
department_id: {type: integer}
|
|
name: {type: string}
|
|
notes: {type: string}
|
|
responses:
|
|
'200':
|
|
description: Plate scanner updated successfully
|
|
|
|
/department/numberplatescanners:
|
|
get:
|
|
tags:
|
|
- Plate Scans
|
|
summary: List department plate scanners
|
|
operationId: listDepartmentPlateScanners
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Department plate scanners retrieved successfully
|
|
|
|
# Module - e-conomic Endpoints
|
|
/economic/customers/import:
|
|
post:
|
|
tags:
|
|
- Modules
|
|
summary: Import e-conomic customers
|
|
description: Import customers from e-conomic
|
|
operationId: importEconomicCustomers
|
|
responses:
|
|
'200':
|
|
description: Customers imported successfully
|
|
|
|
/economic/layouts:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Get e-conomic layouts
|
|
description: Get available invoice layouts from e-conomic
|
|
operationId: getEconomicLayouts
|
|
responses:
|
|
'200':
|
|
description: Layouts retrieved successfully
|
|
|
|
/economic/payment-terms:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Get e-conomic payment terms
|
|
description: Get available payment terms from e-conomic
|
|
operationId: getEconomicPaymentTerms
|
|
responses:
|
|
'200':
|
|
description: Payment terms retrieved successfully
|
|
|
|
/economic/invoice/draft/export:
|
|
post:
|
|
tags:
|
|
- Modules
|
|
summary: Export draft invoice to e-conomic
|
|
description: Export a draft invoice to e-conomic
|
|
operationId: exportDraftInvoiceToEconomic
|
|
responses:
|
|
'200':
|
|
description: Draft invoice exported successfully
|
|
|
|
/economic/invoice/export:
|
|
post:
|
|
tags:
|
|
- Modules
|
|
summary: Export invoice to e-conomic
|
|
description: Export a booked invoice to e-conomic
|
|
operationId: exportInvoiceToEconomic
|
|
responses:
|
|
'200':
|
|
description: Invoice exported successfully
|
|
|
|
# Module - Stripe Endpoints
|
|
/modules/stripe/customers:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: List Stripe customers
|
|
description: Get list of Stripe customers
|
|
operationId: listStripeCustomers
|
|
responses:
|
|
'200':
|
|
description: Stripe customers retrieved successfully
|
|
|
|
/modules/stripe/products:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: List Stripe products
|
|
description: Get list of Stripe products
|
|
operationId: listStripeProducts
|
|
responses:
|
|
'200':
|
|
description: Stripe products retrieved successfully
|
|
|
|
/modules/stripe/prices:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: List Stripe prices
|
|
description: Get list of Stripe prices
|
|
operationId: listStripePrices
|
|
responses:
|
|
'200':
|
|
description: Stripe prices retrieved successfully
|
|
|
|
/modules/stripe/invoice:
|
|
post:
|
|
tags:
|
|
- Modules
|
|
summary: Create Stripe invoice
|
|
description: Create an invoice in Stripe
|
|
operationId: createStripeInvoice
|
|
responses:
|
|
'201':
|
|
description: Stripe invoice created successfully
|
|
|
|
# Module - XLVask Endpoints
|
|
/modules/xlvask/usageLog:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Get XLVask usage logs
|
|
description: Retrieve usage logs from XLVask system
|
|
operationId: getXlvaskUsageLogs
|
|
parameters:
|
|
- $ref: '#/components/parameters/PageParam'
|
|
- $ref: '#/components/parameters/PerPageParam'
|
|
responses:
|
|
'200':
|
|
description: Usage logs retrieved successfully
|
|
|
|
/modules/xlvask/vehicles:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: List XLVask vehicles
|
|
description: Get list of vehicles from XLVask
|
|
operationId: listXlvaskVehicles
|
|
responses:
|
|
'200':
|
|
description: XLVask vehicles retrieved successfully
|
|
|
|
/modules/xlvask/customers:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: List XLVask customers
|
|
description: Get list of customers from XLVask
|
|
operationId: listXlvaskCustomers
|
|
responses:
|
|
'200':
|
|
description: XLVask customers retrieved successfully
|
|
|
|
# Module - Self-Serve Endpoints
|
|
/modules/self-serve/lane/status:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Get self-serve lane status
|
|
description: Retrieve the current status of a self-serve lane
|
|
operationId: getSelfServeLaneStatus
|
|
parameters:
|
|
- name: lane_id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Lane status retrieved successfully
|
|
|
|
/modules/self-serve/lane/command:
|
|
post:
|
|
tags:
|
|
- Modules
|
|
summary: Send self-serve lane command
|
|
description: Send a command (e.g., start, stop, reset) to a self-serve lane
|
|
operationId: sendSelfServeLaneCommand
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- lane_id
|
|
- command
|
|
properties:
|
|
lane_id:
|
|
type: integer
|
|
command:
|
|
type: string
|
|
enum: [start, stop, reset]
|
|
responses:
|
|
'200':
|
|
description: Command sent successfully
|
|
|
|
# Module - Other Integration Endpoints
|
|
/modules/motorapi/lookup:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Lookup vehicle via MotorAPI
|
|
description: Look up vehicle information using license plate
|
|
operationId: motorApiLookup
|
|
parameters:
|
|
- name: plate
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Vehicle information retrieved successfully
|
|
|
|
/modules/virkdata/search:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Search VirkData
|
|
description: Search for company information in VirkData
|
|
operationId: virkdataSearch
|
|
parameters:
|
|
- name: cvr
|
|
in: query
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Company information retrieved successfully
|
|
|
|
/modules/fxratesapi/rate:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Get exchange rate
|
|
description: Get current exchange rate
|
|
operationId: getExchangeRate
|
|
parameters:
|
|
- name: from
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- name: to
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Exchange rate retrieved successfully
|
|
|
|
/modules/fxratesapi/rates:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: Get all exchange rates
|
|
description: Get all available exchange rates
|
|
operationId: getAllExchangeRates
|
|
responses:
|
|
'200':
|
|
description: Exchange rates retrieved successfully
|
|
|
|
/modules/entra/users:
|
|
get:
|
|
tags:
|
|
- Modules
|
|
summary: List Microsoft Entra users
|
|
description: Get list of users from Microsoft Entra (Azure AD)
|
|
operationId: listEntraUsers
|
|
responses:
|
|
'200':
|
|
description: Entra users retrieved successfully
|
|
|
|
# Attachments Endpoints
|
|
/attachments/upload:
|
|
post:
|
|
tags:
|
|
- Attachments
|
|
summary: Upload attachment
|
|
description: Upload a file attachment
|
|
operationId: uploadAttachment
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
file:
|
|
type: string
|
|
format: binary
|
|
responses:
|
|
'201':
|
|
description: Attachment uploaded successfully
|
|
'400':
|
|
$ref: '#/components/responses/BadRequest'
|
|
|
|
/orders/attachments:
|
|
get:
|
|
tags:
|
|
- Attachments
|
|
summary: List order attachments
|
|
description: Get attachments for an order
|
|
operationId: listOrderAttachments
|
|
parameters:
|
|
- name: order_id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Order attachments retrieved successfully
|
|
|
|
/orders/attachments/upload:
|
|
post:
|
|
tags:
|
|
- Attachments
|
|
summary: Upload order attachment
|
|
description: Upload an attachment to an order
|
|
operationId: uploadOrderAttachment
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
multipart/form-data:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
order_id:
|
|
type: integer
|
|
file:
|
|
type: string
|
|
format: binary
|
|
responses:
|
|
'201':
|
|
description: Order attachment uploaded successfully
|
|
|
|
/orders/attachments/download:
|
|
get:
|
|
tags:
|
|
- Attachments
|
|
summary: Download order attachment
|
|
description: Download a specific order attachment
|
|
operationId: downloadOrderAttachment
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Attachment downloaded successfully
|
|
content:
|
|
application/octet-stream:
|
|
schema:
|
|
type: string
|
|
format: binary
|
|
|
|
# Forms Endpoints
|
|
/form:
|
|
get:
|
|
tags:
|
|
- Forms
|
|
summary: Get form
|
|
description: Retrieve a form definition
|
|
operationId: getForm
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Form retrieved successfully
|
|
post:
|
|
tags:
|
|
- Forms
|
|
summary: Submit form
|
|
description: Submit a form
|
|
operationId: submitForm
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
form_id:
|
|
type: integer
|
|
data:
|
|
type: object
|
|
responses:
|
|
'201':
|
|
description: Form submitted successfully
|
|
|
|
# Permissions Endpoints
|
|
/permissions:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: List permissions
|
|
description: Get list of all available permissions
|
|
operationId: listPermissions
|
|
responses:
|
|
'200':
|
|
description: Permissions retrieved successfully
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Permission'
|
|
|
|
# Customer Management Endpoints
|
|
/customer/attributes:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: Get customer attributes
|
|
description: Get custom attributes for a customer
|
|
operationId: getCustomerAttributes
|
|
parameters:
|
|
- name: customer_id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Customer attributes retrieved successfully
|
|
post:
|
|
tags:
|
|
- Users
|
|
summary: Add customer attribute
|
|
description: Add a custom attribute to a customer
|
|
operationId: addCustomerAttribute
|
|
responses:
|
|
'201':
|
|
description: Customer attribute added successfully
|
|
delete:
|
|
tags:
|
|
- Users
|
|
summary: Delete customer attribute
|
|
description: Remove a custom attribute from a customer
|
|
operationId: deleteCustomerAttribute
|
|
responses:
|
|
'200':
|
|
description: Customer attribute deleted successfully
|
|
|
|
/customer/notes:
|
|
get:
|
|
tags:
|
|
- Users
|
|
summary: Get customer notes
|
|
description: Get notes for a customer
|
|
operationId: getCustomerNotes
|
|
parameters:
|
|
- name: customer_id
|
|
in: query
|
|
schema:
|
|
type: integer
|
|
responses:
|
|
'200':
|
|
description: Customer notes retrieved successfully
|
|
post:
|
|
tags:
|
|
- Users
|
|
summary: Add customer note
|
|
description: Add a note to a customer
|
|
operationId: addCustomerNote
|
|
responses:
|
|
'201':
|
|
description: Customer note added successfully
|
|
delete:
|
|
tags:
|
|
- Users
|
|
summary: Delete customer note
|
|
description: Remove a note from a customer
|
|
operationId: deleteCustomerNote
|
|
responses:
|
|
'200':
|
|
description: Customer note deleted successfully
|
|
|
|
/customers/search:
|
|
post:
|
|
tags:
|
|
- Users
|
|
summary: Search customers
|
|
description: Search for customers using various criteria
|
|
operationId: searchCustomers
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
query:
|
|
type: string
|
|
responses:
|
|
'200':
|
|
description: Customers found successfully
|
|
|
|
# Configuration Endpoints
|
|
/economic/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get e-conomic config
|
|
operationId: getEconomicConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update e-conomic config
|
|
operationId: updateEconomicConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/reCAPTCHA/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get reCAPTCHA config
|
|
operationId: getRecaptchaConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update reCAPTCHA config
|
|
operationId: updateRecaptchaConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/email/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get email config
|
|
operationId: getEmailConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update email config
|
|
operationId: updateEmailConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/email/config/test:
|
|
post:
|
|
tags: [Config]
|
|
summary: Test email config
|
|
operationId: testEmailConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/backups/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get backups config
|
|
operationId: getBackupsConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update backups config
|
|
operationId: updateBackupsConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/motorapi/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get MotorAPI config
|
|
operationId: getMotorApiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update MotorAPI config
|
|
operationId: updateMotorApiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/stripe/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get Stripe config
|
|
operationId: getStripeConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update Stripe config
|
|
operationId: updateStripeConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/fxratesapi/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get FXRatesAPI config
|
|
operationId: getFxRatesApiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update FXRatesAPI config
|
|
operationId: updateFxRatesApiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/gatewayapi/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get GatewayAPI config
|
|
operationId: getGatewayApiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update GatewayAPI config
|
|
operationId: updateGatewayApiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/xlvask/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get XLVask config
|
|
operationId: getXlvaskConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update XLVask config
|
|
operationId: updateXlvaskConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/entra/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get Entra config
|
|
operationId: getEntraConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update Entra config
|
|
operationId: updateEntraConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/limble/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get Limble config
|
|
operationId: getLimbleConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update Limble config
|
|
operationId: updateLimbleConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/ocrspace/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get OcrSpace config
|
|
operationId: getOcrSpaceConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update OcrSpace config
|
|
operationId: updateOcrSpaceConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/openai/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get OpenAI config
|
|
operationId: getOpenAiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update OpenAI config
|
|
operationId: updateOpenAiConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/licenseplaterecognizer/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get LicensePlateRecognizer config
|
|
operationId: getLicensePlateRecognizerConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update LicensePlateRecognizer config
|
|
operationId: updateLicensePlateRecognizerConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/virkdata/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get Virkdata config
|
|
operationId: getVirkdataConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update Virkdata config
|
|
operationId: updateVirkdataConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/shelly/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get Shelly config
|
|
operationId: getShellyConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update Shelly config
|
|
operationId: updateShellyConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
/selfserve/config:
|
|
get:
|
|
tags: [Config]
|
|
summary: Get Self-Serve config
|
|
operationId: getSelfServeConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
post:
|
|
tags: [Config]
|
|
summary: Update Self-Serve config
|
|
operationId: updateSelfServeConfig
|
|
responses:
|
|
'200': {description: Success}
|
|
|
|
components:
|
|
securitySchemes:
|
|
BearerAuth:
|
|
type: http
|
|
scheme: bearer
|
|
bearerFormat: JWT
|
|
description: JWT token obtained from /auth/login or /auth/employee/login
|
|
|
|
parameters:
|
|
PageParam:
|
|
name: page
|
|
in: query
|
|
description: Page number for pagination
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
default: 1
|
|
PerPageParam:
|
|
name: per_page
|
|
in: query
|
|
description: Number of items per page
|
|
schema:
|
|
type: integer
|
|
minimum: 1
|
|
maximum: 100
|
|
default: 30
|
|
SearchParam:
|
|
name: search
|
|
in: query
|
|
description: Search query string
|
|
schema:
|
|
type: string
|
|
|
|
responses:
|
|
BadRequest:
|
|
description: Bad request - Invalid input parameters
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
Unauthorized:
|
|
description: Unauthorized - Invalid or missing authentication token
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
Forbidden:
|
|
description: Forbidden - Insufficient permissions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
NotFound:
|
|
description: Not found - Resource does not exist
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
InternalServerError:
|
|
description: Internal server error
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Error'
|
|
|
|
schemas:
|
|
Error:
|
|
type: object
|
|
properties:
|
|
error:
|
|
type: string
|
|
description: Error message
|
|
code:
|
|
type: integer
|
|
description: HTTP status code
|
|
|
|
User:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: User ID
|
|
customer_number:
|
|
type: integer
|
|
description: e-conomic customer number
|
|
display_name:
|
|
type: string
|
|
description: User's display name
|
|
group_id:
|
|
type: integer
|
|
description: User group/role ID
|
|
phone_country_code:
|
|
type: integer
|
|
description: Phone country code
|
|
phone:
|
|
type: integer
|
|
description: Phone number
|
|
email:
|
|
type: string
|
|
format: email
|
|
description: Email address
|
|
sms_notifications_enabled:
|
|
type: boolean
|
|
description: SMS notifications enabled
|
|
email_notifications_enabled:
|
|
type: boolean
|
|
description: Email notifications enabled
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
UserCreate:
|
|
type: object
|
|
required:
|
|
- customer_number
|
|
- password
|
|
properties:
|
|
customer_number:
|
|
type: integer
|
|
password:
|
|
type: string
|
|
format: password
|
|
display_name:
|
|
type: string
|
|
group_id:
|
|
type: integer
|
|
email:
|
|
type: string
|
|
format: email
|
|
phone:
|
|
type: integer
|
|
phone_country_code:
|
|
type: integer
|
|
|
|
UserUpdate:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
customer_number:
|
|
type: integer
|
|
display_name:
|
|
type: string
|
|
group_id:
|
|
type: integer
|
|
email:
|
|
type: string
|
|
format: email
|
|
phone:
|
|
type: integer
|
|
phone_country_code:
|
|
type: integer
|
|
|
|
Order:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: Order ID
|
|
customer_id:
|
|
type: integer
|
|
description: Customer number
|
|
customer_name:
|
|
type: string
|
|
description: Customer name
|
|
user_id:
|
|
type: integer
|
|
description: User ID
|
|
cashier_id:
|
|
type: integer
|
|
description: Cashier user ID
|
|
cashier_name:
|
|
type: string
|
|
description: Cashier name
|
|
department_id:
|
|
type: integer
|
|
description: Department ID
|
|
status:
|
|
type: string
|
|
description: Order status
|
|
total_net_amount:
|
|
type: number
|
|
format: float
|
|
description: Total order amount
|
|
po:
|
|
type: string
|
|
description: Purchase order number
|
|
nullable: true
|
|
lane:
|
|
type: string
|
|
description: Lane information
|
|
nullable: true
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
OrderCreate:
|
|
type: object
|
|
required:
|
|
- customer_id
|
|
- department_id
|
|
properties:
|
|
customer_id:
|
|
type: integer
|
|
department_id:
|
|
type: integer
|
|
cashier_id:
|
|
type: integer
|
|
po:
|
|
type: string
|
|
lane:
|
|
type: string
|
|
|
|
OrderUpdate:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
customer_id:
|
|
type: integer
|
|
department_id:
|
|
type: integer
|
|
status:
|
|
type: string
|
|
po:
|
|
type: string
|
|
lane:
|
|
type: string
|
|
|
|
OrderItem:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
order_id:
|
|
type: integer
|
|
product_id:
|
|
type: integer
|
|
product_name:
|
|
type: string
|
|
quantity:
|
|
type: integer
|
|
unit_price:
|
|
type: number
|
|
format: float
|
|
discount:
|
|
type: number
|
|
format: float
|
|
total_price:
|
|
type: number
|
|
format: float
|
|
|
|
OrderItemCreate:
|
|
type: object
|
|
required:
|
|
- order_id
|
|
- product_id
|
|
- quantity
|
|
properties:
|
|
order_id:
|
|
type: integer
|
|
product_id:
|
|
type: integer
|
|
quantity:
|
|
type: integer
|
|
discount:
|
|
type: number
|
|
format: float
|
|
|
|
OrderItemUpdate:
|
|
type: object
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
quantity:
|
|
type: integer
|
|
discount:
|
|
type: number
|
|
format: float
|
|
|
|
Department:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
economic_department_id:
|
|
type: integer
|
|
visible:
|
|
type: boolean
|
|
dimension:
|
|
type: integer
|
|
branding:
|
|
type: integer
|
|
longitude:
|
|
type: number
|
|
format: float
|
|
latitude:
|
|
type: number
|
|
format: float
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
DepartmentCreate:
|
|
type: object
|
|
required:
|
|
- name
|
|
- economic_department_id
|
|
properties:
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
economic_department_id:
|
|
type: integer
|
|
visible:
|
|
type: boolean
|
|
longitude:
|
|
type: number
|
|
format: float
|
|
latitude:
|
|
type: number
|
|
format: float
|
|
|
|
DepartmentUpdate:
|
|
type: object
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
visible:
|
|
type: boolean
|
|
longitude:
|
|
type: number
|
|
format: float
|
|
latitude:
|
|
type: number
|
|
format: float
|
|
|
|
DepartmentLane:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
department:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
relay_in_id:
|
|
type: string
|
|
relay_out_id:
|
|
type: string
|
|
relay_machine_id:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
DepartmentLaneCreate:
|
|
type: object
|
|
required:
|
|
- department
|
|
- name
|
|
properties:
|
|
department:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
relay_in_id:
|
|
type: string
|
|
relay_out_id:
|
|
type: string
|
|
relay_machine_id:
|
|
type: string
|
|
|
|
DepartmentLaneUpdate:
|
|
type: object
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
department:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
relay_in_id:
|
|
type: string
|
|
relay_out_id:
|
|
type: string
|
|
relay_machine_id:
|
|
type: string
|
|
|
|
Product:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
price:
|
|
type: number
|
|
format: float
|
|
category_id:
|
|
type: integer
|
|
category_name:
|
|
type: string
|
|
visible:
|
|
type: boolean
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
ProductCreate:
|
|
type: object
|
|
required:
|
|
- name
|
|
- price
|
|
- category_id
|
|
properties:
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
price:
|
|
type: number
|
|
format: float
|
|
category_id:
|
|
type: integer
|
|
visible:
|
|
type: boolean
|
|
|
|
ProductUpdate:
|
|
type: object
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
price:
|
|
type: number
|
|
format: float
|
|
category_id:
|
|
type: integer
|
|
visible:
|
|
type: boolean
|
|
|
|
Category:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
updated_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
CategoryCreate:
|
|
type: object
|
|
required:
|
|
- name
|
|
properties:
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
|
|
CategoryUpdate:
|
|
type: object
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
description:
|
|
type: string
|
|
|
|
Booking:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
customer_id:
|
|
type: integer
|
|
department_id:
|
|
type: integer
|
|
booking_time:
|
|
type: string
|
|
format: date-time
|
|
status:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
BookingUpdate:
|
|
type: object
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
type: integer
|
|
status:
|
|
type: string
|
|
booking_time:
|
|
type: string
|
|
format: date-time
|
|
|
|
Vehicle:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
plate:
|
|
type: string
|
|
customer_id:
|
|
type: integer
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
Notification:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
user_id:
|
|
type: integer
|
|
title:
|
|
type: string
|
|
message:
|
|
type: string
|
|
read:
|
|
type: boolean
|
|
created_at:
|
|
type: string
|
|
format: date-time
|
|
|
|
NotificationCreate:
|
|
type: object
|
|
required:
|
|
- user_id
|
|
- title
|
|
- message
|
|
properties:
|
|
user_id:
|
|
type: integer
|
|
title:
|
|
type: string
|
|
message:
|
|
type: string
|
|
|
|
Permission:
|
|
type: object
|
|
properties:
|
|
name:
|
|
type: string
|
|
description: Permission identifier
|
|
description:
|
|
type: string
|
|
description: Human-readable description
|