feat: optional S3-compatible storage for uploaded images, instead of the local upload directory
This commit is contained in:
1 parent
d752a61e52
commit
eb9bfabed5
23 files changed
+1962
-7
No files matched your search
@@ -109,8 +109,28 @@ const (
|
||||
backupsDirName = "backups"
|
||||
)
|
||||
|
||||
func imageStorageConfig(settings config.Settings) storage.Config {
|
||||
if settings.Storage.Driver == config.StorageDriverS3 {
|
||||
s3 := settings.Storage.S3
|
||||
return storage.Config{
|
||||
Driver: storage.DriverS3,
|
||||
S3: storage.S3Config{
|
||||
Bucket: s3.Bucket,
|
||||
Region: s3.Region,
|
||||
Endpoint: s3.Endpoint,
|
||||
AccessKeyID: s3.AccessKeyID,
|
||||
SecretAccessKey: s3.SecretAccessKey,
|
||||
KeyPrefix: s3.KeyPrefix,
|
||||
PathStyle: s3.PathStyle,
|
||||
TLS: s3.TLS,
|
||||
},
|
||||
}
|
||||
}
|
||||
return storage.Config{Driver: storage.DriverLocal, Location: settings.UploadDir}
|
||||
}
|
||||
|
||||
func openImageStorage(settings config.Settings) domainImage.Storage {
|
||||
imageStorage, err := storage.Open(storage.Config{Driver: storage.DriverLocal, Location: settings.UploadDir})
|
||||
imageStorage, err := storage.Open(imageStorageConfig(settings))
|
||||
if err != nil {
|
||||
panic("Unable to open the image storage: " + err.Error())
|
||||
}
|
||||
@@ -268,11 +288,21 @@ func startUpdateDownloadUseCase(repos *Repositories, settings config.Settings) *
|
||||
})
|
||||
}
|
||||
|
||||
func backfillImageMetadata(imageRepo domainImage.Repository, imageStorage domainImage.Storage, settings config.Settings) error {
|
||||
run := func(readable domainImage.Storage) error {
|
||||
return useCases.NewBackfillImageMetadataUseCase(imageRepo, readable).Run()
|
||||
}
|
||||
if settings.Storage.Driver == config.StorageDriverS3 {
|
||||
return storage.RunBackfillReportingReads(imageStorage, log.Default(), run)
|
||||
}
|
||||
return run(imageStorage)
|
||||
}
|
||||
|
||||
func InitContainer(settings config.Settings) (*UseCases, func() error) {
|
||||
imageStorage := openImageStorage(settings)
|
||||
connection := openDatabase(settings)
|
||||
repos := getRepositories(connection, settings)
|
||||
if err := useCases.NewBackfillImageMetadataUseCase(repos.ImageRepo, imageStorage).Run(); err != nil {
|
||||
if err := backfillImageMetadata(repos.ImageRepo, imageStorage, settings); err != nil {
|
||||
panic("Failed to backfill image metadata: " + err.Error())
|
||||
}
|
||||
return getUseCases(repos, imageStorage, settings), connection.Close
|
||||
|
||||
Reference in new issue
Block a user