diff --git a/routes/api.php b/routes/api.php index 006096a3e..470339c46 100644 --- a/routes/api.php +++ b/routes/api.php @@ -34,74 +34,82 @@ Route::group([ $token = auth()->user()->currentAccessToken(); $teamId = data_get($token, 'team_id'); $uuid = $request->query->get('uuid'); + $uuids = explode(',', $uuid); + $uuids = collect(array_filter($uuids)); $force = $request->query->get('force') ?? false; if (is_null($teamId)) { - return response()->json(['error' => 'Invalid token.'], 400); + return response()->json(['error' => 'Invalid token.', 'docs' => 'https://coolify.io/docs/api/authentication'], 400); } - if (!$uuid) { - return response()->json(['error' => 'No UUID provided.'], 400); + if (count($uuids) === 0) { + return response()->json(['error' => 'No UUIDs provided.', 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 400); } - $resource = getResourceByUuid($uuid, $teamId); - if ($resource) { - $type = $resource->getMorphClass(); - if ($type === 'App\Models\Application') { - queue_application_deployment( - application_id: $resource->id, - deployment_uuid: new Cuid2(7), - force_rebuild: $force, - ); - return response()->json(['message' => 'Deployment queued.'], 200); - } else if ($type === 'App\Models\StandalonePostgresql') { - if (str($resource->status)->startsWith('running')) { - return response()->json(['message' => 'Database already running.'], 200); + $message = collect([]); + foreach ($uuids as $uuid) { + $resource = getResourceByUuid($uuid, $teamId); + if ($resource) { + $type = $resource->getMorphClass(); + if ($type === 'App\Models\Application') { + queue_application_deployment( + application_id: $resource->id, + deployment_uuid: new Cuid2(7), + force_rebuild: $force, + ); + $message->push("Application {$resource->name} deployment queued."); + } else if ($type === 'App\Models\StandalonePostgresql') { + if (str($resource->status)->startsWith('running')) { + $message->push("Database {$resource->name} already running."); + } + StartPostgresql::run($resource); + $resource->update([ + 'started_at' => now(), + ]); + $message->push("Database {$resource->name} started."); + } else if ($type === 'App\Models\StandaloneRedis') { + if (str($resource->status)->startsWith('running')) { + $message->push("Database {$resource->name} already running."); + } + StartRedis::run($resource); + $resource->update([ + 'started_at' => now(), + ]); + $message->push("Database {$resource->name} started."); + } else if ($type === 'App\Models\StandaloneMongodb') { + if (str($resource->status)->startsWith('running')) { + $message->push("Database {$resource->name} already running."); + } + StartMongodb::run($resource); + $resource->update([ + 'started_at' => now(), + ]); + $message->push("Database {$resource->name} started."); + } else if ($type === 'App\Models\StandaloneMysql') { + if (str($resource->status)->startsWith('running')) { + $message->push("Database {$resource->name} already running."); + } + StartMysql::run($resource); + $resource->update([ + 'started_at' => now(), + ]); + $message->push("Database {$resource->name} started."); + } else if ($type === 'App\Models\StandaloneMariadb') { + if (str($resource->status)->startsWith('running')) { + $message->push("Database {$resource->name} already running."); + } + StartMariadb::run($resource); + $resource->update([ + 'started_at' => now(), + ]); + $message->push("Database {$resource->name} started."); + } else if ($type === 'App\Models\Service') { + StartService::run($resource); + $message->push("Service {$resource->name} started. It could take a while, be patient."); } - StartPostgresql::run($resource); - $resource->update([ - 'started_at' => now(), - ]); - return response()->json(['message' => 'Database started.'], 200); - } else if ($type === 'App\Models\StandaloneRedis') { - if (str($resource->status)->startsWith('running')) { - return response()->json(['message' => 'Database already running.'], 200); - } - StartRedis::run($resource); - $resource->update([ - 'started_at' => now(), - ]); - return response()->json(['message' => 'Database started.'], 200); - } else if ($type === 'App\Models\StandaloneMongodb') { - if (str($resource->status)->startsWith('running')) { - return response()->json(['message' => 'Database already running.'], 200); - } - StartMongodb::run($resource); - $resource->update([ - 'started_at' => now(), - ]); - return response()->json(['message' => 'Database started.'], 200); - } else if ($type === 'App\Models\StandaloneMysql') { - if (str($resource->status)->startsWith('running')) { - return response()->json(['message' => 'Database already running.'], 200); - } - StartMysql::run($resource); - $resource->update([ - 'started_at' => now(), - ]); - return response()->json(['message' => 'Database started.'], 200); - } else if ($type === 'App\Models\StandaloneMariadb') { - if (str($resource->status)->startsWith('running')) { - return response()->json(['message' => 'Database already running.'], 200); - } - StartMariadb::run($resource); - $resource->update([ - 'started_at' => now(), - ]); - return response()->json(['message' => 'Database started.'], 200); - } else if ($type === 'App\Models\Service') { - StartService::run($resource); - return response()->json(['message' => 'Service started. It could take a while, be patient.'], 200); } } - return response()->json(['error' => "No resource found with {$uuid}."], 404); + if ($message->count() > 0) { + return response()->json(['message' => $message->toArray()], 200); + } + return response()->json(['error' => "No resources found.", 'docs' => 'https://coolify.io/docs/api/deploy-webhook'], 404); }); });