feat(storage): implement provider caching and error logging in asset builder
This commit is contained in:
+1
-1
Submodule docs updated: 8e87834156...16c8145f78
@@ -3,6 +3,8 @@ package builders
|
||||
import (
|
||||
"cs-agent/internal/models"
|
||||
"cs-agent/internal/pkg/dto/response"
|
||||
"cs-agent/internal/services/storage"
|
||||
"log/slog"
|
||||
)
|
||||
|
||||
func BuildAsset(item *models.Asset) response.AssetResponse {
|
||||
@@ -23,5 +25,12 @@ func BuildAsset(item *models.Asset) response.AssetResponse {
|
||||
UpdateUserID: item.UpdateUserID,
|
||||
UpdateUserName: item.UpdateUserName,
|
||||
}
|
||||
|
||||
if provider, err := storage.GetProvider(item.Provider); err != nil {
|
||||
slog.Error("get storage provider failed", "provider", item.Provider, "error", err)
|
||||
} else {
|
||||
ret.URL = provider.GetSignedURL(item.StorageKey)
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
@@ -7,6 +7,8 @@ import (
|
||||
"io"
|
||||
)
|
||||
|
||||
var providers = make(map[enums.AssetProvider]FileStorageProvider)
|
||||
|
||||
type FileStorageProvider interface {
|
||||
ProviderType() enums.AssetProvider
|
||||
Upload(reader io.Reader, key string, info UploadInfo) (*StoredFile, error)
|
||||
@@ -20,6 +22,20 @@ func GetDefault() (FileStorageProvider, error) {
|
||||
return NewProvider(config.Current().Storage.Default)
|
||||
}
|
||||
|
||||
func GetProvider(providerType enums.AssetProvider) (FileStorageProvider, error) {
|
||||
if provider, exists := providers[providerType]; exists {
|
||||
return provider, nil
|
||||
}
|
||||
provider, err := NewProvider(providerType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
providers[providerType] = provider
|
||||
|
||||
return provider, nil
|
||||
}
|
||||
|
||||
func NewProvider(provider enums.AssetProvider) (FileStorageProvider, error) {
|
||||
cfg := config.Current().Storage
|
||||
|
||||
|
||||
Reference in New Issue
Block a user