added the image backup API

This commit is contained in:
2025-04-05 01:27:08 +08:00
parent ec03d1b865
commit add4af6b19
31 changed files with 472 additions and 75 deletions

View File

@@ -797,6 +797,14 @@ type (
ImageBedUploadListResponse { ImageBedUploadListResponse {
Records []ImageBedUploadMeta `json:"records"` Records []ImageBedUploadMeta `json:"records"`
} }
BackupImageRequest {
OriginProvider string `json:"origin_provider"`
OriginBucket string `json:"origin_bucket"`
OriginRegion string `json:"origin_region"`
TargetProvider string `json:"target_provider"`
TargetBucket string `json:"target_bucket"`
TargetRegion string `json:"target_region"`
}
) )
// 文件上传 // 文件上传
@@ -959,6 +967,10 @@ service auth {
// 获取图床上传的图片列表 // 获取图床上传的图片列表
@handler getImageBedUploadList @handler getImageBedUploadList
post /image/bed/upload/list (ImageBedUploadListRequest) returns (ImageBedUploadListResponse) post /image/bed/upload/list (ImageBedUploadListRequest) returns (ImageBedUploadListResponse)
// 备份图像数据
@handler backupImage
post /image/backup (BackupImageRequest) returns (string)
} }
type ( type (
@@ -1085,6 +1097,16 @@ type (
bindGitee bool `json:"bind_gitee,default=false"` bindGitee bool `json:"bind_gitee,default=false"`
setPassword bool `json:"set_password,default=false"` setPassword bool `json:"set_password,default=false"`
} }
ModifyPersonalInfoRequest {
Nickname string `json:"nickname,optional"`
Avatar string `json:"avatar,optional"`
Email string `json:"email,optional"`
Gender int64 `json:"gender,optional"`
Introduce string `json:"introduce,optional"`
Blog string `json:"blog,optional"`
Location string `json:"location,optional"`
Company string `json:"company,optional"`
}
) )
// 用户服务 // 用户服务
@@ -1107,6 +1129,14 @@ service auth {
// 退出登录 // 退出登录
@handler logout @handler logout
post /logout returns (string) post /logout returns (string)
// 获取个人信息
@handler getPersonalInfo
post /personal/info returns (UserMeta)
// 修改个人信息
@handler modifyPersonalInfo
post /personal/modify (ModifyPersonalInfoRequest) returns (string)
} }
type ( type (

View File

@@ -0,0 +1,21 @@
package auth
import (
"net/http"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/auth"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/common/xhttp"
)
func GetPersonalInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := auth.NewGetPersonalInfoLogic(r.Context(), svcCtx)
resp, err := l.GetPersonalInfo()
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,29 @@
package auth
import (
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/auth"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"schisandra-album-cloud-microservices/common/xhttp"
)
func ModifyPersonalInfoHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.ModifyPersonalInfoRequest
if err := httpx.Parse(r, &req); err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
return
}
l := auth.NewModifyPersonalInfoLogic(r.Context(), svcCtx)
resp, err := l.ModifyPersonalInfo(&req)
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -40,6 +40,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
Path: "/logout", Path: "/logout",
Handler: auth.LogoutHandler(serverCtx), Handler: auth.LogoutHandler(serverCtx),
}, },
{
Method: http.MethodPost,
Path: "/personal/info",
Handler: auth.GetPersonalInfoHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/personal/modify",
Handler: auth.ModifyPersonalInfoHandler(serverCtx),
},
}..., }...,
), ),
rest.WithJwt(serverCtx.Config.Auth.AccessSecret), rest.WithJwt(serverCtx.Config.Auth.AccessSecret),
@@ -381,6 +391,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
Path: "/image/all/list", Path: "/image/all/list",
Handler: storage.QueryAllImageListHandler(serverCtx), Handler: storage.QueryAllImageListHandler(serverCtx),
}, },
{
Method: http.MethodPost,
Path: "/image/backup",
Handler: storage.BackupImageHandler(serverCtx),
},
{ {
Method: http.MethodPost, Method: http.MethodPost,
Path: "/image/bed/upload", Path: "/image/bed/upload",

View File

@@ -0,0 +1,29 @@
package storage
import (
"net/http"
"github.com/zeromicro/go-zero/rest/httpx"
"schisandra-album-cloud-microservices/app/auth/api/internal/logic/storage"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"schisandra-album-cloud-microservices/common/xhttp"
)
func BackupImageHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.BackupImageRequest
if err := httpx.Parse(r, &req); err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
return
}
l := storage.NewBackupImageLogic(r.Context(), svcCtx)
resp, err := l.BackupImage(&req)
if err != nil {
xhttp.JsonBaseResponseCtx(r.Context(), w, err)
} else {
xhttp.JsonBaseResponseCtx(r.Context(), w, resp)
}
}
}

