refactoring (#116)

- refactoring architecture
- fix incomplete ssh logs
- code editor for scripts in the app
- remove Jobs and SSHCommands
This commit is contained in:
Saeed Vaziry
2024-03-14 20:03:43 +01:00
committed by GitHub
parent cee4a70c3c
commit 428140b931
472 changed files with 24110 additions and 8159 deletions

View File

@ -32,7 +32,7 @@ public function create($type, Server $server, array $input): Backup
]);
$backup->save();
$backup->run();
app(RunBackup::class)->run($backup);
return $backup;
}

View File

@ -22,8 +22,6 @@ public function create(Server $server, array $input): Database
'server_id' => $server->id,
'name' => $input['name'],
]);
$database->save();
$server->database()->handler()->create($database->name);
$database->status = DatabaseStatus::READY;
$database->save();

View File

@ -25,8 +25,6 @@ public function create(Server $server, array $input, array $links = []): Databas
'host' => isset($input['remote']) && $input['remote'] ? $input['host'] : 'localhost',
'databases' => $links,
]);
$databaseUser->save();
$server->database()->handler()->createUser(
$databaseUser->username,
$databaseUser->password,
@ -35,8 +33,8 @@ public function create(Server $server, array $input, array $links = []): Databas
$databaseUser->status = DatabaseUserStatus::READY;
$databaseUser->save();
if (count($databaseUser->databases) > 0) {
app(LinkUser::class)->link($databaseUser, $databaseUser->databases);
if (count($links) > 0) {
app(LinkUser::class)->link($databaseUser, ['databases' => $links]);
}
return $databaseUser;

View File

@ -0,0 +1,39 @@
<?php
namespace App\Actions\Database;
use App\Enums\BackupFileStatus;
use App\Models\BackupFile;
use App\Models\Database;
use Illuminate\Support\Facades\Validator;
class RestoreBackup
{
public function restore(BackupFile $backupFile, array $input): void
{
$this->validate($input);
/** @var Database $database */
$database = Database::query()->findOrFail($input['database']);
$backupFile->status = BackupFileStatus::RESTORING;
$backupFile->restored_to = $database->name;
$backupFile->save();
dispatch(function () use ($backupFile, $database) {
$database->server->database()->handler()->restoreBackup($backupFile, $database->name);
$backupFile->status = BackupFileStatus::RESTORED;
$backupFile->restored_at = now();
$backupFile->save();
})->catch(function () use ($backupFile) {
$backupFile->status = BackupFileStatus::RESTORE_FAILED;
$backupFile->save();
})->onConnection('ssh');
}
private function validate(array $input): void
{
Validator::make($input, [
'database' => 'required|exists:databases,id',
])->validate();
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Actions\Database;
use App\Enums\BackupFileStatus;
use App\Models\Backup;
use App\Models\BackupFile;
use Illuminate\Support\Str;
class RunBackup
{
public function run(Backup $backup): void
{
$file = new BackupFile([
'backup_id' => $backup->id,
'name' => Str::of($backup->database->name)->slug().'-'.now()->format('YmdHis'),
'status' => BackupFileStatus::CREATING,
]);
$file->save();
dispatch(function () use ($file) {
$file->backup->server->database()->handler()->runBackup($file);
$file->status = BackupFileStatus::CREATED;
$file->save();
})->catch(function () use ($file) {
$file->status = BackupFileStatus::FAILED;
$file->save();
})->onConnection('ssh');
}
}