55 lines
1.7 KiB
Go
55 lines
1.7 KiB
Go
|
|
package threads_account
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"strings"
|
||
|
|
|
||
|
|
app "haixun-backend/internal/library/errors"
|
||
|
|
"haixun-backend/internal/library/errors/code"
|
||
|
|
"haixun-backend/internal/library/storage"
|
||
|
|
"haixun-backend/internal/svc"
|
||
|
|
|
||
|
|
"github.com/zeromicro/go-zero/core/logx"
|
||
|
|
)
|
||
|
|
|
||
|
|
func resolvePublishImageURLs(svcCtx *svc.ServiceContext, single string, list []string) ([]string, []string, error) {
|
||
|
|
keys := storage.NormalizeImageKeys(single, list)
|
||
|
|
if len(keys) == 0 {
|
||
|
|
return nil, nil, nil
|
||
|
|
}
|
||
|
|
resolver, ok := svcCtx.AvatarStorage.(storage.PublicURLResolver)
|
||
|
|
if !ok || resolver == nil {
|
||
|
|
return nil, nil, app.For(code.ThreadsAccount).SysNotImplemented("image storage is not configured")
|
||
|
|
}
|
||
|
|
urls := make([]string, 0, len(keys))
|
||
|
|
for _, key := range keys {
|
||
|
|
if err := storage.ValidatePublishAttachmentKey(key); err != nil {
|
||
|
|
return nil, nil, app.For(code.ThreadsAccount).InputInvalidFormat(err.Error())
|
||
|
|
}
|
||
|
|
url, err := resolver.ResolvePublicURL(key)
|
||
|
|
if err != nil {
|
||
|
|
return nil, nil, app.For(code.ThreadsAccount).InputInvalidFormat(err.Error())
|
||
|
|
}
|
||
|
|
if err := storage.ValidateThreadsFetchableURL(url); err != nil {
|
||
|
|
return nil, nil, app.For(code.ThreadsAccount).InputInvalidFormat(err.Error())
|
||
|
|
}
|
||
|
|
urls = append(urls, url)
|
||
|
|
}
|
||
|
|
return urls, keys, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func purgePublishAttachments(ctx context.Context, svcCtx *svc.ServiceContext, imageKeys []string) {
|
||
|
|
deleter, ok := svcCtx.AvatarStorage.(storage.ObjectDeleter)
|
||
|
|
if !ok || deleter == nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
for _, key := range imageKeys {
|
||
|
|
key = strings.TrimSpace(key)
|
||
|
|
if key == "" {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
if err := storage.PurgePublishAttachment(ctx, deleter, key); err != nil {
|
||
|
|
logx.WithContext(ctx).Errorf("purge publish attachment %s: %v", key, err)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|