database backups

This commit is contained in:
Saeed Vaziry
2023-08-25 21:05:18 +02:00
parent f9ac454a7c
commit ea3f011f34
55 changed files with 1111 additions and 172 deletions

View File

@ -2,14 +2,24 @@
namespace App\Http\Controllers;
use App\Models\Backup;
use App\Models\Server;
use Illuminate\Contracts\View\View;
class DatabaseController extends Controller
{
public function index(Server $server)
public function index(Server $server): View
{
return view('databases.index', [
'server' => $server,
]);
}
public function backups(Server $server, Backup $backup): View
{
return view('databases.backups', [
'server' => $server,
'backup' => $backup,
]);
}
}

View File

@ -0,0 +1,67 @@
<?php
namespace App\Http\Livewire\Databases;
use App\Models\Backup;
use App\Models\BackupFile;
use App\Models\Database;
use App\Models\Server;
use App\Traits\HasCustomPaginationView;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class DatabaseBackupFiles extends Component
{
use HasCustomPaginationView;
use RefreshComponentOnBroadcast;
public Server $server;
public Backup $backup;
public string $restoreId = "";
public string $restoreDatabaseId = "";
public int $deleteId;
public function backup(): void
{
$this->backup->run();
$this->refreshComponent([]);
}
public function restore(): void
{
/** @var BackupFile $file */
$file = BackupFile::query()->findOrFail($this->restoreId);
/** @var Database $database */
$database = Database::query()->findOrFail($this->restoreDatabaseId);
$file->restore($database);
$this->refreshComponent([]);
$this->dispatchBrowserEvent('restored', true);
}
public function delete(): void
{
/** @var BackupFile $file */
$file = BackupFile::query()->findOrFail($this->deleteId);
$file->delete();
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.databases.database-backup-files', [
'files' => $this->backup->files()->orderByDesc('id')->simplePaginate(10)
]);
}
}

View File

@ -0,0 +1,81 @@
<?php
namespace App\Http\Livewire\Databases;
use App\Actions\Database\CreateBackup;
use App\Models\Backup;
use App\Models\Server;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\Pagination\Paginator;
use Illuminate\Contracts\View\View;
use Livewire\Component;
use Livewire\WithPagination;
class DatabaseBackups extends Component
{
use RefreshComponentOnBroadcast;
use WithPagination;
public Server $server;
public int $deleteId;
public string $database = '';
public string $storage = '';
public string $interval = '';
public string $custom = '';
public int $keep = 10;
public ?Backup $backup = null;
protected ?Paginator $files = null;
public function create(): void
{
app(CreateBackup::class)->create('database', $this->server, $this->all());
$this->refreshComponent([]);
$this->dispatchBrowserEvent('backup-created', true);
}
public function files(int $id): void
{
$backup = Backup::query()->findOrFail($id);
$this->backup = $backup;
$this->files = $backup->files()->orderByDesc('id')->simplePaginate(1);
$this->dispatchBrowserEvent('show-files', true);
}
public function backup(): void
{
$this->backup?->run();
$this->files = $this->backup?->files()->orderByDesc('id')->simplePaginate();
$this->dispatchBrowserEvent('backup-running', true);
}
public function delete(): void
{
/** @var Backup $backup */
$backup = Backup::query()->findOrFail($this->deleteId);
$backup->delete();
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.databases.database-backups', [
'backups' => $this->server->backups,
'databases' => $this->server->databases,
'files' => $this->files
]);
}
}

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Livewire\StorageProviders;
use App\Actions\StorageProvider\CreateStorageProvider;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ConnectProvider extends Component
{
public string $provider = '';
public string $name;
public string $token;
public function connect(): void
{
app(CreateStorageProvider::class)->create(auth()->user(), $this->all());
$this->emitTo(ProvidersList::class, '$refresh');
$this->dispatchBrowserEvent('connected', true);
}
public function render(): View
{
return view('livewire.storage-providers.connect-provider');
}
}

View File

@ -0,0 +1,37 @@
<?php
namespace App\Http\Livewire\StorageProviders;
use App\Models\StorageProvider;
use App\Traits\RefreshComponentOnBroadcast;
use Illuminate\Contracts\View\View;
use Livewire\Component;
class ProvidersList extends Component
{
use RefreshComponentOnBroadcast;
public int $deleteId;
protected $listeners = [
'$refresh',
];
public function delete(): void
{
$provider = StorageProvider::query()->findOrFail($this->deleteId);
$provider->delete();
$this->refreshComponent([]);
$this->dispatchBrowserEvent('confirmed', true);
}
public function render(): View
{
return view('livewire.storage-providers.providers-list', [
'providers' => StorageProvider::query()->latest()->get(),
]);
}
}