fix(api): correct service and application OpenAPI schemas

This commit is contained in:
Andras Bacsai 2026-07-15 12:29:20 +02:00
parent 05dc2c65f6
commit 64667574f6
4 changed files with 1255 additions and 44 deletions

View file

@ -1053,11 +1053,6 @@ public function delete_by_uuid(Request $request)
properties: [
'name' => ['type' => 'string', 'description' => 'The service name.'],
'description' => ['type' => 'string', 'description' => 'The service description.'],
'project_uuid' => ['type' => 'string', 'description' => 'The project UUID.'],
'environment_name' => ['type' => 'string', 'description' => 'The environment name.'],
'environment_uuid' => ['type' => 'string', 'description' => 'The environment UUID.'],
'server_uuid' => ['type' => 'string', 'description' => 'The server UUID.'],
'destination_uuid' => ['type' => 'string', 'description' => 'The destination UUID.'],
'instant_deploy' => ['type' => 'boolean', 'description' => 'The flag to indicate if the service should be deployed instantly.'],
'connect_to_docker_network' => ['type' => 'boolean', 'default' => false, 'description' => 'Connect the service to the predefined docker network.'],
'docker_compose_raw' => ['type' => 'string', 'description' => 'The base64 encoded Docker Compose content.'],
@ -1942,7 +1937,7 @@ public function delete_env_by_uuid(Request $request)
),
]
)]
public function move_by_uuid(Request $request): \Illuminate\Http\JsonResponse
public function move_by_uuid(Request $request): JsonResponse
{
$teamId = getTeamIdFromToken();
if (is_null($teamId)) {

View file

@ -111,7 +111,7 @@
'is_http_basic_auth_enabled' => ['type' => 'boolean', 'description' => 'HTTP Basic Authentication enabled.'],
'http_basic_auth_username' => ['type' => 'string', 'nullable' => true, 'description' => 'Username for HTTP Basic Authentication'],
'http_basic_auth_password' => ['type' => 'string', 'nullable' => true, 'description' => 'Password for HTTP Basic Authentication'],
'settings' => new OA\Property(ref: '#/components/schemas/ApplicationSetting'),
new OA\Property(property: 'settings', ref: '#/components/schemas/ApplicationSetting'),
]
)]

View file

