Skip to content

Commit ec070d9

Browse files
FIX (storages): Load storage from StorageRepository in critical places to join all relations
1 parent aad1016 commit ec070d9

File tree

7 files changed

+40
-9
lines changed

7 files changed

+40
-9
lines changed

backend/internal/features/backups/background_service.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package backups
33
import (
44
"postgresus-backend/internal/config"
55
"postgresus-backend/internal/features/databases"
6+
"postgresus-backend/internal/features/storages"
67
"postgresus-backend/internal/util/logger"
78
"time"
89
)
@@ -11,6 +12,7 @@ type BackupBackgroundService struct {
1112
backupService *BackupService
1213
backupRepository *BackupRepository
1314
databaseService *databases.DatabaseService
15+
storageService *storages.StorageService
1416

1517
lastBackupTime time.Time
1618
}
@@ -111,7 +113,19 @@ func (s *BackupBackgroundService) cleanOldBackups() error {
111113
}
112114

113115
for _, backup := range oldBackups {
114-
backup.DeleteBackupFromStorage()
116+
storage, err := s.storageService.GetStorageByID(backup.StorageID)
117+
if err != nil {
118+
log.Error(
119+
"Failed to get storage by ID",
120+
"storageId",
121+
backup.StorageID,
122+
"error",
123+
err,
124+
)
125+
continue
126+
}
127+
128+
storage.DeleteFile(backup.ID)
115129

116130
if err := s.backupRepository.DeleteByID(backup.ID); err != nil {
117131
log.Error("Failed to delete old backup", "backupId", backup.ID, "error", err)

backend/internal/features/backups/di.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ var backupBackgroundService = &BackupBackgroundService{
2727
backupService,
2828
backupRepository,
2929
databases.GetDatabaseService(),
30+
storages.GetStorageService(),
3031
time.Now().UTC(),
3132
}
3233

backend/internal/features/restores/di.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package restores
33
import (
44
"postgresus-backend/internal/features/backups"
55
"postgresus-backend/internal/features/restores/usecases"
6+
"postgresus-backend/internal/features/storages"
67
"postgresus-backend/internal/features/users"
78
)
89

@@ -11,6 +12,7 @@ var restoreRepository = &RestoreRepository{}
1112
var restoreService = &RestoreService{
1213
backups.GetBackupService(),
1314
restoreRepository,
15+
storages.GetStorageService(),
1416
restoreBackupUsecase,
1517
}
1618
var restoreController = &RestoreController{

backend/internal/features/restores/service.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@ import (
77
"postgresus-backend/internal/features/restores/enums"
88
"postgresus-backend/internal/features/restores/models"
99
"postgresus-backend/internal/features/restores/usecases"
10+
"postgresus-backend/internal/features/storages"
1011
users_models "postgresus-backend/internal/features/users/models"
1112
"time"
1213

1314
"github.com/google/uuid"
1415
)
1516

1617
type RestoreService struct {
17-
backupService *backups.BackupService
18-
restoreRepository *RestoreRepository
19-
18+
backupService *backups.BackupService
19+
restoreRepository *RestoreRepository
20+
storageService *storages.StorageService
2021
restoreBackupUsecase *usecases.RestoreBackupUsecase
2122
}
2223

@@ -102,11 +103,17 @@ func (s *RestoreService) RestoreBackup(
102103
}
103104
}
104105

106+
storage, err := s.storageService.GetStorageByID(backup.StorageID)
107+
if err != nil {
108+
return err
109+
}
110+
105111
start := time.Now().UTC()
106112

107-
err := s.restoreBackupUsecase.Execute(
113+
err = s.restoreBackupUsecase.Execute(
108114
restore,
109115
backup,
116+
storage,
110117
)
111118
if err != nil {
112119
errMsg := err.Error()

backend/internal/features/restores/usecases/postgresql/restore_backup_uc.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"postgresus-backend/internal/features/databases"
1818
pgtypes "postgresus-backend/internal/features/databases/databases/postgresql"
1919
"postgresus-backend/internal/features/restores/models"
20+
"postgresus-backend/internal/features/storages"
2021
"postgresus-backend/internal/util/logger"
2122
"postgresus-backend/internal/util/tools"
2223

@@ -30,6 +31,7 @@ type RestorePostgresqlBackupUsecase struct{}
3031
func (uc *RestorePostgresqlBackupUsecase) Execute(
3132
restore models.Restore,
3233
backup *backups.Backup,
34+
storage *storages.Storage,
3335
) error {
3436
if backup.Database.Type != databases.DatabaseTypePostgres {
3537
return errors.New("database type not supported")
@@ -80,6 +82,7 @@ func (uc *RestorePostgresqlBackupUsecase) Execute(
8082
args,
8183
pg.Password,
8284
backup,
85+
storage,
8386
pg,
8487
)
8588
}
@@ -90,6 +93,7 @@ func (uc *RestorePostgresqlBackupUsecase) restoreFromStorage(
9093
args []string,
9194
password string,
9295
backup *backups.Backup,
96+
storage *storages.Storage,
9397
pgConfig *pgtypes.PostgresqlDatabase,
9498
) error {
9599
log.Info(
@@ -148,7 +152,7 @@ func (uc *RestorePostgresqlBackupUsecase) restoreFromStorage(
148152
}
149153

150154
// Download backup to temporary file
151-
tempBackupFile, cleanupFunc, err := uc.downloadBackupToTempFile(ctx, backup)
155+
tempBackupFile, cleanupFunc, err := uc.downloadBackupToTempFile(ctx, backup, storage)
152156
if err != nil {
153157
return fmt.Errorf("failed to download backup to temporary file: %w", err)
154158
}
@@ -164,6 +168,7 @@ func (uc *RestorePostgresqlBackupUsecase) restoreFromStorage(
164168
func (uc *RestorePostgresqlBackupUsecase) downloadBackupToTempFile(
165169
ctx context.Context,
166170
backup *backups.Backup,
171+
storage *storages.Storage,
167172
) (string, func(), error) {
168173
// Create temporary directory for backup data
169174
tempDir, err := os.MkdirTemp(config.GetEnv().TempFolder, "restore_"+uuid.New().String())
@@ -185,7 +190,7 @@ func (uc *RestorePostgresqlBackupUsecase) downloadBackupToTempFile(
185190
"tempFile",
186191
tempBackupFile,
187192
)
188-
backupReader, err := backup.Storage.GetFile(backup.ID)
193+
backupReader, err := storage.GetFile(backup.ID)
189194
if err != nil {
190195
cleanupFunc()
191196
return "", nil, fmt.Errorf("failed to get backup file from storage: %w", err)

backend/internal/features/restores/usecases/restore_backup_uc.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"postgresus-backend/internal/features/databases"
77
"postgresus-backend/internal/features/restores/models"
88
usecases_postgresql "postgresus-backend/internal/features/restores/usecases/postgresql"
9+
"postgresus-backend/internal/features/storages"
910
)
1011

1112
type RestoreBackupUsecase struct {
@@ -15,9 +16,10 @@ type RestoreBackupUsecase struct {
1516
func (uc *RestoreBackupUsecase) Execute(
1617
restore models.Restore,
1718
backup *backups.Backup,
19+
storage *storages.Storage,
1820
) error {
1921
if restore.Backup.Database.Type == databases.DatabaseTypePostgres {
20-
return uc.RestorePostgresqlBackupUsecase.Execute(restore, backup)
22+
return uc.RestorePostgresqlBackupUsecase.Execute(restore, backup, storage)
2123
}
2224

2325
return errors.New("database type not supported")

backend/internal/features/tests/postgresql_backup_restore_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ func testBackupRestoreForVersion(t *testing.T, pgVersion string) {
174174

175175
// Restore the backup
176176
restoreBackupUC := &usecases_postgresql_restore.RestorePostgresqlBackupUsecase{}
177-
err = restoreBackupUC.Execute(restore, completedBackup)
177+
err = restoreBackupUC.Execute(restore, completedBackup, storage)
178178
assert.NoError(t, err)
179179

180180
// Verify restored table exists

0 commit comments

Comments
 (0)