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

@ -0,0 +1,21 @@
@if($status == \App\Enums\BackupFileStatus::CREATED)
<x-status status="success">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupFileStatus::CREATING)
<x-status status="warning">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupFileStatus::FAILED)
<x-status status="danger">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupFileStatus::DELETING)
<x-status status="danger">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupFileStatus::RESTORING)
<x-status status="warning">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupFileStatus::RESTORED)
<x-status status="success">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupFileStatus::RESTORE_FAILED)
<x-status status="danger">{{ $status }}</x-status>
@endif

View File

@ -0,0 +1,9 @@
@if($status == \App\Enums\BackupStatus::RUNNING)
<x-status status="success">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupStatus::DELETING)
<x-status status="danger">{{ $status }}</x-status>
@endif
@if($status == \App\Enums\BackupStatus::FAILED)
<x-status status="danger">{{ $status }}</x-status>
@endif

View File

@ -0,0 +1,78 @@
<x-modal name="create-backup">
<form wire:submit.prevent="create" class="p-6" x-data="{user: false, remote: false}">
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
{{ __('Create Backup') }}
</h2>
<div class="mt-6">
<x-input-label for="database" :value="__('Database')" />
<x-select-input wire:model="database" id="database" name="database" class="mt-1 w-full">
<option value="" selected disabled>{{ __("Select") }}</option>
@foreach($databases as $db)
<option value="{{ $db->id }}" @if($database == $db->id) selected @endif>{{ $db->name }}</option>
@endforeach
</x-select-input>
@error('database')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6">
<x-input-label for="storage" :value="__('Storage')" />
<x-select-input wire:model="storage" id="storage" name="storage" class="mt-1 w-full">
<option value="" selected disabled>{{ __("Select") }}</option>
@foreach(auth()->user()->storageProviders as $st)
<option value="{{ $st->id }}" @if($storage == $st->id) selected @endif>{{ $st->profile }} - {{ $st->provider }}</option>
@endforeach
</x-select-input>
@error('storage')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6">
<x-input-label for="interval" :value="__('Interval')" />
<x-select-input wire:model="interval" id="interval" name="interval" class="mt-1 w-full">
<option value="" selected disabled>{{ __("Select") }}</option>
<option value="0 * * * *" @if($interval === '0 * * * *') selected @endif>{{ __("Hourly") }}</option>
<option value="0 0 * * *" @if($interval === '0 0 * * *') selected @endif>{{ __("Daily") }}</option>
<option value="0 0 * * 0" @if($interval === '0 0 * * 0') selected @endif>{{ __("Weekly") }}</option>
<option value="0 0 1 * *" @if($interval === '0 0 1 * *') selected @endif>{{ __("Monthly") }}</option>
<option value="custom">{{ __("Custom") }}</option>
</x-select-input>
@error('interval')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
@if($interval === 'custom')
<div class="mt-6">
<x-input-label for="custom" :value="__('Custom interval (Cron)')" />
<x-text-input wire:model.defer="custom" id="custom" name="custom" type="text" class="mt-1 w-full" placeholder="* * * * *" />
@error('custom')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
@endif
<div class="mt-6">
<x-input-label for="keep" :value="__('Backups to Keep')" />
<x-text-input wire:model.defer="keep" id="keep" name="keep" type="text" class="mt-1 w-full" />
@error('keep')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6 flex justify-end">
<x-secondary-button type="button" x-on:click="$dispatch('close')">
{{ __('Cancel') }}
</x-secondary-button>
<x-primary-button class="ml-3" @backup-created.window="$dispatch('close')">
{{ __('Create') }}
</x-primary-button>
</div>
</form>
</x-modal>

View File

@ -0,0 +1,6 @@
<x-confirm-modal
name="delete-backup-file"
:title="__('Confirm')"
:description="__('Are you sure that you want to delete this file?')"
method="delete"
/>

View File

@ -0,0 +1,6 @@
<x-confirm-modal
name="delete-backup"
:title="__('Confirm')"
:description="__('Are you sure that you want to delete this backup?')"
method="delete"
/>

View File

@ -0,0 +1,30 @@
<x-modal name="restore-backup">
<form wire:submit.prevent="restore" class="p-6" x-data="{}">
<h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
{{ __('Restore Backup') }}
</h2>
<div class="mt-6">
<x-input-label for="database" :value="__('Database')" />
<x-select-input wire:model="restoreDatabaseId" id="restoreDatabaseId" name="restoreDatabaseId" class="mt-1 w-full">
<option value="" selected disabled>{{ __("Select") }}</option>
@foreach($databases as $db)
<option value="{{ $db->id }}" @if($restoreDatabaseId == $db->id) selected @endif>{{ $db->name }}</option>
@endforeach
</x-select-input>
@error('restoreDatabaseId')
<x-input-error class="mt-2" :messages="$message" />
@enderror
</div>
<div class="mt-6 flex justify-end">
<x-secondary-button type="button" x-on:click="$dispatch('close')">
{{ __('Cancel') }}
</x-secondary-button>
<x-primary-button class="ml-3" @restored.window="$dispatch('close')">
{{ __('Restore') }}
</x-primary-button>
</div>
</form>
</x-modal>