thread-master/old/backend/internal/logic/threads_account/publish_attachment.go

55 lines
1.7 KiB
Go
Raw Normal View History

2026-07-09 03:45:28 +00:00
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)
}
}
}