@ -12731,6 +12731,76 @@
"bearerAuth": []
}
]
},
"post": {
"tags": [
"Service applications"
],
"summary": "Get service application logs",
"description": "Get Docker logs for a single compose service container.",
"operationId": "post-service-application-logs-by-service-and-app-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "app_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "lines",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "Logs.",
"content": {
"application\/json": {
"schema": {
"properties": {
"logs": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/applications\/{app_uuid}\/start": {
@ -12812,6 +12882,84 @@
"bearerAuth": []
}
]
},
"post": {
"tags": [
"Service applications"
],
"summary": "Start or redeploy service application container",
"description": "Runs docker compose up for a single compose service (no-deps), optionally pulling the image and rebuilding.",
"operationId": "post-start-service-application-by-service-and-app-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "app_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "force",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"default": false
}
},
{
"name": "latest",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"200": {
"description": "Deploy request queued.",
"content": {
"application\/json": {
"schema": {
"properties": {
"message": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/applications\/{app_uuid}\/restart": {
@ -12873,6 +13021,66 @@
"bearerAuth": []
}
]
},
"post": {
"tags": [
"Service applications"
],
"summary": "Restart service application container",
"description": "Restarts a single compose service container.",
"operationId": "post-restart-service-application-by-service-and-app-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "app_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Restart queued.",
"content": {
"application\/json": {
"schema": {
"properties": {
"message": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/applications\/{app_uuid}\/stop": {
@ -12934,6 +13142,550 @@
"bearerAuth": []
}
]
},
"post": {
"tags": [
"Service applications"
],
"summary": "Stop service application container",
"description": "Stops a single compose service container.",
"operationId": "post-stop-service-application-by-service-and-app-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "app_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Stop queued.",
"content": {
"application\/json": {
"schema": {
"properties": {
"message": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/databases": {
"get": {
"tags": [
"Service databases"
],
"summary": "List service databases",
"description": "List compose databases for a single service.",
"operationId": "list-service-databases-by-service-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"description": "Service UUID.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Service databases.",
"content": {
"application\/json": {
"schema": {
"type": "array",
"items": {
"type": "object"
}
}
}
}
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/databases\/{database_uuid}": {
"get": {
"tags": [
"Service databases"
],
"summary": "Get service database",
"description": "Get a compose database by service UUID and database UUID.",
"operationId": "get-service-database-by-service-and-database-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"description": "Service UUID.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "database_uuid",
"in": "path",
"description": "Service database UUID.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Service database.",
"content": {
"application\/json": {
"schema": {
"type": "object"
}
}
}
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
}
},
"security": [
{
"bearerAuth": []
}
]
},
"patch": {
"tags": [
"Service databases"
],
"summary": "Update service database",
"description": "Update mutable fields for a compose service database.",
"operationId": "patch-service-database-by-service-and-database-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"description": "Service UUID.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "database_uuid",
"in": "path",
"description": "Service database UUID.",
"required": true,
"schema": {
"type": "string"
}
}
],
"requestBody": {
"content": {
"application\/json": {
"schema": {
"properties": {
"human_name": {
"type": [
"string",
"null"
]
},
"description": {
"type": [
"string",
"null"
]
},
"image": {
"type": "string"
},
"exclude_from_status": {
"type": "boolean"
},
"is_log_drain_enabled": {
"type": "boolean"
},
"is_public": {
"type": "boolean"
},
"public_port": {
"type": [
"integer",
"null"
],
"maximum": 65535,
"minimum": 1
},
"public_port_timeout": {
"type": [
"integer",
"null"
],
"minimum": 1
}
},
"type": "object",
"additionalProperties": false
}
}
}
},
"responses": {
"200": {
"description": "Updated service database.",
"content": {
"application\/json": {
"schema": {
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"422": {
"$ref": "#\/components\/responses\/422"
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/databases\/{database_uuid}\/logs": {
"get": {
"tags": [
"Service databases"
],
"summary": "Get service database logs",
"description": "Get Docker logs for a compose database container.",
"operationId": "get-service-database-logs-by-service-and-database-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "database_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "lines",
"in": "query",
"required": false,
"schema": {
"type": "integer",
"format": "int32",
"default": 100
}
}
],
"responses": {
"200": {
"description": "Logs.",
"content": {
"application\/json": {
"schema": {
"properties": {
"logs": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/databases\/{database_uuid}\/start": {
"post": {
"tags": [
"Service databases"
],
"summary": "Start or redeploy service database container",
"description": "Run docker compose up for a single compose database.",
"operationId": "start-service-database-by-service-and-database-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "database_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "force",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"default": false
}
},
{
"name": "latest",
"in": "query",
"required": false,
"schema": {
"type": "boolean",
"default": false
}
}
],
"responses": {
"200": {
"description": "Deploy request queued.",
"content": {
"application\/json": {
"schema": {
"properties": {
"message": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/databases\/{database_uuid}\/restart": {
"post": {
"tags": [
"Service databases"
],
"summary": "Restart service database container",
"description": "Restart a compose database container.",
"operationId": "restart-service-database-by-service-and-database-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "database_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Restart queued.",
"content": {
"application\/json": {
"schema": {
"properties": {
"message": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services\/{uuid}\/databases\/{database_uuid}\/stop": {
"post": {
"tags": [
"Service databases"
],
"summary": "Stop service database container",
"description": "Stop a compose database container.",
"operationId": "stop-service-database-by-service-and-database-uuid",
"parameters": [
{
"name": "uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "database_uuid",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Stop queued.",
"content": {
"application\/json": {
"schema": {
"properties": {
"message": {
"type": "string"
}
},
"type": "object"
}
}
}
},
"400": {
"$ref": "#\/components\/responses\/400"
},
"401": {
"$ref": "#\/components\/responses\/401"
},
"404": {
"$ref": "#\/components\/responses\/404"
},
"501": {
"description": "Swarm not supported."
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"\/services": {
@ -13338,26 +14090,6 @@
"type": "string",
"description": "The service description."
},
"project_uuid": {
"type": "string",
"description": "The project UUID."
},
"environment_name": {
"type": "string",
"description": "The environment name."
},
"environment_uuid": {
"type": "string",
"description": "The environment UUID."
},
"server_uuid": {
"type": "string",
"description": "The server UUID."
},
"destination_uuid": {
"type": "string",
"description": "The destination UUID."
},
"instant_deploy": {
"type": "boolean",
"description": "The flag to indicate if the service should be deployed instantly."
@ -15514,7 +16246,7 @@
"nullable": true,
"description": "Password for HTTP Basic Authentication"
},
"": {
"settings": {
"$ref": "#\/components\/schemas\/ApplicationSetting"
}
},
@ -16568,6 +17300,10 @@
"name": "Service applications",
"description": "Service applications"
},
{
"name": "Service databases",
"description": "Service databases"
},
{
"name": "Services",
"description": "Services"

View file

@ -8173,6 +8173,53 @@ paths:
security:
-
bearerAuth: []
post:
tags:
- 'Service applications'
summary: 'Get service application logs'
description: 'Get Docker logs for a single compose service container.'
operationId: post-service-application-logs-by-service-and-app-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: app_uuid
in: path
required: true
schema:
type: string
-
name: lines
in: query
required: false
schema:
type: integer
format: int32
default: 100
responses:
'200':
description: Logs.
content:
application/json:
schema:
properties:
logs: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
'/services/{uuid}/applications/{app_uuid}/start':
get:
tags:
@ -8229,6 +8276,59 @@ paths:
security:
-
bearerAuth: []
post:
tags:
- 'Service applications'
summary: 'Start or redeploy service application container'
description: 'Runs docker compose up for a single compose service (no-deps), optionally pulling the image and rebuilding.'
operationId: post-start-service-application-by-service-and-app-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: app_uuid
in: path
required: true
schema:
type: string
-
name: force
in: query
required: false
schema:
type: boolean
default: false
-
name: latest
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: 'Deploy request queued.'
content:
application/json:
schema:
properties:
message: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
'/services/{uuid}/applications/{app_uuid}/restart':
get:
tags:
@ -8269,6 +8369,45 @@ paths:
security:
-
bearerAuth: []
post:
tags:
- 'Service applications'
summary: 'Restart service application container'
description: 'Restarts a single compose service container.'
operationId: post-restart-service-application-by-service-and-app-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: app_uuid
in: path
required: true
schema:
type: string
responses:
'200':
description: 'Restart queued.'
content:
application/json:
schema:
properties:
message: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
'/services/{uuid}/applications/{app_uuid}/stop':
get:
tags:
@ -8309,6 +8448,359 @@ paths:
security:
-
bearerAuth: []
post:
tags:
- 'Service applications'
summary: 'Stop service application container'
description: 'Stops a single compose service container.'
operationId: post-stop-service-application-by-service-and-app-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: app_uuid
in: path
required: true
schema:
type: string
responses:
'200':
description: 'Stop queued.'
content:
application/json:
schema:
properties:
message: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
'/services/{uuid}/databases':
get:
tags:
- 'Service databases'
summary: 'List service databases'
description: 'List compose databases for a single service.'
operationId: list-service-databases-by-service-uuid
parameters:
-
name: uuid
in: path
description: 'Service UUID.'
required: true
schema:
type: string
responses:
'200':
description: 'Service databases.'
content:
application/json:
schema:
type: array
items:
type: object
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
security:
-
bearerAuth: []
'/services/{uuid}/databases/{database_uuid}':
get:
tags:
- 'Service databases'
summary: 'Get service database'
description: 'Get a compose database by service UUID and database UUID.'
operationId: get-service-database-by-service-and-database-uuid
parameters:
-
name: uuid
in: path
description: 'Service UUID.'
required: true
schema:
type: string
-
name: database_uuid
in: path
description: 'Service database UUID.'
required: true
schema:
type: string
responses:
'200':
description: 'Service database.'
content:
application/json:
schema:
type: object
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
security:
-
bearerAuth: []
patch:
tags:
- 'Service databases'
summary: 'Update service database'
description: 'Update mutable fields for a compose service database.'
operationId: patch-service-database-by-service-and-database-uuid
parameters:
-
name: uuid
in: path
description: 'Service UUID.'
required: true
schema:
type: string
-
name: database_uuid
in: path
description: 'Service database UUID.'
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
properties:
human_name:
type: [string, 'null']
description:
type: [string, 'null']
image:
type: string
exclude_from_status:
type: boolean
is_log_drain_enabled:
type: boolean
is_public:
type: boolean
public_port:
type: [integer, 'null']
maximum: 65535
minimum: 1
public_port_timeout:
type: [integer, 'null']
minimum: 1
type: object
additionalProperties: false
responses:
'200':
description: 'Updated service database.'
content:
application/json:
schema:
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'422':
$ref: '#/components/responses/422'
security:
-
bearerAuth: []
'/services/{uuid}/databases/{database_uuid}/logs':
get:
tags:
- 'Service databases'
summary: 'Get service database logs'
description: 'Get Docker logs for a compose database container.'
operationId: get-service-database-logs-by-service-and-database-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: database_uuid
in: path
required: true
schema:
type: string
-
name: lines
in: query
required: false
schema:
type: integer
format: int32
default: 100
responses:
'200':
description: Logs.
content:
application/json:
schema:
properties:
logs: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
'/services/{uuid}/databases/{database_uuid}/start':
post:
tags:
- 'Service databases'
summary: 'Start or redeploy service database container'
description: 'Run docker compose up for a single compose database.'
operationId: start-service-database-by-service-and-database-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: database_uuid
in: path
required: true
schema:
type: string
-
name: force
in: query
required: false
schema:
type: boolean
default: false
-
name: latest
in: query
required: false
schema:
type: boolean
default: false
responses:
'200':
description: 'Deploy request queued.'
content:
application/json:
schema:
properties:
message: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
'/services/{uuid}/databases/{database_uuid}/restart':
post:
tags:
- 'Service databases'
summary: 'Restart service database container'
description: 'Restart a compose database container.'
operationId: restart-service-database-by-service-and-database-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: database_uuid
in: path
required: true
schema:
type: string
responses:
'200':
description: 'Restart queued.'
content:
application/json:
schema:
properties:
message: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
'/services/{uuid}/databases/{database_uuid}/stop':
post:
tags:
- 'Service databases'
summary: 'Stop service database container'
description: 'Stop a compose database container.'
operationId: stop-service-database-by-service-and-database-uuid
parameters:
-
name: uuid
in: path
required: true
schema:
type: string
-
name: database_uuid
in: path
required: true
schema:
type: string
responses:
'200':
description: 'Stop queued.'
content:
application/json:
schema:
properties:
message: { type: string }
type: object
'400':
$ref: '#/components/responses/400'
'401':
$ref: '#/components/responses/401'
'404':
$ref: '#/components/responses/404'
'501':
description: 'Swarm not supported.'
security:
-
bearerAuth: []
/services:
get:
tags:
@ -8550,21 +9042,6 @@ paths:
description:
type: string
description: 'The service description.'
project_uuid:
type: string
description: 'The project UUID.'
environment_name:
type: string
description: 'The environment name.'
environment_uuid:
type: string
description: 'The environment UUID.'
server_uuid:
type: string
description: 'The server UUID.'
destination_uuid:
type: string
description: 'The destination UUID.'
instant_deploy:
type: boolean
description: 'The flag to indicate if the service should be deployed instantly.'
@ -9967,7 +10444,7 @@ components:
type: string
nullable: true
description: 'Password for HTTP Basic Authentication'
'':
settings:
$ref: '#/components/schemas/ApplicationSetting'
type: object
ApplicationDeploymentQueue:
@ -10700,6 +11177,9 @@ tags:
-
name: 'Service applications'
description: 'Service applications'
-
name: 'Service databases'
description: 'Service databases'
-
name: Services
description: Services