From a0b47df84b3c325044cb172fd2e5c30105ca5cf6 Mon Sep 17 00:00:00 2001 From: shimon Date: Sun, 8 Jan 2023 09:19:08 +0200 Subject: [PATCH] deletes-queue --- app/controllers/api/databases.php | 18 +++++++-------- app/controllers/api/functions.php | 12 +++++----- app/controllers/api/projects.php | 18 +++++++-------- app/controllers/api/storage.php | 18 +++++++-------- app/controllers/api/teams.php | 6 ++--- app/controllers/api/users.php | 6 ++--- app/controllers/general.php | 5 +++-- app/controllers/shared/api.php | 8 +++---- docker-compose.yml | 25 +++++++++------------ src/Appwrite/Platform/Tasks/EdgeSync.php | 2 +- src/Appwrite/Platform/Tasks/Maintenance.php | 20 +++++++++-------- src/Appwrite/Platform/Tasks/SSL.php | 10 ++++++--- 12 files changed, 75 insertions(+), 73 deletions(-) diff --git a/app/controllers/api/databases.php b/app/controllers/api/databases.php index 5022681d87..1439a0c61f 100644 --- a/app/controllers/api/databases.php +++ b/app/controllers/api/databases.php @@ -442,8 +442,8 @@ App::delete('/v1/databases/:databaseId') ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('deletes') - ->action(function (string $databaseId, Response $response, Database $dbForProject, Event $events, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $databaseId, Response $response, Database $dbForProject, Event $events, Delete $queueForDeletes) { $database = $dbForProject->getDocument('databases', $databaseId); @@ -457,7 +457,7 @@ App::delete('/v1/databases/:databaseId') $dbForProject->deleteCachedCollection('databases' . $database->getInternalId()); - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($database) ; @@ -814,8 +814,8 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('deletes') - ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject, Event $events, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $databaseId, string $collectionId, Response $response, Database $dbForProject, Event $events, Delete $queueForDeletes) { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -835,7 +835,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId') $dbForProject->deleteCachedCollection('database_' . $database->getInternalId() . '_collection_' . $collection->getInternalId()); - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($collection) ; @@ -2380,9 +2380,9 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('deletes') + ->inject('queueForDeletes') ->inject('mode') - ->action(function (string $databaseId, string $collectionId, string $documentId, Response $response, Database $dbForProject, Event $events, Delete $deletes, string $mode) { + ->action(function (string $databaseId, string $collectionId, string $documentId, Response $response, Database $dbForProject, Event $events, Delete $queueForDeletes, string $mode) { $database = Authorization::skip(fn () => $dbForProject->getDocument('databases', $databaseId)); @@ -2430,7 +2430,7 @@ App::delete('/v1/databases/:databaseId/collections/:collectionId/documents/:docu $document->setAttribute('$collectionId', $collectionId); $document->setAttribute('$databaseId', $databaseId); - $deletes + $queueForDeletes ->setType(DELETE_TYPE_AUDIT) ->setDocument($document) ; diff --git a/app/controllers/api/functions.php b/app/controllers/api/functions.php index 4c84795712..3d0ff0e179 100644 --- a/app/controllers/api/functions.php +++ b/app/controllers/api/functions.php @@ -572,11 +572,11 @@ App::delete('/v1/functions/:functionId') ->param('functionId', '', new UID(), 'Function ID.') ->inject('response') ->inject('dbForProject') - ->inject('deletes') + ->inject('queueForDeletes') ->inject('events') ->inject('project') ->inject('dbForConsole') - ->action(function (string $functionId, Response $response, Database $dbForProject, Delete $deletes, Event $events, Document $project, Database $dbForConsole) { + ->action(function (string $functionId, Response $response, Database $dbForProject, Delete $queueForDeletes, Event $events, Document $project, Database $dbForConsole) { $function = $dbForProject->getDocument('functions', $functionId); @@ -597,7 +597,7 @@ App::delete('/v1/functions/:functionId') Authorization::skip(fn () => $dbForConsole->updateDocument('schedules', $schedule->getId(), $schedule)); - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($function); @@ -939,10 +939,10 @@ App::delete('/v1/functions/:functionId/deployments/:deploymentId') ->param('deploymentId', '', new UID(), 'Deployment ID.') ->inject('response') ->inject('dbForProject') - ->inject('deletes') + ->inject('queueForDeletes') ->inject('events') ->inject('deviceFunctions') - ->action(function (string $functionId, string $deploymentId, Response $response, Database $dbForProject, Delete $deletes, Event $events, Device $deviceFunctions) { + ->action(function (string $functionId, string $deploymentId, Response $response, Database $dbForProject, Delete $queueForDeletes, Event $events, Device $deviceFunctions) { $function = $dbForProject->getDocument('functions', $functionId); if ($function->isEmpty()) { @@ -974,7 +974,7 @@ App::delete('/v1/functions/:functionId/deployments/:deploymentId') ->setParam('functionId', $function->getId()) ->setParam('deploymentId', $deployment->getId()); - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($deployment); diff --git a/app/controllers/api/projects.php b/app/controllers/api/projects.php index 5fef7eab78..4c4e84467c 100644 --- a/app/controllers/api/projects.php +++ b/app/controllers/api/projects.php @@ -483,8 +483,8 @@ App::delete('/v1/projects/:projectId') ->inject('response') ->inject('user') ->inject('dbForConsole') - ->inject('deletes') - ->action(function (string $projectId, string $password, Response $response, Document $user, Database $dbForConsole, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $projectId, string $password, Response $response, Document $user, Database $dbForConsole, Delete $queueForDeletes) { if (!Auth::passwordVerify($password, $user->getAttribute('password'), $user->getAttribute('hash'), $user->getAttribute('hashOptions'))) { // Double check user password throw new Exception(Exception::USER_INVALID_CREDENTIALS); @@ -496,7 +496,7 @@ App::delete('/v1/projects/:projectId') throw new Exception(Exception::PROJECT_NOT_FOUND); } - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($project) ; @@ -1314,7 +1314,8 @@ App::patch('/v1/projects/:projectId/domains/:domainId/verification') ->param('domainId', '', new UID(), 'Domain unique ID.') ->inject('response') ->inject('dbForConsole') - ->action(function (string $projectId, string $domainId, Response $response, Database $dbForConsole) { + ->inject('queueForCertificates') + ->action(function (string $projectId, string $domainId, Response $response, Database $dbForConsole, Certificate $queueForCertificates) { $project = $dbForConsole->getDocument('projects', $projectId); @@ -1352,8 +1353,7 @@ App::patch('/v1/projects/:projectId/domains/:domainId/verification') $dbForConsole->deleteCachedDocument('projects', $project->getId()); // Issue a TLS certificate when domain is verified - $event = new Certificate(); - $event + $queueForCertificates ->setDomain($domain) ->trigger(); @@ -1373,8 +1373,8 @@ App::delete('/v1/projects/:projectId/domains/:domainId') ->param('domainId', '', new UID(), 'Domain unique ID.') ->inject('response') ->inject('dbForConsole') - ->inject('deletes') - ->action(function (string $projectId, string $domainId, Response $response, Database $dbForConsole, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $projectId, string $domainId, Response $response, Database $dbForConsole, Delete $queueForDeletes) { $project = $dbForConsole->getDocument('projects', $projectId); @@ -1395,7 +1395,7 @@ App::delete('/v1/projects/:projectId/domains/:domainId') $dbForConsole->deleteCachedDocument('projects', $project->getId()); - $deletes + $queueForDeletes ->setType(DELETE_TYPE_CERTIFICATES) ->setDocument($domain); diff --git a/app/controllers/api/storage.php b/app/controllers/api/storage.php index 71979cca55..a7f1ec985e 100644 --- a/app/controllers/api/storage.php +++ b/app/controllers/api/storage.php @@ -300,9 +300,9 @@ App::delete('/v1/storage/buckets/:bucketId') ->param('bucketId', '', new UID(), 'Bucket unique ID.') ->inject('response') ->inject('dbForProject') - ->inject('deletes') + ->inject('queueForDeletes') ->inject('events') - ->action(function (string $bucketId, Response $response, Database $dbForProject, Delete $deletes, Event $events) { + ->action(function (string $bucketId, Response $response, Database $dbForProject, Delete $queueForDeletes, Event $events) { $bucket = $dbForProject->getDocument('buckets', $bucketId); if ($bucket->isEmpty()) { @@ -313,7 +313,7 @@ App::delete('/v1/storage/buckets/:bucketId') throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Failed to remove bucket from DB'); } - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($bucket); @@ -359,8 +359,8 @@ App::post('/v1/storage/buckets/:bucketId/files') ->inject('mode') ->inject('deviceFiles') ->inject('deviceLocal') - ->inject('deletes') - ->action(function (string $bucketId, string $fileId, mixed $file, ?array $permissions, Request $request, Response $response, Database $dbForProject, Document $user, Event $events, string $mode, Device $deviceFiles, Device $deviceLocal, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $bucketId, string $fileId, mixed $file, ?array $permissions, Request $request, Response $response, Database $dbForProject, Document $user, Event $events, string $mode, Device $deviceFiles, Device $deviceLocal, Delete $queueForDeletes) { $bucket = Authorization::skip(fn () => $dbForProject->getDocument('buckets', $bucketId)); @@ -642,7 +642,7 @@ App::post('/v1/storage/buckets/:bucketId/files') ->setContext('bucket', $bucket) ; - $deletes + $queueForDeletes ->setType(DELETE_TYPE_CACHE_BY_RESOURCE) ->setResource('file/' . $file->getId()) ; @@ -1364,8 +1364,8 @@ App::delete('/v1/storage/buckets/:bucketId/files/:fileId') ->inject('events') ->inject('mode') ->inject('deviceFiles') - ->inject('deletes') - ->action(function (string $bucketId, string $fileId, Response $response, Database $dbForProject, Event $events, string $mode, Device $deviceFiles, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $bucketId, string $fileId, Response $response, Database $dbForProject, Event $events, string $mode, Device $deviceFiles, Delete $queueForDeletes) { $bucket = Authorization::skip(fn () => $dbForProject->getDocument('buckets', $bucketId)); if ($bucket->isEmpty() || (!$bucket->getAttribute('enabled') && $mode !== APP_MODE_ADMIN)) { @@ -1402,7 +1402,7 @@ App::delete('/v1/storage/buckets/:bucketId/files/:fileId') } if ($deviceDeleted) { - $deletes + $queueForDeletes ->setType(DELETE_TYPE_CACHE_BY_RESOURCE) ->setResource('file/' . $fileId) ; diff --git a/app/controllers/api/teams.php b/app/controllers/api/teams.php index 572b6f02a8..5370744343 100644 --- a/app/controllers/api/teams.php +++ b/app/controllers/api/teams.php @@ -246,8 +246,8 @@ App::delete('/v1/teams/:teamId') ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('deletes') - ->action(function (string $teamId, Response $response, Database $dbForProject, Event $events, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $teamId, Response $response, Database $dbForProject, Event $events, Delete $queueForDeletes) { $team = $dbForProject->getDocument('teams', $teamId); @@ -271,7 +271,7 @@ App::delete('/v1/teams/:teamId') throw new Exception(Exception::GENERAL_SERVER_ERROR, 'Failed to remove team from DB'); } - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($team); diff --git a/app/controllers/api/users.php b/app/controllers/api/users.php index dce493b024..b71c33862d 100644 --- a/app/controllers/api/users.php +++ b/app/controllers/api/users.php @@ -1070,8 +1070,8 @@ App::delete('/v1/users/:userId') ->inject('response') ->inject('dbForProject') ->inject('events') - ->inject('deletes') - ->action(function (string $userId, Response $response, Database $dbForProject, Event $events, Delete $deletes) { + ->inject('queueForDeletes') + ->action(function (string $userId, Response $response, Database $dbForProject, Event $events, Delete $queueForDeletes) { $user = $dbForProject->getDocument('users', $userId); @@ -1084,7 +1084,7 @@ App::delete('/v1/users/:userId') $dbForProject->deleteDocument('users', $userId); - $deletes + $queueForDeletes ->setType(DELETE_TYPE_DOCUMENT) ->setDocument($clone); diff --git a/app/controllers/general.php b/app/controllers/general.php index 95bece43fc..d432916d7a 100644 --- a/app/controllers/general.php +++ b/app/controllers/general.php @@ -52,7 +52,8 @@ App::init() ->inject('locale') ->inject('clients') ->inject('servers') - ->action(function (App $utopia, Request $request, Response $response, Document $console, Document $project, Database $dbForConsole, Document $user, Locale $locale, array $clients, array $servers) { + ->inject('queueForCertificates') + ->action(function (App $utopia, Request $request, Response $response, Document $console, Document $project, Database $dbForConsole, Document $user, Locale $locale, array $clients, array $servers, Certificate $queueForCertificates) { /* * Request format */ @@ -123,7 +124,7 @@ App::init() Console::info('Issuing a TLS certificate for the main domain (' . $domain->get() . ') in a few seconds...'); - (new Certificate()) + $queueForCertificates ->setDomain($domainDocument) ->trigger(); } diff --git a/app/controllers/shared/api.php b/app/controllers/shared/api.php index c61a4f6f91..4682942b95 100644 --- a/app/controllers/shared/api.php +++ b/app/controllers/shared/api.php @@ -102,11 +102,11 @@ App::init() ->inject('audits') ->inject('mails') ->inject('usage') - ->inject('deletes') + ->inject('queueForDeletes') ->inject('database') ->inject('dbForProject') ->inject('mode') - ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $events, Audit $audits, Mail $mails, Stats $usage, Delete $deletes, EventDatabase $database, Database $dbForProject, string $mode) use ($databaseListener) { + ->action(function (App $utopia, Request $request, Response $response, Document $project, Document $user, Event $events, Audit $audits, Mail $mails, Stats $usage, Delete $queueForDeletes, EventDatabase $database, Database $dbForProject, string $mode) use ($databaseListener) { $route = $utopia->match($request); @@ -200,7 +200,7 @@ App::init() ->setParam('project.{scope}.network.inbound', 0) ->setParam('project.{scope}.network.outbound', 0); - $deletes->setProject($project); + $queueForDeletes->setProject($project); $database->setProject($project); $dbForProject->on(Database::EVENT_DOCUMENT_CREATE, fn ($event, Document $document) => $databaseListener($event, $document, $usage)); @@ -329,7 +329,7 @@ App::shutdown() ->inject('events') ->inject('audits') ->inject('usage') - ->inject('deletes') + ->inject('queueForDeletes') ->inject('database') ->inject('mode') ->inject('dbForProject') diff --git a/docker-compose.yml b/docker-compose.yml index fe430fbb07..22043ad1cb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -621,11 +621,14 @@ services: - ./app:/usr/src/code/app - ./src:/usr/src/code/src depends_on: + - mariadb - redis environment: - _APP_ENV - - _APP_WORKER_PER_CORE - _APP_CONNECTIONS_MAX + - _APP_CONNECTIONS_DB_CONSOLE + - _APP_CONNECTIONS_CACHE + - _APP_CONNECTIONS_QUEUE - _APP_POOL_CLIENTS - _APP_DOMAIN - _APP_DOMAIN_TARGET @@ -639,10 +642,6 @@ services: - _APP_REDIS_PORT - _APP_REDIS_USER - _APP_REDIS_PASS - - _APP_CONNECTIONS_DB_PROJECT - - _APP_CONNECTIONS_DB_CONSOLE - - _APP_CONNECTIONS_CACHE - - _APP_CONNECTIONS_QUEUE - _APP_MAINTENANCE_INTERVAL - _APP_MAINTENANCE_RETENTION_EXECUTION - _APP_MAINTENANCE_RETENTION_CACHE @@ -661,11 +660,16 @@ services: volumes: - ./app:/usr/src/code/app - ./src:/usr/src/code/src - - ./vendor/utopia-php/cli:/usr/src/code/vendor/utopia-php/cli depends_on: - mariadb - redis environment: + - _APP_CONNECTIONS_MAX + - _APP_CONNECTIONS_DB_PROJECT + - _APP_CONNECTIONS_DB_CONSOLE + - _APP_CONNECTIONS_CACHE + - _APP_CONNECTIONS_QUEUE + - _APP_POOL_CLIENTS - _APP_ENV - _APP_REDIS_HOST - _APP_REDIS_PORT @@ -676,15 +680,8 @@ services: - _APP_DB_SCHEMA - _APP_DB_USER - _APP_DB_PASS - - _APP_CONNECTIONS_MAX - - _APP_POOL_CLIENTS - _APP_SYNC_EDGE_INTERVAL - - _APP_CONNECTIONS_DB_PROJECT - - _APP_CONNECTIONS_DB_CONSOLE - - _APP_CONNECTIONS_CACHE - - _APP_CONNECTIONS_QUEUE - _APP_REGION - - _APP_WORKER_PER_CORE appwrite-usage: entrypoint: usage @@ -739,7 +736,6 @@ services: - redis environment: - _APP_ENV - - _APP_WORKER_PER_CORE - _APP_CONNECTIONS_MAX - _APP_POOL_CLIENTS - _APP_REDIS_HOST @@ -754,7 +750,6 @@ services: - _APP_CONNECTIONS_DB_PROJECT - _APP_CONNECTIONS_DB_CONSOLE - _APP_CONNECTIONS_CACHE - - _APP_CONNECTIONS_QUEUE - _APP_REGION openruntimes-executor: diff --git a/src/Appwrite/Platform/Tasks/EdgeSync.php b/src/Appwrite/Platform/Tasks/EdgeSync.php index f4450785dc..ce30729960 100644 --- a/src/Appwrite/Platform/Tasks/EdgeSync.php +++ b/src/Appwrite/Platform/Tasks/EdgeSync.php @@ -83,7 +83,7 @@ class EdgeSync extends Action ]); } } - if (!$found) { + if (!$found) { Console::info("[{$time}] No keys where found for region {$code}."); } } diff --git a/src/Appwrite/Platform/Tasks/Maintenance.php b/src/Appwrite/Platform/Tasks/Maintenance.php index 2f236d32ca..94d42a6a53 100644 --- a/src/Appwrite/Platform/Tasks/Maintenance.php +++ b/src/Appwrite/Platform/Tasks/Maintenance.php @@ -29,6 +29,9 @@ class Maintenance extends Action ->callback(fn (Database $dbForConsole, Certificate $queueForCertificates, Delete $queueForDeletes) => $this->action($dbForConsole, $queueForCertificates, $queueForDeletes)); } + /** + * @throws \Exception + */ public function action(Database $dbForConsole, Certificate $queueForCertificates, Delete $queueForDeletes): void { Console::title('Maintenance V1'); @@ -36,7 +39,7 @@ class Maintenance extends Action function notifyDeleteExecutionLogs(int $interval, Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_EXECUTIONS) ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) ->trigger(); @@ -44,7 +47,7 @@ class Maintenance extends Action function notifyDeleteAbuseLogs(int $interval, Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_ABUSE) ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) ->trigger(); @@ -52,7 +55,7 @@ class Maintenance extends Action function notifyDeleteAuditLogs(int $interval, Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_AUDIT) ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) ->trigger(); @@ -60,7 +63,7 @@ class Maintenance extends Action function notifyDeleteUsageStats(int $usageStatsRetentionHourly, Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_USAGE) ->setUsageRetentionHourlyDateTime(DateTime::addSeconds(new \DateTime(), -1 * $usageStatsRetentionHourly)) ->trigger(); @@ -68,7 +71,7 @@ class Maintenance extends Action function notifyDeleteConnections(Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_REALTIME) ->setDatetime(DateTime::addSeconds(new \DateTime(), -60)) ->trigger(); @@ -76,7 +79,7 @@ class Maintenance extends Action function notifyDeleteExpiredSessions(Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_SESSIONS) ->trigger(); } @@ -110,7 +113,7 @@ class Maintenance extends Action function notifyDeleteCache($interval, Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_CACHE_BY_TIMESTAMP) ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) ->trigger(); @@ -119,7 +122,7 @@ class Maintenance extends Action function notifyDeleteSchedules($interval, Delete $queueForDeletes) { - ($queueForDeletes) + $queueForDeletes ->setType(DELETE_TYPE_SCHEDULES) ->setDatetime(DateTime::addSeconds(new \DateTime(), -1 * $interval)) ->trigger(); @@ -131,7 +134,6 @@ class Maintenance extends Action $auditLogRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_AUDIT', '1209600'); $abuseLogsRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_ABUSE', '86400'); $usageStatsRetentionHourly = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_USAGE_HOURLY', '8640000'); //100 days - $cacheRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_CACHE', '2592000'); // 30 days $schedulesDeletionRetention = (int) App::getEnv('_APP_MAINTENANCE_RETENTION_SCHEDULES', '86400'); // 1 Day diff --git a/src/Appwrite/Platform/Tasks/SSL.php b/src/Appwrite/Platform/Tasks/SSL.php index 43026b0753..698c950dcc 100644 --- a/src/Appwrite/Platform/Tasks/SSL.php +++ b/src/Appwrite/Platform/Tasks/SSL.php @@ -21,14 +21,18 @@ class SSL extends Action $this ->desc('Validate server certificates') ->param('domain', App::getEnv('_APP_DOMAIN', ''), new Hostname(), 'Domain to generate certificate for. If empty, main domain will be used.', true) - ->callback(fn ($domain) => $this->action($domain)); + ->inject('queueForCertificates') + ->callback(fn ($domain, Certificate $queueForCertificates) => $this->action($domain, $queueForCertificates)); } - public function action(string $domain): void + /** + * @throws \Exception + */ + public function action(string $domain, Certificate $queueForCertificates): void { Console::success('Scheduling a job to issue a TLS certificate for domain: ' . $domain); - (new Certificate()) + $queueForCertificates ->setDomain(new Document([ 'domain' => $domain ]))