View File

@@ -0,0 +1,39 @@
package auth
import (
"context"
"errors"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type GetPersonalInfoLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewGetPersonalInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetPersonalInfoLogic {
return &GetPersonalInfoLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *GetPersonalInfoLogic) GetPersonalInfo() (resp *types.UserMeta, err error) {
uid, ok := l.ctx.Value("user_id").(string)
if !ok {
return nil, errors.New("user_id not found")
}
authUser := l.svcCtx.DB.ScaAuthUser
err = authUser.Where(authUser.UID.Eq(uid)).Scan(&resp)
if err != nil {
return nil, err
}
return resp, nil
}

View File

@@ -0,0 +1,42 @@
package auth
import (
"context"
"errors"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
"github.com/zeromicro/go-zero/core/logx"
)
type ModifyPersonalInfoLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewModifyPersonalInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *ModifyPersonalInfoLogic {
return &ModifyPersonalInfoLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *ModifyPersonalInfoLogic) ModifyPersonalInfo(req *types.ModifyPersonalInfoRequest) (resp string, err error) {
uid, ok := l.ctx.Value("user_id").(string)
if !ok {
return "", errors.New("user_id not found")
}
authUser := l.svcCtx.DB.ScaAuthUser
info, err := authUser.Where(authUser.UID.Eq(uid)).Updates(model.ScaAuthUser{Nickname: req.Nickname, Avatar: req.Avatar, Email: req.Email, Gender: req.Gender, Introduce: req.Introduce, Blog: req.Blog, Location: req.Location, Company: req.Company})
if err != nil {
return "", err
}
if info.RowsAffected == 0 {
return "", errors.New("user not found")
}
return "success", nil
}

View File

@@ -0,0 +1,128 @@
package storage
import (
"context"
"encoding/json"
"errors"
"github.com/redis/go-redis/v9"
"schisandra-album-cloud-microservices/app/auth/model/mysql/model"
"schisandra-album-cloud-microservices/common/constant"
"schisandra-album-cloud-microservices/common/encrypt"
storageConfig "schisandra-album-cloud-microservices/common/storage/config"
"schisandra-album-cloud-microservices/app/auth/api/internal/svc"
"schisandra-album-cloud-microservices/app/auth/api/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type BackupImageLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewBackupImageLogic(ctx context.Context, svcCtx *svc.ServiceContext) *BackupImageLogic {
return &BackupImageLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *BackupImageLogic) BackupImage(req *types.BackupImageRequest) (resp string, err error) {
uid, ok := l.ctx.Value("user_id").(string)
if !ok {
return "", errors.New("user_id not found")
}
if req.TargetBucket == "" || req.OriginBucket == "" {
return "", errors.New("origin bucket or target bucket required")
}
if req.TargetBucket == req.OriginBucket {
return "", errors.New("origin bucket and target bucket cannot be the same")
}
if req.OriginProvider == req.TargetProvider {
// 加载用户oss配置信息
originOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.OriginProvider + ":" + req.OriginBucket
originOssConfig, err := l.getOssConfigFromCacheOrDb(originOssConfigKey, uid, req.OriginProvider, req.OriginBucket)
if err != nil {
return "", err
}
service, err := l.svcCtx.StorageManager.GetStorage(uid, originOssConfig)
if err != nil {
return "", errors.New("get storage failed")
}
// 同一供应商,直接复制
_, err = service.PutBucketReplication(l.ctx, req.OriginBucket, req.TargetBucket, req.TargetRegion)
if err != nil {
return "", errors.New("put bucket replication failed")
}
} else {
// 不同供应商先复制到本地再上传到目标OSS
return "", errors.New("different provider not supported yet")
}
return "success", nil
}
// 提取解密操作为函数
func (l *BackupImageLogic) decryptConfig(config *model.ScaStorageConfig) (*storageConfig.StorageConfig, error) {
accessKey, err := encrypt.Decrypt(config.AccessKey, l.svcCtx.Config.Encrypt.Key)
if err != nil {
return nil, errors.New("decrypt access key failed")
}
secretKey, err := encrypt.Decrypt(config.SecretKey, l.svcCtx.Config.Encrypt.Key)
if err != nil {
return nil, errors.New("decrypt secret key failed")
}
return &storageConfig.StorageConfig{
Provider: config.Provider,
Endpoint: config.Endpoint,
AccessKey: accessKey,
SecretKey: secretKey,
BucketName: config.Bucket,
Region: config.Region,
}, nil
}
// 从缓存或数据库中获取 OSS 配置
func (l *BackupImageLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed")
}
var ossConfig *storageConfig.StorageConfig
if result != "" {
var redisOssConfig model.ScaStorageConfig
if err = json.Unmarshal([]byte(result), &redisOssConfig); err != nil {
return nil, errors.New("unmarshal oss config failed")
}
return l.decryptConfig(&redisOssConfig)
}
// 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil {
return nil, err
}
// 缓存数据库配置
ossConfig, err = l.decryptConfig(dbOssConfig)
if err != nil {
return nil, err
}
marshalData, err := json.Marshal(dbOssConfig)
if err != nil {
return nil, errors.New("marshal oss config failed")
}
err = l.svcCtx.RedisClient.Set(l.ctx, cacheKey, marshalData, 0).Err()
if err != nil {
return nil, errors.New("set oss config failed")
}
return ossConfig, nil
}

