From 86c8ec9c20b7f2f4dcc8ed1b75efa39b7b2b2763 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Thu, 19 Mar 2026 12:04:16 +0100
Subject: [PATCH] feat(storage): group backups by database and filter by s3
status
Group backup schedules by their parent database (type + ID) for better
organization in the UI. Filter to only display backups with save_s3
enabled. Restructure the template to show database name as a header with
nested backups underneath, allowing clearer visualization of which
backups belong to each database. Add key binding to livewire component
to ensure proper re-rendering when resources change.
---
app/Livewire/Storage/Resources.php | 6 +-
.../livewire/storage/resources.blade.php | 123 ++++++++++--------
.../views/livewire/storage/show.blade.php | 2 +-
3 files changed, 76 insertions(+), 55 deletions(-)
diff --git a/app/Livewire/Storage/Resources.php b/app/Livewire/Storage/Resources.php
index f17175013..30ac67066 100644
--- a/app/Livewire/Storage/Resources.php
+++ b/app/Livewire/Storage/Resources.php
@@ -13,11 +13,13 @@ class Resources extends Component
public function render()
{
$backups = ScheduledDatabaseBackup::where('s3_storage_id', $this->storage->id)
+ ->where('save_s3', true)
->with('database')
- ->get();
+ ->get()
+ ->groupBy(fn ($backup) => $backup->database_type.'-'.$backup->database_id);
return view('livewire.storage.resources', [
- 'backups' => $backups,
+ 'groupedBackups' => $backups,
]);
}
}
diff --git a/resources/views/livewire/storage/resources.blade.php b/resources/views/livewire/storage/resources.blade.php
index 29d26d4f5..4fdef1e4b 100644
--- a/resources/views/livewire/storage/resources.blade.php
+++ b/resources/views/livewire/storage/resources.blade.php
@@ -1,62 +1,81 @@
-
- @forelse ($backups as $backup)
- @php
- $database = $backup->database;
- $databaseName = $database?->name ?? 'Deleted database';
- $link = null;
- if ($database && $database instanceof \App\Models\ServiceDatabase) {
- $service = $database->service;
- if ($service) {
- $environment = $service->environment;
- $project = $environment?->project;
- if ($project && $environment) {
- $link = route('project.service.configuration', [
- 'project_uuid' => $project->uuid,
- 'environment_uuid' => $environment->uuid,
- 'service_uuid' => $service->uuid,
- ]);
- }
- }
- } elseif ($database) {
- $environment = $database->environment;
+ @forelse ($groupedBackups as $backups)
+ @php
+ $firstBackup = $backups->first();
+ $database = $firstBackup->database;
+ $databaseName = $database?->name ?? 'Deleted database';
+ $resourceLink = null;
+ $backupParams = null;
+ if ($database && $database instanceof \App\Models\ServiceDatabase) {
+ $service = $database->service;
+ if ($service) {
+ $environment = $service->environment;
$project = $environment?->project;
if ($project && $environment) {
- $link = route('project.database.backup.index', [
+ $resourceLink = route('project.service.configuration', [
'project_uuid' => $project->uuid,
'environment_uuid' => $environment->uuid,
- 'database_uuid' => $database->uuid,
+ 'service_uuid' => $service->uuid,
]);
}
}
- @endphp
- @if ($link)
-
- @else
-
- @endif
-
-
- {{ $databaseName }}
-
-
- Frequency: {{ $backup->frequency }}
-
- @if (!$backup->enabled)
-
- Disabled
-
- @endif
-
- @if ($link)
-
- @else
-
- @endif
- @empty
-
-
No backup schedules are using this storage.
+ } elseif ($database) {
+ $environment = $database->environment;
+ $project = $environment?->project;
+ if ($project && $environment) {
+ $resourceLink = route('project.database.backup.index', [
+ 'project_uuid' => $project->uuid,
+ 'environment_uuid' => $environment->uuid,
+ 'database_uuid' => $database->uuid,
+ ]);
+ $backupParams = [
+ 'project_uuid' => $project->uuid,
+ 'environment_uuid' => $environment->uuid,
+ 'database_uuid' => $database->uuid,
+ ];
+ }
+ }
+ @endphp
+
+
+
+ @empty
+ No backup schedules are using this storage.
+ @endforelse
diff --git a/resources/views/livewire/storage/show.blade.php b/resources/views/livewire/storage/show.blade.php
index e54de37f3..0d580486e 100644
--- a/resources/views/livewire/storage/show.blade.php
+++ b/resources/views/livewire/storage/show.blade.php
@@ -46,7 +46,7 @@
@if ($currentRoute === 'storage.show')
@elseif ($currentRoute === 'storage.resources')
-
+
@endif