thread-master/internal/model/threads_account/usecase/placement_context.go

58 lines
1.5 KiB
Go
Raw Normal View History

2026-06-26 08:37:04 +00:00
package usecase
import (
"context"
"strings"
"haixun-backend/internal/library/placement"
)
func (u *threadsAccountUseCase) ResolveMemberPlacementContext(
ctx context.Context,
tenantID, ownerUID string,
research placement.ResearchSettings,
) (placement.MemberContext, error) {
if err := requireActor(tenantID, ownerUID); err != nil {
return placement.MemberContext{}, err
}
member, err := u.members.GetByUID(ctx, tenantID, ownerUID)
if err != nil {
return placement.MemberContext{}, err
}
activeID := member.ActiveThreadsAccountID
prefs := defaultConnectionPrefs()
apiConnected := false
browserConnected := false
apiToken := ""
if activeID != "" {
if account, err := u.assertOwned(ctx, tenantID, ownerUID, activeID); err == nil {
loaded, err := u.loadConnectionPrefs(ctx, account.ID)
if err == nil {
prefs = loaded
}
browserConnected, apiConnected, _ = u.connectionFlags(ctx, account.ID)
if apiConnected {
if secrets, err := u.secretsRepo.FindByAccountID(ctx, account.ID); err == nil && secrets != nil {
apiToken = strings.TrimSpace(secrets.APIAccessToken)
}
}
}
}
ctxOut := placement.BuildMemberContext(
tenantID,
ownerUID,
activeID,
placement.ConnectionPrefsInput{
DevMode: prefs.DevMode,
SearchSourceMode: prefs.SearchSourceMode,
},
apiConnected,
browserConnected,
research,
prefs.ScrapeReplies,
prefs.RepliesPerPost,
)
ctxOut.ThreadsAPIAccessToken = apiToken
return ctxOut, nil
}