thread-master/backend/internal/library/placement/capabilities.go

54 lines
1.5 KiB
Go
Raw Permalink Normal View History

2026-06-28 08:28:42 +00:00
package placement
import (
"strings"
)
// MemberCapabilities summarizes which external integrations are ready for the
// current member + active Threads operating account.
type MemberCapabilities struct {
DiscoverReady bool
AiReady bool
PublishReady bool
DiscoverHint string
AiHint string
PublishHint string
ActiveThreadsAccount string
}
func BuildMemberCapabilities(member MemberContext, research ResearchSettings, aiReady, publishReady bool) MemberCapabilities {
out := MemberCapabilities{
DiscoverReady: member.HasDiscoverPath(),
AiReady: aiReady,
PublishReady: publishReady,
ActiveThreadsAccount: strings.TrimSpace(member.ActiveAccountID),
}
if !out.DiscoverReady {
out.DiscoverHint = discoverCapabilityHint(member, research)
}
if !out.AiReady {
out.AiHint = "請先在設定頁設定 AI API key"
}
if !out.PublishReady {
out.PublishHint = publishCapabilityHint(member)
}
return out
}
func discoverCapabilityHint(member MemberContext, research ResearchSettings) string {
if strings.TrimSpace(member.ActiveAccountID) == "" {
return "請先建立並選定經營帳號"
}
return discoverMissingPathError(member).Error()
}
func publishCapabilityHint(member MemberContext) string {
if strings.TrimSpace(member.ActiveAccountID) == "" {
return "請先建立並選定經營帳號"
}
if member.DevMode && !member.AllowsThreadsAPI {
return "開發模式請在連線設定啟用 API 發文"
}
return "請先完成 Threads API 連線後再發布貼文"
}