View File

@@ -39,7 +39,7 @@ func (l *DeleteStorageConfigLogic) DeleteStorageConfig(req *types.DeleteStorageC
if info.RowsAffected == 0 { if info.RowsAffected == 0 {
return "", errors.New("storage config not found") return "", errors.New("storage config not found")
} }
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
err = l.svcCtx.RedisClient.Del(l.ctx, cacheOssConfigKey).Err() err = l.svcCtx.RedisClient.Del(l.ctx, cacheOssConfigKey).Err()
if err != nil { if err != nil {
return "", err return "", err

View File

@@ -46,8 +46,8 @@ func (l *DownloadAlbumLogic) DownloadAlbum(req *types.DownloadAlbumRequest) (res
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -107,7 +107,7 @@ func (l *DownloadAlbumLogic) decryptConfig(config *model.ScaStorageConfig) (*sto
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *DownloadAlbumLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *DownloadAlbumLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -124,7 +124,7 @@ func (l *DownloadAlbumLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider s
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -95,8 +95,8 @@ func (l *GetAlbumDetailLogic) GetAlbumDetail(req *types.AlbumDetailListRequest)
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -215,7 +215,7 @@ func (l *GetAlbumDetailLogic) decryptConfig(config *model.ScaStorageConfig) (*st
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetAlbumDetailLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *GetAlbumDetailLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -232,7 +232,7 @@ func (l *GetAlbumDetailLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -61,8 +61,8 @@ func (l *GetBucketCapacityLogic) GetBucketCapacity(req *types.BucketCapacityRequ
return resp, nil return resp, nil
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -142,7 +142,7 @@ func (l *GetBucketCapacityLogic) decryptConfig(config *model.ScaStorageConfig) (
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetBucketCapacityLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *GetBucketCapacityLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -159,7 +159,7 @@ func (l *GetBucketCapacityLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provid
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -86,8 +86,8 @@ func (l *GetDeleteRecordLogic) GetDeleteRecord(req *types.QueryDeleteRecordReque
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -189,7 +189,7 @@ func (l *GetDeleteRecordLogic) decryptConfig(config *model.ScaStorageConfig) (*s
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetDeleteRecordLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *GetDeleteRecordLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -206,7 +206,7 @@ func (l *GetDeleteRecordLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -85,8 +85,8 @@ func (l *GetFaceDetailListLogic) GetFaceDetailList(req *types.FaceDetailListRequ
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -189,7 +189,7 @@ func (l *GetFaceDetailListLogic) decryptConfig(config *model.ScaStorageConfig) (
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetFaceDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *GetFaceDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -206,7 +206,7 @@ func (l *GetFaceDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provid
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -44,8 +44,8 @@ func (l *GetImageBedUploadListLogic) GetImageBedUploadList(req *types.ImageBedUp
return nil, err return nil, err
} }
cacheKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
} }
@@ -94,7 +94,7 @@ func (l *GetImageBedUploadListLogic) decryptConfig(dbConfig *model.ScaStorageCon
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetImageBedUploadListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*config.StorageConfig, error) { func (l *GetImageBedUploadListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*config.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -111,7 +111,7 @@ func (l *GetImageBedUploadListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, pr
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -65,8 +65,8 @@ func (l *GetImageUrlLogic) GetImageUrl(req *types.SingleImageRequest) (resp stri
return "", errors.New("get storage info failed") return "", errors.New("get storage info failed")
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + result.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + result.Provider + ":" + result.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, result.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, result.Provider, result.Bucket)
if err != nil { if err != nil {
return "", err return "", err
} }
@@ -108,7 +108,7 @@ func (l *GetImageUrlLogic) decryptConfig(config *model.ScaStorageConfig) (*stora
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetImageUrlLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *GetImageUrlLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -125,7 +125,7 @@ func (l *GetImageUrlLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider str
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -97,8 +97,8 @@ func (l *GetPrivateImageListLogic) GetPrivateImageList(req *types.PrivateImageLi
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -196,7 +196,7 @@ func (l *GetPrivateImageListLogic) decryptConfig(config *model.ScaStorageConfig)
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetPrivateImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *GetPrivateImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -213,7 +213,7 @@ func (l *GetPrivateImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, prov
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -98,8 +98,8 @@ func (l *GetPrivateImageUrlLogic) GetPrivateImageUrl(req *types.SinglePrivateIma
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return "", err return "", err
} }
@@ -178,7 +178,7 @@ func (l *GetPrivateImageUrlLogic) decryptConfig(config *model.ScaStorageConfig)
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *GetPrivateImageUrlLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *GetPrivateImageUrlLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -195,7 +195,7 @@ func (l *GetPrivateImageUrlLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provi
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -61,8 +61,8 @@ func (l *ImageBedUploadLogic) ImageBedUpload(r *http.Request) (resp *types.Image
// 上传文件到OSS // 上传文件到OSS
cacheKey := constant.UserOssConfigPrefix + uid + ":" + result.Provider cacheKey := constant.UserOssConfigPrefix + uid + ":" + result.Provider + ":" + result.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, result.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, result.Provider, result.Bucket)
if err != nil { if err != nil {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
} }
@@ -137,7 +137,7 @@ func (l *ImageBedUploadLogic) decryptConfig(dbConfig *model.ScaStorageConfig) (*
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *ImageBedUploadLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*config.StorageConfig, error) { func (l *ImageBedUploadLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*config.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -154,7 +154,7 @@ func (l *ImageBedUploadLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -109,8 +109,8 @@ func (l *QueryAllImageListLogic) QueryAllImageList(req *types.AllImageListReques
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -222,7 +222,7 @@ func (l *QueryAllImageListLogic) decryptConfig(config *model.ScaStorageConfig) (
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *QueryAllImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *QueryAllImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -239,7 +239,7 @@ func (l *QueryAllImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provid
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -91,8 +91,8 @@ func (l *QueryLocationDetailListLogic) QueryLocationDetailList(req *types.Locati
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -193,7 +193,7 @@ func (l *QueryLocationDetailListLogic) decryptConfig(config *model.ScaStorageCon
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *QueryLocationDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *QueryLocationDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -210,7 +210,7 @@ func (l *QueryLocationDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid,
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -60,8 +60,8 @@ func (l *QueryLocationImageListLogic) QueryLocationImageList(req *types.Location
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -132,7 +132,7 @@ func (l *QueryLocationImageListLogic) decryptConfig(config *model.ScaStorageConf
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *QueryLocationImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *QueryLocationImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -149,7 +149,7 @@ func (l *QueryLocationImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, p
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -93,8 +93,8 @@ func (l *QueryRecentImageListLogic) QueryRecentImageList(req *types.RecentListRe
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -206,7 +206,7 @@ func (l *QueryRecentImageListLogic) decryptConfig(config *model.ScaStorageConfig
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *QueryRecentImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *QueryRecentImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -223,7 +223,7 @@ func (l *QueryRecentImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, pro
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -91,8 +91,8 @@ func (l *QueryThingDetailListLogic) QueryThingDetailList(req *types.ThingDetailL
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -193,7 +193,7 @@ func (l *QueryThingDetailListLogic) decryptConfig(config *model.ScaStorageConfig
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *QueryThingDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *QueryThingDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -210,7 +210,7 @@ func (l *QueryThingDetailListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, pro
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -64,8 +64,8 @@ func (l *QueryThingImageListLogic) QueryThingImageList(req *types.ThingListReque
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -152,7 +152,7 @@ func (l *QueryThingImageListLogic) decryptConfig(config *model.ScaStorageConfig)
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *QueryThingImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *QueryThingImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -169,7 +169,7 @@ func (l *QueryThingImageListLogic) getOssConfigFromCacheOrDb(cacheKey, uid, prov
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -85,8 +85,8 @@ func (l *SearchImageLogic) SearchImage(req *types.SearchImageRequest) (resp *typ
} }
// 加载用户oss配置信息 // 加载用户oss配置信息
cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider cacheOssConfigKey := constant.UserOssConfigPrefix + uid + ":" + req.Provider + ":" + req.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheOssConfigKey, uid, req.Provider, req.Bucket)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -325,7 +325,7 @@ func (l *SearchImageLogic) decryptConfig(config *model.ScaStorageConfig) (*stora
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *SearchImageLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*storageConfig.StorageConfig, error) { func (l *SearchImageLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*storageConfig.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -342,7 +342,7 @@ func (l *SearchImageLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider str
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -222,8 +222,8 @@ func (l *UploadFileLogic) parseUploadSettingResult(r *http.Request) (types.Uploa
// 上传文件到 OSS // 上传文件到 OSS
func (l *UploadFileLogic) uploadFileToOSS(uid string, header *multipart.FileHeader, file io.Reader, thumbnail io.Reader, result types.File, settingResult types.UploadSetting) (string, string, error) { func (l *UploadFileLogic) uploadFileToOSS(uid string, header *multipart.FileHeader, file io.Reader, thumbnail io.Reader, result types.File, settingResult types.UploadSetting) (string, string, error) {
cacheKey := constant.UserOssConfigPrefix + uid + ":" + result.Provider cacheKey := constant.UserOssConfigPrefix + uid + ":" + result.Provider + ":" + result.Bucket
ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, result.Provider) ossConfig, err := l.getOssConfigFromCacheOrDb(cacheKey, uid, result.Provider, result.Bucket)
if err != nil { if err != nil {
return "", "", errors.New("get oss config failed") return "", "", errors.New("get oss config failed")
} }
@@ -293,7 +293,7 @@ func (l *UploadFileLogic) decryptConfig(dbConfig *model.ScaStorageConfig) (*conf
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (l *UploadFileLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*config.StorageConfig, error) { func (l *UploadFileLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*config.StorageConfig, error) {
result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result() result, err := l.svcCtx.RedisClient.Get(l.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -310,7 +310,7 @@ func (l *UploadFileLogic) getOssConfigFromCacheOrDb(cacheKey, uid, provider stri
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := l.svcCtx.DB.ScaStorageConfig scaOssConfig := l.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -129,7 +129,7 @@ func (c *NsqImageProcessConsumer) getGeoLocation(latitude, longitude float64) (s
} }
// 从缓存或数据库中获取 OSS 配置 // 从缓存或数据库中获取 OSS 配置
func (c *NsqImageProcessConsumer) getOssConfigFromCacheOrDb(cacheKey, uid, provider string) (*config.StorageConfig, error) { func (c *NsqImageProcessConsumer) getOssConfigFromCacheOrDb(cacheKey, uid, provider string, bucket string) (*config.StorageConfig, error) {
result, err := c.svcCtx.RedisClient.Get(c.ctx, cacheKey).Result() result, err := c.svcCtx.RedisClient.Get(c.ctx, cacheKey).Result()
if err != nil && !errors.Is(err, redis.Nil) { if err != nil && !errors.Is(err, redis.Nil) {
return nil, errors.New("get oss config failed") return nil, errors.New("get oss config failed")
@@ -146,7 +146,7 @@ func (c *NsqImageProcessConsumer) getOssConfigFromCacheOrDb(cacheKey, uid, provi
// 缓存未命中,从数据库中加载 // 缓存未命中,从数据库中加载
scaOssConfig := c.svcCtx.DB.ScaStorageConfig scaOssConfig := c.svcCtx.DB.ScaStorageConfig
dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider)).First() dbOssConfig, err := scaOssConfig.Where(scaOssConfig.UserID.Eq(uid), scaOssConfig.Provider.Eq(provider), scaOssConfig.Bucket.Eq(bucket)).First()
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -99,6 +99,15 @@ type AllStorageListResponse struct {
Records []StorageConfigMeta `json:"records"` Records []StorageConfigMeta `json:"records"`
} }
type BackupImageRequest struct {
OriginProvider string `json:"origin_provider"`
OriginBucket string `json:"origin_bucket"`
OriginRegion string `json:"origin_region"`
TargetProvider string `json:"target_provider"`
TargetBucket string `json:"target_bucket"`
TargetRegion string `json:"target_region"`
}
type BucketCapacityRequest struct { type BucketCapacityRequest struct {
Provider string `json:"provider"` Provider string `json:"provider"`
Bucket string `json:"bucket"` Bucket string `json:"bucket"`
@@ -371,6 +380,17 @@ type ModifyFaceTypeResponse struct {
Result string `json:"result"` Result string `json:"result"`
} }
type ModifyPersonalInfoRequest struct {
Nickname string `json:"nickname,optional"`
Avatar string `json:"avatar,optional"`
Email string `json:"email,optional"`
Gender int64 `json:"gender,optional"`
Introduce string `json:"introduce,optional"`
Blog string `json:"blog,optional"`
Location string `json:"location,optional"`
Company string `json:"company,optional"`
}
type OAuthCallbackRequest struct { type OAuthCallbackRequest struct {
Code string `form:"code"` Code string `form:"code"`
} }

View File

@@ -419,3 +419,45 @@ func (a *AliOSS) PresignedURL(ctx context.Context, bucketName, objectKey string,
return presignedResult.URL, nil return presignedResult.URL, nil
} }
// PutBucketReplication 配置跨区域复制规则
func (a *AliOSS) PutBucketReplication(ctx context.Context, originBucketName, targetBucketName, targetBucketRegion string) (string, error) {
request := &oss.PutBucketReplicationRequest{
Bucket: oss.Ptr(originBucketName), // 存储空间名称
ReplicationConfiguration: &oss.ReplicationConfiguration{
Rules: []oss.ReplicationRule{
{
RTC: &oss.ReplicationTimeControl{
Status: oss.Ptr("enabled"), // 在配置跨区域复制规则时开启数据复制时间控制RTC功能
},
Destination: &oss.ReplicationDestination{
Bucket: oss.Ptr(targetBucketName), // 目标存储空间名称
Location: oss.Ptr(targetBucketRegion), // 目标存储区域
TransferType: oss.TransferTypeOssAcc, // 传输类型
},
HistoricalObjectReplication: oss.HistoricalObjectReplicationEnabled, // 开启历史数据复制功能
},
},
},
}
result, err := a.client.PutBucketReplication(ctx, request)
if err != nil {
return "", fmt.Errorf("failed to put bucket replication, error: %v", err)
}
return *result.ReplicationRuleId, nil
}
// DeleteBucketReplication 删除跨区域复制规则
func (a *AliOSS) DeleteBucketReplication(ctx context.Context, bucketName string, ruleId string) error {
request := &oss.DeleteBucketReplicationRequest{
Bucket: oss.Ptr(bucketName), // 存储空间名称
ReplicationRules: &oss.ReplicationRules{
IDs: []string{ruleId}, // 复制规则ID列表
},
}
_, err := a.client.DeleteBucketReplication(ctx, request)
if err != nil {
return fmt.Errorf("failed to delete bucket replication, error: %v", err)
}
return nil
}

View File

@@ -77,4 +77,6 @@ type Service interface {
DeleteObject(ctx context.Context, bucketName, objectName string) (int, error) DeleteObject(ctx context.Context, bucketName, objectName string) (int, error)
RenameObject(ctx context.Context, destBucketName, destObjectName, srcObjectName, srcBucketName string) (int, error) RenameObject(ctx context.Context, destBucketName, destObjectName, srcObjectName, srcBucketName string) (int, error)
PresignedURL(ctx context.Context, bucketName, objectKey string, expires time.Duration) (string, error) PresignedURL(ctx context.Context, bucketName, objectKey string, expires time.Duration) (string, error)
PutBucketReplication(ctx context.Context, originBucketName, targetBucketName, targetBucketRegion string) (string, error)
DeleteBucketReplication(ctx context.Context, bucketName string, ruleId string) error
} }