#591 - cron jobs

This commit is contained in:
Saeed Vaziry
2025-05-28 00:19:25 +02:00
parent 6032bd1098
commit 61506ff70e
22 changed files with 938 additions and 87 deletions

View File

@ -3,18 +3,23 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
use App\ValidationRules\CronRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class CreateCronJob
{
/**
* @param array<string, mixed> $input
* @param array<string, mixed> $input
* @throws SSHError
*/
public function create(Server $server, array $input): CronJob
{
Validator::make($input, self::rules($input, $server))->validate();
$cronJob = new CronJob([
'server_id' => $server->id,
'user' => $input['user'],
@ -33,7 +38,7 @@ public function create(Server $server, array $input): CronJob
/**
* @param array<string, mixed> $input
* @return array<string, array<mixed>>
* @return array<string, array<int, mixed>>
*/
public static function rules(array $input, Server $server): array
{

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
class DeleteCronJob
{
/**
* @throws SSHError
*/
public function delete(Server $server, CronJob $cronJob): void
{
$user = $cronJob->user;

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
class DisableCronJob
{
/**
* @throws SSHError
*/
public function disable(Server $server, CronJob $cronJob): void
{
$cronJob->status = CronjobStatus::DISABLING;

View File

@ -0,0 +1,68 @@
<?php
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
use App\ValidationRules\CronRule;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
class EditCronJob
{
/**
* @param array<string, mixed> $input
*
* @throws SSHError
*/
public function edit(Server $server, CronJob $cronJob, array $input): CronJob
{
Validator::make($input, self::rules($input, $server))->validate();
$cronJob->update([
'user' => $input['user'],
'command' => $input['command'],
'frequency' => $input['frequency'] == 'custom' ? $input['custom'] : $input['frequency'],
'status' => CronjobStatus::UPDATING,
]);
$cronJob->save();
$server->cron()->update($cronJob->user, CronJob::crontab($server, $cronJob->user));
$cronJob->status = CronjobStatus::READY;
$cronJob->save();
return $cronJob;
}
/**
* @param array<string, mixed> $input
* @return array<string, array<int, mixed>>
*/
public static function rules(array $input, Server $server): array
{
$rules = [
'command' => [
'required',
],
'user' => [
'required',
Rule::in($server->getSshUsers()),
],
'frequency' => [
'required',
new CronRule(acceptCustom: true),
],
];
if (isset($input['frequency']) && $input['frequency'] == 'custom') {
$rules['custom'] = [
'required',
new CronRule,
];
}
return $rules;
}
}

View File

@ -3,11 +3,15 @@
namespace App\Actions\CronJob;
use App\Enums\CronjobStatus;
use App\Exceptions\SSHError;
use App\Models\CronJob;
use App\Models\Server;
class EnableCronJob
{
/**
* @throws SSHError
*/
public function enable(Server $server, CronJob $cronJob): void
{
$cronJob->status = CronjobStatus::ENABLING;