From 9212f3b24c58c24aa4175ecc5e61ae287bbba280 Mon Sep 17 00:00:00 2001 From: Andras Bacsai Date: Tue, 1 Oct 2024 09:02:16 +0200 Subject: [PATCH] feat: Update resource deletion job to allow configurable options through API --- .../Api/ApplicationsController.php | 24 +++++----- .../Controllers/Api/DatabasesController.php | 22 ++++----- .../Controllers/Api/ServicesController.php | 46 ++++++++++++++----- app/Jobs/DeleteResourceJob.php | 8 ++-- 4 files changed, 59 insertions(+), 41 deletions(-) diff --git a/app/Http/Controllers/Api/ApplicationsController.php b/app/Http/Controllers/Api/ApplicationsController.php index 782b3f270..485b4c511 100644 --- a/app/Http/Controllers/Api/ApplicationsController.php +++ b/app/Http/Controllers/Api/ApplicationsController.php @@ -1269,23 +1269,17 @@ class ApplicationsController extends Controller new OA\Parameter( name: 'uuid', in: 'path', - description: 'UUID of the application.', + description: 'UUID of the database.', required: true, schema: new OA\Schema( type: 'string', format: 'uuid', ) ), - new OA\Parameter( - name: 'cleanup', - in: 'query', - description: 'Delete configurations and volumes.', - required: false, - schema: new OA\Schema( - type: 'boolean', - default: true, - ) - ), + new OA\Parameter(name: 'delete_configurations', in: 'query', required: false, description: 'Delete configurations.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'delete_volumes', in: 'query', required: false, description: 'Delete volumes.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'docker_cleanup', in: 'query', required: false, description: 'Run docker cleanup.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'delete_connected_networks', in: 'query', required: false, description: 'Delete connected networks.', schema: new OA\Schema(type: 'boolean', default: true)), ], responses: [ new OA\Response( @@ -1333,10 +1327,14 @@ class ApplicationsController extends Controller 'message' => 'Application not found', ], 404); } + DeleteResourceJob::dispatch( resource: $application, - deleteConfigurations: $cleanup, - deleteVolumes: $cleanup); + deleteConfigurations: $request->query->get('delete_configurations', true), + deleteVolumes: $request->query->get('delete_volumes', true), + dockerCleanup: $request->query->get('docker_cleanup', true), + deleteConnectedNetworks: $request->query->get('delete_connected_networks', true) + ); return response()->json([ 'message' => 'Application deletion request queued.', diff --git a/app/Http/Controllers/Api/DatabasesController.php b/app/Http/Controllers/Api/DatabasesController.php index a205704cc..65873f818 100644 --- a/app/Http/Controllers/Api/DatabasesController.php +++ b/app/Http/Controllers/Api/DatabasesController.php @@ -1541,16 +1541,10 @@ class DatabasesController extends Controller format: 'uuid', ) ), - new OA\Parameter( - name: 'cleanup', - in: 'query', - description: 'Delete configurations and volumes.', - required: false, - schema: new OA\Schema( - type: 'boolean', - default: true, - ) - ), + new OA\Parameter(name: 'delete_configurations', in: 'query', required: false, description: 'Delete configurations.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'delete_volumes', in: 'query', required: false, description: 'Delete volumes.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'docker_cleanup', in: 'query', required: false, description: 'Run docker cleanup.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'delete_connected_networks', in: 'query', required: false, description: 'Delete connected networks.', schema: new OA\Schema(type: 'boolean', default: true)), ], responses: [ new OA\Response( @@ -1595,10 +1589,14 @@ class DatabasesController extends Controller if (! $database) { return response()->json(['message' => 'Database not found.'], 404); } + DeleteResourceJob::dispatch( resource: $database, - deleteConfigurations: $cleanup, - deleteVolumes: $cleanup); + deleteConfigurations: $request->query->get('delete_configurations', true), + deleteVolumes: $request->query->get('delete_volumes', true), + dockerCleanup: $request->query->get('docker_cleanup', true), + deleteConnectedNetworks: $request->query->get('delete_connected_networks', true) + ); return response()->json([ 'message' => 'Database deletion request queued.', diff --git a/app/Http/Controllers/Api/ServicesController.php b/app/Http/Controllers/Api/ServicesController.php index 0a6154410..89418517b 100644 --- a/app/Http/Controllers/Api/ServicesController.php +++ b/app/Http/Controllers/Api/ServicesController.php @@ -432,6 +432,10 @@ class ServicesController extends Controller tags: ['Services'], parameters: [ new OA\Parameter(name: 'uuid', in: 'path', required: true, description: 'Service UUID', schema: new OA\Schema(type: 'string')), + new OA\Parameter(name: 'delete_configurations', in: 'query', required: false, description: 'Delete configurations.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'delete_volumes', in: 'query', required: false, description: 'Delete volumes.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'docker_cleanup', in: 'query', required: false, description: 'Run docker cleanup.', schema: new OA\Schema(type: 'boolean', default: true)), + new OA\Parameter(name: 'delete_connected_networks', in: 'query', required: false, description: 'Delete connected networks.', schema: new OA\Schema(type: 'boolean', default: true)), ], responses: [ new OA\Response( @@ -476,7 +480,14 @@ class ServicesController extends Controller if (! $service) { return response()->json(['message' => 'Service not found.'], 404); } - DeleteResourceJob::dispatch($service); + + DeleteResourceJob::dispatch( + resource: $service, + deleteConfigurations: $request->query->get('delete_configurations', true), + deleteVolumes: $request->query->get('delete_volumes', true), + dockerCleanup: $request->query->get('docker_cleanup', true), + deleteConnectedNetworks: $request->query->get('delete_connected_networks', true) + ); return response()->json([ 'message' => 'Service deletion request queued.', @@ -516,7 +527,8 @@ class ServicesController extends Controller items: new OA\Items(ref: '#/components/schemas/EnvironmentVariable') ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', @@ -619,7 +631,8 @@ class ServicesController extends Controller ] ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', @@ -738,7 +751,8 @@ class ServicesController extends Controller ] ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', @@ -853,7 +867,8 @@ class ServicesController extends Controller ] ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', @@ -953,7 +968,8 @@ class ServicesController extends Controller ] ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', @@ -1025,9 +1041,11 @@ class ServicesController extends Controller type: 'object', properties: [ 'message' => ['type' => 'string', 'example' => 'Service starting request queued.'], - ]) + ] + ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', @@ -1101,9 +1119,11 @@ class ServicesController extends Controller type: 'object', properties: [ 'message' => ['type' => 'string', 'example' => 'Service stopping request queued.'], - ]) + ] + ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', @@ -1177,9 +1197,11 @@ class ServicesController extends Controller type: 'object', properties: [ 'message' => ['type' => 'string', 'example' => 'Service restaring request queued.'], - ]) + ] + ) ), - ]), + ] + ), new OA\Response( response: 401, ref: '#/components/responses/401', diff --git a/app/Jobs/DeleteResourceJob.php b/app/Jobs/DeleteResourceJob.php index ac34d064e..2442d5b06 100644 --- a/app/Jobs/DeleteResourceJob.php +++ b/app/Jobs/DeleteResourceJob.php @@ -31,10 +31,10 @@ class DeleteResourceJob implements ShouldBeEncrypted, ShouldQueue public function __construct( public Application|Service|StandalonePostgresql|StandaloneRedis|StandaloneMongodb|StandaloneMysql|StandaloneMariadb|StandaloneKeydb|StandaloneDragonfly|StandaloneClickhouse $resource, - public bool $deleteConfigurations, - public bool $deleteVolumes, - public bool $dockerCleanup, - public bool $deleteConnectedNetworks + public bool $deleteConfigurations = true, + public bool $deleteVolumes = true, + public bool $dockerCleanup = true, + public bool $deleteConnectedNetworks = true ) {} public function handle()