validate($type, $server, $user, $input); if ($type == 'database') { Gate::forUser($user)->authorize('viewAny', [Database::class, $server]); } $backup = new Backup([ 'name' => $input['name'], 'type' => $type, 'server_id' => $server->id, 'database_id' => $input['database'] ?? null, 'storage_id' => $input['storage'], 'interval' => $input['interval'], 'keep_backups' => $input['keep_backups'], 'status' => 'running', ]); $backup->save(); $backup->run(); return $backup; } /** * @throws ValidationException */ private function validate($type, Server $server, User $user, array $input): void { $rules = [ 'name' => 'required', 'storage' => [ 'required', Rule::exists('storage_providers', 'id') ->where('user_id', $user->id) ->where('connected', 1), ], 'keep_backups' => [ 'required', 'numeric', 'min:1', ], 'interval' => [ 'required', Rule::in([ '0 * * * *', '0 0 * * *', '0 0 * * 0', '0 0 1 * *', ]), ], ]; if ($type === 'database') { $rules['database'] = [ 'required', Rule::exists('databases', 'id') ->where('server_id', $server->id) ->where('status', DatabaseStatus::READY), ]; } Validator::make($input, $rules)->validateWithBag('createBackup'); } }