thread-master/internal/types/types.go

1502 lines
54 KiB
Go
Raw Permalink Normal View History

2026-06-26 08:37:04 +00:00
// Code generated by goctl. DO NOT EDIT.
// goctl 1.10.1
package types
type AIChatData struct {
Text string `json:"text"`
FinishReason string `json:"finish_reason,optional"`
}
type AIChatReq struct {
Provider string `json:"provider" validate:"required,oneof=opencode-go xai"` // AI provider
Model string `json:"model" validate:"required"` // 模型 ID
System string `json:"system,optional"` // system prompt
Messages []AIMessage `json:"messages" validate:"required,min=1,dive"` // 對話訊息
Temperature *float64 `json:"temperature,optional"` // 溫度
MaxTokens *int `json:"max_tokens,optional"` // 最大輸出 token
}
type AIMessage struct {
Role string `json:"role" validate:"required,oneof=system user assistant"` // 訊息角色
Content string `json:"content" validate:"required"` // 訊息內容
}
type AIProviderModelsData struct {
ID string `json:"id"`
Label string `json:"label"`
Models []string `json:"models"`
Streams bool `json:"streams"`
Error string `json:"error,optional"` // 拉 models 失敗時的摘要
}
type AIProviderOption struct {
ID string `json:"id"`
Label string `json:"label"`
Streams bool `json:"streams"`
}
type AIProviderPath struct {
Provider string `path:"provider" validate:"required,oneof=opencode-go xai"` // 要查模型的 provider
}
type AIProvidersData struct {
Providers []AIProviderOption `json:"providers"`
}
type AnalyzeStyle8DData struct {
PersonaID string `json:"persona_id"`
PostCount int `json:"post_count"`
StyleProfile string `json:"style_profile"`
StyleBenchmark string `json:"style_benchmark"`
}
type AnalyzeStyle8DPostReq struct {
Text string `json:"text"`
Permalink string `json:"permalink,optional"`
LikeCount int `json:"like_count,optional"`
ReplyCount int `json:"reply_count,optional"`
}
type AnalyzeStyle8DReq struct {
ID string `path:"id" validate:"required"`
WorkerID string `json:"worker_id" validate:"required"`
TenantID string `json:"tenant_id" validate:"required"`
OwnerUID string `json:"owner_uid" validate:"required"`
PersonaID string `json:"persona_id" validate:"required"`
ThreadsAccountID string `json:"threads_account_id" validate:"required"`
Username string `json:"username" validate:"required"`
Posts []AnalyzeStyle8DPostReq `json:"posts" validate:"required"`
Steps []JobStepProgressData `json:"steps,optional"`
}
type AuthLoginReq struct {
TenantID string `json:"tenant_id" validate:"required"`
Email string `json:"email" validate:"required,email"`
Password string `json:"password" validate:"required,min=8,max=128"`
}
type AuthRefreshReq struct {
RefreshToken string `json:"refresh_token" validate:"required"`
}
type AuthRegisterReq struct {
TenantID string `json:"tenant_id" validate:"required"`
Email string `json:"email" validate:"required,email"`
Password string `json:"password" validate:"required,min=8,max=128"`
DisplayName string `json:"display_name,optional"`
Language string `json:"language,optional"`
}
type AuthTokenData struct {
AccessToken string `json:"access_token"`
RefreshToken string `json:"refresh_token"`
ExpiresIn int64 `json:"expires_in"`
UID string `json:"uid"`
TokenType string `json:"token_type"`
}
type BatchDeletePlacementTopicScanPostsData struct {
DeletedCount int `json:"deleted_count"`
}
type BatchDeletePlacementTopicScanPostsHandlerReq struct {
PlacementTopicPath
BatchDeletePlacementTopicScanPostsReq
}
type BatchDeletePlacementTopicScanPostsReq struct {
PostIDs []string `json:"post_ids" validate:"required"`
}
type BrandData struct {
ID string `json:"id"`
DisplayName string `json:"display_name,omitempty"`
TopicName string `json:"topic_name,omitempty"`
SeedQuery string `json:"seed_query,omitempty"`
Brief string `json:"brief,omitempty"`
ProductBrief string `json:"product_brief,omitempty"`
ProductContext string `json:"product_context,omitempty"`
ProductID string `json:"product_id,omitempty"`
Products []BrandProductData `json:"products,omitempty"`
TargetAudience string `json:"target_audience,omitempty"`
Goals string `json:"goals,omitempty"`
ResearchMap ResearchMapData `json:"research_map,omitempty"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type BrandPath struct {
ID string `path:"id" validate:"required"`
}
type BrandProductData struct {
ID string `json:"id"`
Label string `json:"label"`
ProductContext string `json:"product_context"`
MatchTags []string `json:"match_tags,omitempty"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type BrandProductPath struct {
ID string `path:"id" validate:"required"`
ProductID string `path:"productId" validate:"required"`
}
type BrandScanScheduleData struct {
ID string `json:"id,omitempty"`
BrandID string `json:"brand_id"`
Cron string `json:"cron"`
Timezone string `json:"timezone"`
Enabled bool `json:"enabled"`
NextRunAt int64 `json:"next_run_at,omitempty"`
LastRunAt int64 `json:"last_run_at,omitempty"`
}
type BraveSourceData struct {
Query string `json:"query,omitempty"`
Title string `json:"title,omitempty"`
URL string `json:"url,omitempty"`
Snippet string `json:"snippet,omitempty"`
}
type CancelJobReq struct {
ID string `path:"id" validate:"required"` // job run id
Reason string `json:"reason,optional"` // cancel reason
}
type ClaimWorkerJobReq struct {
WorkerType string `json:"worker_type" validate:"required"`
WorkerID string `json:"worker_id" validate:"required"`
}
type ContentMatrixData struct {
ID string `json:"id,omitempty"`
BrandID string `json:"brand_id"`
Rows []ContentMatrixRowData `json:"rows"`
GeneratedAt int64 `json:"generated_at"`
CreateAt int64 `json:"create_at,omitempty"`
UpdateAt int64 `json:"update_at,omitempty"`
}
type ContentMatrixRowData struct {
SortOrder int `json:"sort_order"`
SearchTag string `json:"search_tag"`
Angle string `json:"angle"`
Hook string `json:"hook"`
Text string `json:"text"`
ReferenceNotes string `json:"reference_notes"`
SourcePermalinks []string `json:"source_permalinks"`
Rationale string `json:"rationale"`
}
type CopyDraftData struct {
ID string `json:"id"`
PersonaID string `json:"persona_id"`
CopyMissionID string `json:"copy_mission_id,omitempty"`
ScanPostID string `json:"scan_post_id,omitempty"`
DraftType string `json:"draft_type"`
SortOrder int `json:"sort_order,omitempty"`
Text string `json:"text"`
Angle string `json:"angle,omitempty"`
Hook string `json:"hook,omitempty"`
Rationale string `json:"rationale,omitempty"`
ReferenceNotes string `json:"reference_notes,omitempty"`
Sources []string `json:"sources,omitempty"`
Status string `json:"status,omitempty"`
PublishedMediaID string `json:"published_media_id,omitempty"`
PublishedPermalink string `json:"published_permalink,omitempty"`
PublishedAt int64 `json:"published_at,omitempty"`
CreateAt int64 `json:"create_at"`
}
type CopyDraftPath struct {
ID string `path:"id" validate:"required"`
DraftID string `path:"draftId" validate:"required"`
}
type CopyMissionData struct {
ID string `json:"id"`
PersonaID string `json:"persona_id"`
Label string `json:"label,omitempty"`
SeedQuery string `json:"seed_query,omitempty"`
Brief string `json:"brief,omitempty"`
ResearchMap CopyMissionResearchMapData `json:"research_map,omitempty"`
SelectedTags []string `json:"selected_tags,omitempty"`
LastScanJobID string `json:"last_scan_job_id,omitempty"`
Status string `json:"status,omitempty"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type CopyMissionInspirationData struct {
Label string `json:"label"`
SeedQuery string `json:"seed_query"`
Brief string `json:"brief"`
TrendReason string `json:"trend_reason,omitempty"`
TrendKeywords []string `json:"trend_keywords,omitempty"`
Sources []CopyMissionInspirationSourceData `json:"sources,omitempty"`
WebSearchUsed bool `json:"web_search_used"`
Message string `json:"message"`
}
type CopyMissionInspirationSourceData struct {
Query string `json:"query,omitempty"`
Title string `json:"title,omitempty"`
Snippet string `json:"snippet,omitempty"`
URL string `json:"url,omitempty"`
}
type CopyMissionPath struct {
PersonaID string `path:"personaId" validate:"required"`
ID string `path:"id" validate:"required"`
}
type CopyMissionResearchMapData struct {
AudienceSummary string `json:"audience_summary,omitempty"`
ContentGoal string `json:"content_goal,omitempty"`
Questions []string `json:"questions,omitempty"`
Pillars []string `json:"pillars,omitempty"`
Exclusions []string `json:"exclusions,omitempty"`
SuggestedTags []CopySuggestedTagData `json:"suggested_tags,omitempty"`
SimilarAccounts []CopySimilarAccountData `json:"similar_accounts,omitempty"`
BenchmarkNotes string `json:"benchmark_notes,omitempty"`
}
type CopyMissionScanScheduleData struct {
ID string `json:"id,omitempty"`
PersonaID string `json:"persona_id"`
MissionID string `json:"mission_id"`
Cron string `json:"cron"`
Timezone string `json:"timezone"`
Enabled bool `json:"enabled"`
NextRunAt int64 `json:"next_run_at,omitempty"`
LastRunAt int64 `json:"last_run_at,omitempty"`
}
type CopyResearchMapData struct {
AudienceSummary string `json:"audience_summary,omitempty"`
ContentGoal string `json:"content_goal,omitempty"`
Questions []string `json:"questions,omitempty"`
Pillars []string `json:"pillars,omitempty"`
Exclusions []string `json:"exclusions,omitempty"`
SuggestedTags []string `json:"suggested_tags,omitempty"`
BenchmarkNotes string `json:"benchmark_notes,omitempty"`
}
type CopySimilarAccountData struct {
Username string `json:"username"`
Reason string `json:"reason,omitempty"`
Source string `json:"source,omitempty"`
Confidence string `json:"confidence,omitempty"`
ProfileUrl string `json:"profile_url,omitempty"`
AuthorVerified bool `json:"author_verified,omitempty"`
FollowerCount int `json:"follower_count,omitempty"`
EngagementScore int `json:"engagement_score,omitempty"`
LikeCount int `json:"like_count,omitempty"`
ReplyCount int `json:"reply_count,omitempty"`
PostCount int `json:"post_count,omitempty"`
}
type CopySuggestedTagData struct {
Tag string `json:"tag"`
Reason string `json:"reason,omitempty"`
SearchIntent string `json:"search_intent,omitempty"`
SearchType string `json:"search_type,omitempty"`
}
type CreateBrandProductHandlerReq struct {
BrandPath
CreateBrandProductReq
}
type CreateBrandProductReq struct {
Label string `json:"label" validate:"required"`
ProductContext string `json:"product_context" validate:"required"`
MatchTags []string `json:"match_tags,optional"`
}
type CreateBrandReq struct {
DisplayName string `json:"display_name,optional"`
}
type CreateCopyMissionHandlerReq struct {
PersonaCopyMissionsPath
CreateCopyMissionReq
}
type CreateCopyMissionReq struct {
Label string `json:"label" validate:"required"`
SeedQuery string `json:"seed_query" validate:"required"`
Brief string `json:"brief" validate:"required"`
}
type CreateJobReq struct {
TemplateType string `json:"template_type" validate:"required"` // job template type
Scope string `json:"scope" validate:"required,oneof=user account system persona brand"` // job scope
ScopeID string `json:"scope_id" validate:"required"` // scope id
Payload map[string]interface{} `json:"payload,optional"` // job payload
}
type CreateJobScheduleReq struct {
TemplateType string `json:"template_type" validate:"required"` // template type
Scope string `json:"scope" validate:"required,oneof=user account system persona brand"` // scope
ScopeID string `json:"scope_id" validate:"required"` // scope id
Cron string `json:"cron" validate:"required"` // cron expression
Timezone string `json:"timezone,optional"` // timezone
PayloadTemplate map[string]interface{} `json:"payload_template,optional"` // payload template
Enabled bool `json:"enabled"` // enabled flag
}
type CreatePersonaReq struct {
DisplayName string `json:"display_name,optional"`
}
type CreatePlacementTopicHandlerReq struct {
CreatePlacementTopicReq
}
type CreatePlacementTopicReq struct {
BrandID string `json:"brand_id" validate:"required"`
TopicName string `json:"topic_name" validate:"required"`
SeedQuery string `json:"seed_query" validate:"required"`
Brief string `json:"brief" validate:"required"`
ProductID string `json:"product_id,optional"`
}
type CreateThreadsAccountReq struct {
DisplayName string `json:"display_name,optional"`
Activate *bool `json:"activate,optional"`
}
type DeletePlacementTopicScanPostHandlerReq struct {
PlacementTopicPath
PostID string `path:"postId" validate:"required"`
}
type ErrorDetail struct {
BizCode string `json:"biz_code,optional"`
Scope int64 `json:"scope,optional"`
Category int64 `json:"category,optional"`
Detail int64 `json:"detail,optional"`
}
type ExpandKnowledgeGraphData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type ExpandKnowledgeGraphHandlerReq struct {
BrandPath
ExpandKnowledgeGraphReq
}
type ExpandKnowledgeGraphReq struct {
SeedQuery string `json:"seed_query" validate:"required"`
Supplemental bool `json:"supplemental,optional"`
RegenerateMap bool `json:"regenerate_map,optional"`
ExpandStrategy string `json:"expand_strategy,optional"` // brave | llm | hybrid
}
type ExpandPlacementTopicGraphHandlerReq struct {
PlacementTopicPath
ExpandKnowledgeGraphReq
}
type GenerateContentMatrixHandlerReq struct {
BrandPath
GenerateContentMatrixReq
}
type GenerateContentMatrixReq struct {
Count int `json:"count,optional"`
}
type GenerateCopyMissionMatrixData struct {
Drafts []CopyDraftData `json:"drafts"`
Message string `json:"message"`
}
type GenerateCopyMissionMatrixHandlerReq struct {
CopyMissionPath
GenerateCopyMissionMatrixReq
}
type GenerateCopyMissionMatrixReq struct {
Count int `json:"count,optional"`
}
type GenerateOutreachDraftsData struct {
ID string `json:"id"`
ScanPostID string `json:"scan_post_id"`
Relevance float64 `json:"relevance"`
Reason string `json:"reason"`
Drafts []OutreachDraftItemData `json:"drafts"`
CreateAt int64 `json:"create_at"`
}
type GenerateOutreachDraftsHandlerReq struct {
BrandPath
GenerateOutreachDraftsReq
}
type GenerateOutreachDraftsReq struct {
ScanPostID string `json:"scan_post_id" validate:"required"`
TopicID string `json:"topic_id,optional"`
Count int `json:"count,optional"`
VoicePersonaID string `json:"voice_persona_id,optional"`
ProductID string `json:"product_id,optional"`
}
type GeneratePersonaCopyDraftData struct {
Draft CopyDraftData `json:"draft"`
Message string `json:"message"`
}
type GeneratePersonaCopyDraftHandlerReq struct {
PersonaPath
GeneratePersonaCopyDraftReq
}
type GeneratePersonaCopyDraftReq struct {
ScanPostID string `json:"scan_post_id" validate:"required"`
}
type GeneratePlacementTopicContentMatrixHandlerReq struct {
PlacementTopicPath
GenerateContentMatrixReq
}
type GeneratePlacementTopicOutreachDraftsHandlerReq struct {
PlacementTopicPath
GenerateOutreachDraftsReq
}
type HealthData struct {
Pong string `json:"pong"`
}
type ImportThreadsAccountSessionData struct {
Success bool `json:"success"`
Valid bool `json:"valid"`
Synced bool `json:"synced"`
AccountID string `json:"account_id"`
Username string `json:"username,omitempty"`
Message string `json:"message"`
UpdateAt int64 `json:"update_at"`
}
type ImportThreadsAccountSessionHandlerReq struct {
ThreadsAccountPath
ImportThreadsAccountSessionReq
}
type ImportThreadsAccountSessionReq struct {
StorageState string `json:"storageState" validate:"required"`
}
type IslanderChatReq struct {
Messages []AIMessage `json:"messages" validate:"required,min=1,dive"` // 對話訊息
Context string `json:"context,optional"` // 目前頁面與站內導覽快照
}
type JobCancelPolicyData struct {
Supported bool `json:"supported"`
Mode string `json:"mode"`
GraceSeconds int `json:"grace_seconds"`
}
type JobData struct {
ID string `json:"id"`
TemplateType string `json:"template_type"`
TemplateVersion int `json:"template_version"`
Scope string `json:"scope"`
ScopeID string `json:"scope_id"`
Status string `json:"status"`
Phase string `json:"phase"`
WorkerType string `json:"worker_type"`
Payload map[string]interface{} `json:"payload"`
Progress JobProgressData `json:"progress"`
Result map[string]interface{} `json:"result,optional"`
Error string `json:"error,optional"`
Attempt int `json:"attempt"`
MaxAttempts int `json:"max_attempts"`
CancelRequestedAt *int64 `json:"cancel_requested_at,optional"`
CancelReason string `json:"cancel_reason,optional"`
StartedAt *int64 `json:"started_at,optional"`
CompletedAt *int64 `json:"completed_at,optional"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type JobEventData struct {
ID string `json:"id"`
JobID string `json:"job_id"`
Type string `json:"type"`
From string `json:"from,optional"`
To string `json:"to,optional"`
Message string `json:"message"`
Metadata map[string]interface{} `json:"metadata,optional"`
CreateAt int64 `json:"create_at"`
}
type JobEventListData struct {
List []JobEventData `json:"list"`
}
type JobIDPath struct {
ID string `path:"id" validate:"required"` // job run id
}
type JobListData struct {
Pagination PaginationData `json:"pagination"`
List []JobData `json:"list"`
}
type JobProgressData struct {
Summary string `json:"summary"`
Percentage int `json:"percentage"`
Steps []JobStepProgressData `json:"steps"`
}
type JobRetryPolicyData struct {
MaxAttempts int `json:"max_attempts"`
BackoffSeconds []int `json:"backoff_seconds"`
}
type JobScheduleData struct {
ID string `json:"id"`
TemplateType string `json:"template_type"`
Scope string `json:"scope"`
ScopeID string `json:"scope_id"`
Enabled bool `json:"enabled"`
Cron string `json:"cron"`
Timezone string `json:"timezone"`
PayloadTemplate map[string]interface{} `json:"payload_template"`
LastRunAt *int64 `json:"last_run_at,optional"`
NextRunAt int64 `json:"next_run_at"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type JobScheduleIDPath struct {
ID string `path:"id" validate:"required"` // schedule id
}
type JobScheduleListData struct {
Pagination PaginationData `json:"pagination"`
List []JobScheduleData `json:"list"`
}
type JobStepProgressData struct {
ID string `json:"id"`
Status string `json:"status"`
StartedAt *int64 `json:"started_at,optional"`
EndedAt *int64 `json:"ended_at,optional"`
Message string `json:"message,optional"`
}
type JobTemplateData struct {
Type string `json:"type"`
Version int `json:"version"`
Name string `json:"name"`
Description string `json:"description"`
Enabled bool `json:"enabled"`
Repeatable bool `json:"repeatable"`
ConcurrencyPolicy string `json:"concurrency_policy"`
DedupeKeys []string `json:"dedupe_keys"`
TimeoutSeconds int `json:"timeout_seconds"`
CancelPolicy JobCancelPolicyData `json:"cancel_policy"`
RetryPolicy JobRetryPolicyData `json:"retry_policy"`
Steps []JobTemplateStepData `json:"steps"`
}
type JobTemplateListData struct {
List []JobTemplateData `json:"list"`
}
type JobTemplatePath struct {
Type string `path:"type" validate:"required"` // template type
}
type JobTemplateStepData struct {
ID string `json:"id"`
Name string `json:"name"`
WorkerType string `json:"worker_type"`
TimeoutSeconds int `json:"timeout_seconds"`
Cancelable bool `json:"cancelable"`
}
type KnowledgeGraphData struct {
ID string `json:"id"`
BrandID string `json:"brand_id"`
Seed string `json:"seed"`
Nodes []KnowledgeGraphNodeData `json:"nodes"`
Edges []KnowledgeGraphEdgeData `json:"edges"`
BraveSources []BraveSourceData `json:"brave_sources,omitempty"`
ExpandStrategy string `json:"expand_strategy,omitempty"`
PainTagCount int `json:"pain_tag_count"`
GeneratedAt int64 `json:"generated_at"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type KnowledgeGraphEdgeData struct {
From string `json:"from"`
To string `json:"to"`
Relation string `json:"relation"`
}
type KnowledgeGraphEvidenceData struct {
URL string `json:"url,omitempty"`
Snippet string `json:"snippet,omitempty"`
Query string `json:"query,omitempty"`
}
type KnowledgeGraphNodeData struct {
ID string `json:"id"`
Label string `json:"label"`
NodeKind string `json:"node_kind"`
Type string `json:"type"`
Layer int `json:"layer"`
Relation string `json:"relation,omitempty"`
PlacementValue string `json:"placement_value,omitempty"`
ProductFitScore int `json:"product_fit_score"`
SelectedForScan bool `json:"selected_for_scan"`
RelevanceTags []string `json:"relevance_tags"`
RecencyTags []string `json:"recency_tags"`
Evidence []KnowledgeGraphEvidenceData `json:"evidence,omitempty"`
}
type KnowledgeGraphNodeUpdate struct {
NodeID string `json:"node_id" validate:"required"`
SelectedForScan *bool `json:"selected_for_scan,optional"`
RelevanceTags []string `json:"relevance_tags,optional"`
RecencyTags []string `json:"recency_tags,optional"`
}
type ListBrandProductsData struct {
List []BrandProductData `json:"list"`
}
type ListBrandScanPostsData struct {
List []ScanPostData `json:"list"`
Total int `json:"total"`
}
type ListBrandScanPostsHandlerReq struct {
BrandPath
ListBrandScanPostsReq
}
type ListBrandScanPostsReq struct {
Priority string `form:"priority,optional"`
Recent7d bool `form:"recent_7d,optional"`
ProductFitMin int `form:"product_fit_min,optional"`
Limit int `form:"limit,optional"`
}
type ListBrandsData struct {
List []BrandData `json:"list"`
}
type ListCopyMissionCopyDraftsData struct {
List []CopyDraftData `json:"list"`
Total int `json:"total"`
}
type ListCopyMissionScanPostsHandlerReq struct {
CopyMissionPath
ListCopyMissionScanPostsReq
}
type ListCopyMissionScanPostsReq struct {
Limit int `form:"limit,optional"`
}
type ListCopyMissionsData struct {
List []CopyMissionData `json:"list"`
}
type ListJobEventsReq struct {
ID string `path:"id" validate:"required"` // job run id
Limit int64 `form:"limit,optional"` // max events
}
type ListJobSchedulesReq struct {
Scope string `form:"scope,optional"` // filter by scope
ScopeID string `form:"scope_id,optional"` // filter by scope id
Page int64 `form:"page,optional"` // page number starting at 1
PageSize int64 `form:"pageSize,optional"` // page size
}
type ListJobsReq struct {
Scope string `form:"scope,optional"` // filter by scope
ScopeID string `form:"scope_id,optional"` // filter by scope id
Page int64 `form:"page,optional"` // page number starting at 1
PageSize int64 `form:"pageSize,optional"` // page size
}
type ListPersonaCopyDraftsData struct {
List []CopyDraftData `json:"list"`
Total int `json:"total"`
}
type ListPersonaViralScanPostsData struct {
List []ViralScanPostData `json:"list"`
Total int `json:"total"`
}
type ListPersonaViralScanPostsHandlerReq struct {
PersonaPath
ListPersonaViralScanPostsReq
}
type ListPersonaViralScanPostsReq struct {
Limit int `form:"limit,optional"`
}
type ListPersonasData struct {
List []PersonaData `json:"list"`
}
type ListPlacementTopicScanPostsHandlerReq struct {
PlacementTopicPath
ListBrandScanPostsReq
}
type ListPlacementTopicsData struct {
List []PlacementTopicData `json:"list"`
}
type ListThreadsAccountsData struct {
List []ThreadsAccountData `json:"list"`
ActiveAccountID string `json:"active_account_id"`
}
type LogoutData struct {
OK bool `json:"ok"`
}
type MePermissionsData struct {
UID string `json:"uid"`
TenantID string `json:"tenant_id"`
Roles []string `json:"roles"`
Permissions map[string]string `json:"permissions"`
Tree []PermissionNode `json:"tree,omitempty"`
}
type MePermissionsQuery struct {
IncludeTree bool `form:"include_tree,optional"`
}
type MemberMeData struct {
TenantID string `json:"tenant_id"`
UID string `json:"uid"`
Email string `json:"email"`
DisplayName string `json:"display_name,omitempty"`
Avatar string `json:"avatar,omitempty"`
Phone string `json:"phone,omitempty"`
Language string `json:"language,omitempty"`
Currency string `json:"currency,omitempty"`
Status string `json:"status"`
Origin string `json:"origin"`
Roles []string `json:"roles,omitempty"`
BusinessEmail string `json:"business_email,omitempty"`
BusinessEmailVerified bool `json:"business_email_verified"`
BusinessPhone string `json:"business_phone,omitempty"`
BusinessPhoneVerified bool `json:"business_phone_verified"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type MemberPlacementSettingsData struct {
WebSearchProvider string `json:"web_search_provider"` // brave | exa
BraveAPIKey string `json:"brave_api_key,omitempty"`
BraveAPIKeyConfigured bool `json:"brave_api_key_configured"`
ExaAPIKey string `json:"exa_api_key,omitempty"`
ExaAPIKeyConfigured bool `json:"exa_api_key_configured"`
BraveCountry string `json:"brave_country"`
BraveSearchLang string `json:"brave_search_lang"`
ExaUserLocation string `json:"exa_user_location"`
ExpandStrategy string `json:"expand_strategy"` // brave | llm | hybrid
}
type OutreachDraftItemData struct {
Text string `json:"text"`
Angle string `json:"angle"`
Rationale string `json:"rationale"`
}
type PaginationData struct {
Total int64 `json:"total"`
Page int64 `json:"page"`
PageSize int64 `json:"pageSize"`
TotalPages int64 `json:"totalPages"`
}
type PatchKnowledgeGraphNodesHandlerReq struct {
BrandPath
PatchKnowledgeGraphNodesReq
}
type PatchKnowledgeGraphNodesReq struct {
Updates []KnowledgeGraphNodeUpdate `json:"updates" validate:"required"`
}
type PatchPlacementTopicGraphNodesHandlerReq struct {
PlacementTopicPath
PatchKnowledgeGraphNodesReq
}
type PatchPlacementTopicScanPostOutreachHandlerReq struct {
PlacementTopicPath
PostID string `path:"postId"`
PatchScanPostOutreachReq
}
type PatchScanPostOutreachHandlerReq struct {
BrandPath
PostID string `path:"postId"`
PatchScanPostOutreachReq
}
type PatchScanPostOutreachReq struct {
OutreachStatus *string `json:"outreach_status,optional"`
}
type PermissionCatalogData struct {
Tree []PermissionNode `json:"tree,omitempty"`
List []PermissionNode `json:"list,omitempty"`
}
type PermissionCatalogQuery struct {
Status string `form:"status,optional" validate:"omitempty,oneof=open close"`
Type string `form:"type,optional" validate:"omitempty,oneof=backend_user frontend_user"`
Tree bool `form:"tree,optional"`
}
type PermissionNode struct {
ID string `json:"id"`
Parent string `json:"parent,omitempty"`
Name string `json:"name"`
HTTPMethods string `json:"http_methods,omitempty"`
HTTPPath string `json:"http_path,omitempty"`
Status string `json:"status"`
Type string `json:"type"`
Children []PermissionNode `json:"children,omitempty"`
}
type PersonaCopyMissionsPath struct {
PersonaID string `path:"personaId" validate:"required"`
}
type PersonaData struct {
ID string `json:"id"`
DisplayName string `json:"display_name,omitempty"`
Persona string `json:"persona,omitempty"`
Brief string `json:"brief,omitempty"`
StyleProfile string `json:"style_profile,omitempty"`
StyleBenchmark string `json:"style_benchmark,omitempty"`
SeedQuery string `json:"seed_query,omitempty"`
CopyResearchMap CopyResearchMapData `json:"copy_research_map,omitempty"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type PersonaPath struct {
ID string `path:"id" validate:"required"`
}
type PlacementTopicData struct {
ID string `json:"id"`
BrandID string `json:"brand_id"`
BrandDisplayName string `json:"brand_display_name,omitempty"`
TopicName string `json:"topic_name,omitempty"`
SeedQuery string `json:"seed_query,omitempty"`
Brief string `json:"brief,omitempty"`
ProductID string `json:"product_id,omitempty"`
ResearchMap ResearchMapData `json:"research_map,omitempty"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type PlacementTopicPath struct {
ID string `path:"id" validate:"required"`
}
type PublishCopyDraftData struct {
DraftID string `json:"draft_id"`
MediaID string `json:"media_id"`
Permalink string `json:"permalink,omitempty"`
Status string `json:"status"`
Message string `json:"message"`
}
type PublishCopyDraftHandlerReq struct {
CopyDraftPath
PublishCopyDraftReq
}
type PublishCopyDraftReq struct {
Text string `json:"text,optional"`
Confirm bool `json:"confirm"`
}
type PublishOutreachDraftData struct {
ScanPostID string `json:"scan_post_id"`
ReplyID string `json:"reply_id"`
Permalink string `json:"permalink"`
OutreachStatus string `json:"outreach_status"`
PublishedPermalink string `json:"published_permalink"`
Message string `json:"message"`
}
type PublishOutreachDraftHandlerReq struct {
BrandPath
PublishOutreachDraftReq
}
type PublishOutreachDraftReq struct {
ScanPostID string `json:"scan_post_id" validate:"required"`
Text string `json:"text" validate:"required"`
Confirm bool `json:"confirm"`
}
type PublishPlacementTopicOutreachDraftHandlerReq struct {
PlacementTopicPath
PublishOutreachDraftReq
}
type ResearchItemData struct {
Title string `json:"title,omitempty"`
URL string `json:"url,omitempty"`
Snippet string `json:"snippet,omitempty"`
Query string `json:"query,omitempty"`
}
type ResearchMapData struct {
AudienceSummary string `json:"audience_summary,omitempty"`
ContentGoal string `json:"content_goal,omitempty"`
Questions []string `json:"questions,omitempty"`
Pillars []string `json:"pillars,omitempty"`
Exclusions []string `json:"exclusions,omitempty"`
ResearchItems []ResearchItemData `json:"research_items,omitempty"`
ExpandStrategy string `json:"expand_strategy,omitempty"`
PatrolKeywords []string `json:"patrol_keywords,omitempty"`
}
type ScanPostData struct {
ID string `json:"id"`
GraphNodeID string `json:"graph_node_id"`
SearchTag string `json:"search_tag"`
QueryDimension string `json:"query_dimension"`
ExternalID string `json:"external_id"`
Permalink string `json:"permalink"`
Author string `json:"author"`
Text string `json:"text"`
Priority string `json:"priority"`
PlacementScore int `json:"placement_score"`
ProductFitScore int `json:"product_fit_score"`
SolvedByProduct bool `json:"solved_by_product"`
Source string `json:"source"`
ScanJobID string `json:"scan_job_id"`
OutreachStatus string `json:"outreach_status,omitempty"`
PublishedReplyID string `json:"published_reply_id,omitempty"`
PublishedPermalink string `json:"published_permalink,omitempty"`
OutreachUpdateAt int64 `json:"outreach_update_at,omitempty"`
PostedAt string `json:"posted_at,omitempty"`
Replies []ScanReplyData `json:"replies,omitempty"`
LatestDraft *GenerateOutreachDraftsData `json:"latest_draft,omitempty"`
CreateAt int64 `json:"create_at"`
}
type ScanReplyData struct {
ExternalID string `json:"external_id,omitempty"`
Author string `json:"author,omitempty"`
Text string `json:"text"`
Permalink string `json:"permalink,omitempty"`
LikeCount int `json:"like_count,omitempty"`
PostedAt string `json:"posted_at,omitempty"`
}
type SettingData struct {
ID string `json:"id"`
Scope string `json:"scope"`
ScopeID string `json:"scope_id"`
Key string `json:"key"`
Value map[string]interface{} `json:"value"`
Version int `json:"version"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type SettingKeyPath struct {
Scope string `path:"scope" validate:"required,oneof=user account system"` // 設定範圍,可選 user / account / system
ScopeID string `path:"scope_id" validate:"required"` // 範圍 ID例如 user_id、account_id 或 global
Key string `path:"key" validate:"required"` // 設定 key例如 ai.default
}
type SettingListData struct {
Pagination PaginationData `json:"pagination"`
List []SettingData `json:"list"`
}
type SettingPath struct {
Scope string `path:"scope" validate:"required,oneof=user account system"` // 設定範圍,可選 user / account / system
ScopeID string `path:"scope_id" validate:"required"` // 範圍 ID例如 user_id、account_id 或 global
Page int64 `form:"page,optional"` // 頁碼,從 1 開始
PageSize int64 `form:"pageSize,optional"` // 每頁筆數server 會限制最大值
}
type SettingUpsertReq struct {
Scope string `path:"scope" validate:"required,oneof=user account system"` // 設定範圍,可選 user / account / system
ScopeID string `path:"scope_id" validate:"required"` // 範圍 ID例如 user_id、account_id 或 global
Key string `path:"key" validate:"required"` // 設定 key例如 ai.default
Value map[string]interface{} `json:"value" validate:"required"` // 設定內容 JSON object
Version int `json:"version,optional"` // schema version未帶入時預設 1
}
type StartBrandScanJobData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type StartBrandScanJobHandlerReq struct {
BrandPath
StartBrandScanJobReq
}
type StartBrandScanJobReq struct {
GraphID string `json:"graph_id,optional"`
NodeIDs []string `json:"node_ids,optional"`
DualTrack bool `json:"dual_track,optional"`
PatrolMode bool `json:"patrol_mode,optional"`
PatrolKeywords []string `json:"patrol_keywords,optional"`
}
type StartCopyMissionAnalyzeJobData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type StartCopyMissionCopyDraftJobData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type StartCopyMissionCopyDraftJobHandlerReq struct {
CopyMissionPath
StartCopyMissionCopyDraftJobReq
}
type StartCopyMissionCopyDraftJobReq struct {
ScanPostID string `json:"scan_post_id" validate:"required"`
}
type StartCopyMissionMatrixJobData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type StartCopyMissionMatrixJobHandlerReq struct {
CopyMissionPath
StartCopyMissionMatrixJobReq
}
type StartCopyMissionMatrixJobReq struct {
Count int `json:"count,optional"`
}
type StartCopyMissionScanJobData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type StartPersonaStyleAnalysisData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type StartPersonaStyleAnalysisHandlerReq struct {
PersonaPath
StartPersonaStyleAnalysisReq
}
type StartPersonaStyleAnalysisReq struct {
BenchmarkUsername string `json:"benchmark_username" validate:"required"`
}
type StartPersonaViralScanJobData struct {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
type StartPersonaViralScanJobHandlerReq struct {
PersonaPath
StartPersonaViralScanJobReq
}
type StartPersonaViralScanJobReq struct {
Keywords []string `json:"keywords,optional"`
}
type StartPlacementTopicScanJobHandlerReq struct {
PlacementTopicPath
StartBrandScanJobReq
}
type Status struct {
Code int64 `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data,optional"`
Error ErrorDetail `json:"error,optional"`
}
type StorePersonaStyleProfileData struct {
ID string `json:"id"`
UpdateAt int64 `json:"update_at"`
}
type StorePersonaStyleProfileReq struct {
ID string `path:"id" validate:"required"`
TenantID string `json:"tenant_id" validate:"required"`
OwnerUID string `json:"owner_uid" validate:"required"`
StyleProfile string `json:"style_profile" validate:"required"`
StyleBenchmark string `json:"style_benchmark,optional"`
}
type ThreadsAccountAiSettingsData struct {
AccountID string `json:"account_id"`
Provider string `json:"provider"`
Model string `json:"model"`
ResearchProvider string `json:"research_provider,omitempty"`
ResearchModel string `json:"research_model,omitempty"`
ApiKeys map[string]string `json:"api_keys"`
ApiKeysConfigured map[string]interface{} `json:"api_keys_configured"`
}
type ThreadsAccountConnectionData struct {
AccountID string `json:"account_id"`
AccountName string `json:"account_name"`
Username string `json:"username,omitempty"`
BrowserConnected bool `json:"browser_connected"`
ApiConnected bool `json:"api_connected"`
Prefs ThreadsAccountConnectionPrefs `json:"prefs"`
}
type ThreadsAccountConnectionPrefs struct {
SearchViaApi bool `json:"search_via_api"`
SearchSourceMode string `json:"search_source_mode"`
PublishViaApi bool `json:"publish_via_api"`
DevMode bool `json:"dev_mode"`
ScrapeReplies bool `json:"scrape_replies"`
RepliesPerPost int `json:"replies_per_post"`
PublishHeaded bool `json:"publish_headed"`
PlaywrightDebug bool `json:"playwright_debug"`
}
type ThreadsAccountData struct {
ID string `json:"id"`
DisplayName string `json:"display_name,omitempty"`
Username string `json:"username,omitempty"`
ThreadsUserID string `json:"threads_user_id,omitempty"`
PersonaID string `json:"persona_id,omitempty"` // deprecated: persona is chosen per publish, not bound to account
BrowserConnected bool `json:"browser_connected"`
ApiConnected bool `json:"api_connected"`
Status string `json:"status"`
CreateAt int64 `json:"create_at"`
UpdateAt int64 `json:"update_at"`
}
type ThreadsAccountPath struct {
ID string `path:"id" validate:"required"`
}
type UpdateBrandHandlerReq struct {
BrandPath
UpdateBrandReq
}
type UpdateBrandProductHandlerReq struct {
BrandProductPath
UpdateBrandProductReq
}
type UpdateBrandProductReq struct {
Label *string `json:"label,optional"`
ProductContext *string `json:"product_context,optional"`
MatchTags []string `json:"match_tags,optional"`
}
type UpdateBrandReq struct {
DisplayName *string `json:"display_name,optional"`
TopicName *string `json:"topic_name,optional"`
SeedQuery *string `json:"seed_query,optional"`
Brief *string `json:"brief,optional"`
ProductBrief *string `json:"product_brief,optional"`
ProductContext *string `json:"product_context,optional"`
ProductID *string `json:"product_id,optional"`
TargetAudience *string `json:"target_audience,optional"`
Goals *string `json:"goals,optional"`
AudienceSummary *string `json:"audience_summary,optional"`
ContentGoal *string `json:"content_goal,optional"`
Questions []string `json:"questions,optional"`
Pillars []string `json:"pillars,optional"`
Exclusions []string `json:"exclusions,optional"`
PatrolKeywords []string `json:"patrol_keywords,optional"`
}
type UpdateCopyDraftHandlerReq struct {
CopyDraftPath
UpdateCopyDraftReq
}
type UpdateCopyDraftReq struct {
Text *string `json:"text,optional"`
Hook *string `json:"hook,optional"`
Angle *string `json:"angle,optional"`
Status *string `json:"status,optional"`
}
type UpdateCopyMissionHandlerReq struct {
CopyMissionPath
UpdateCopyMissionReq
}
type UpdateCopyMissionReq struct {
Label *string `json:"label,optional"`
SeedQuery *string `json:"seed_query,optional"`
Brief *string `json:"brief,optional"`
AudienceSummary *string `json:"audience_summary,optional"`
ContentGoal *string `json:"content_goal,optional"`
Questions []string `json:"questions,optional"`
Pillars []string `json:"pillars,optional"`
Exclusions []string `json:"exclusions,optional"`
BenchmarkNotes *string `json:"benchmark_notes,optional"`
SelectedTags []string `json:"selected_tags,optional"`
Status *string `json:"status,optional"`
}
type UpdateJobScheduleReq struct {
ID string `path:"id" validate:"required"` // schedule id
Cron string `json:"cron,optional"` // cron expression
Timezone string `json:"timezone,optional"` // timezone
PayloadTemplate map[string]interface{} `json:"payload_template,optional"` // payload template
Enabled *bool `json:"enabled,optional"` // enabled flag
}
type UpdateMemberMeReq struct {
DisplayName string `json:"display_name,optional"`
Avatar string `json:"avatar,optional"`
Language string `json:"language,optional"`
Currency string `json:"currency,optional"`
Phone string `json:"phone,optional"`
}
type UpdateMemberPlacementSettingsReq struct {
WebSearchProvider *string `json:"web_search_provider,optional"`
BraveAPIKey *string `json:"brave_api_key,optional"`
ExaAPIKey *string `json:"exa_api_key,optional"`
BraveCountry *string `json:"brave_country,optional"`
BraveSearchLang *string `json:"brave_search_lang,optional"`
ExaUserLocation *string `json:"exa_user_location,optional"`
ExpandStrategy *string `json:"expand_strategy,optional"`
}
type UpdatePersonaHandlerReq struct {
PersonaPath
UpdatePersonaReq
}
type UpdatePersonaReq struct {
DisplayName *string `json:"display_name,optional"`
Persona *string `json:"persona,optional"`
Brief *string `json:"brief,optional"`
StyleProfile *string `json:"style_profile,optional"`
StyleBenchmark *string `json:"style_benchmark,optional"`
}
type UpdatePlacementTopicHandlerReq struct {
PlacementTopicPath
UpdatePlacementTopicReq
}
type UpdatePlacementTopicReq struct {
BrandID *string `json:"brand_id,optional"`
TopicName *string `json:"topic_name,optional"`
SeedQuery *string `json:"seed_query,optional"`
Brief *string `json:"brief,optional"`
ProductID *string `json:"product_id,optional"`
AudienceSummary *string `json:"audience_summary,optional"`
ContentGoal *string `json:"content_goal,optional"`
Questions []string `json:"questions,optional"`
Pillars []string `json:"pillars,optional"`
Exclusions []string `json:"exclusions,optional"`
PatrolKeywords []string `json:"patrol_keywords,optional"`
}
type UpdateThreadsAccountAiSettingsHandlerReq struct {
ThreadsAccountPath
UpdateThreadsAccountAiSettingsReq
}
type UpdateThreadsAccountAiSettingsReq struct {
Provider *string `json:"provider,optional"`
Model *string `json:"model,optional"`
ResearchProvider *string `json:"research_provider,optional"`
ResearchModel *string `json:"research_model,optional"`
ApiKeys map[string]string `json:"api_keys,optional"`
}
type UpdateThreadsAccountConnectionHandlerReq struct {
ThreadsAccountPath
UpdateThreadsAccountConnectionReq
}
type UpdateThreadsAccountConnectionReq struct {
SearchViaApi *bool `json:"search_via_api,optional"`
SearchSourceMode *string `json:"search_source_mode,optional"`
PublishViaApi *bool `json:"publish_via_api,optional"`
DevMode *bool `json:"dev_mode,optional"`
ScrapeReplies *bool `json:"scrape_replies,optional"`
RepliesPerPost *int `json:"replies_per_post,optional"`
PublishHeaded *bool `json:"publish_headed,optional"`
PlaywrightDebug *bool `json:"playwright_debug,optional"`
}
type UpdateThreadsAccountHandlerReq struct {
ThreadsAccountPath
UpdateThreadsAccountReq
}
type UpdateThreadsAccountReq struct {
DisplayName *string `json:"display_name,optional"`
PersonaID *string `json:"persona_id,optional"` // deprecated: use persona_id in publish payload instead
}
type UpsertBrandScanScheduleHandlerReq struct {
BrandPath
UpsertBrandScanScheduleReq
}
type UpsertBrandScanScheduleReq struct {
Cron string `json:"cron,optional"`
Timezone string `json:"timezone,optional"`
Enabled bool `json:"enabled"`
}
type UpsertCopyMissionScanScheduleHandlerReq struct {
CopyMissionPath
UpsertCopyMissionScanScheduleReq
}
type UpsertCopyMissionScanScheduleReq struct {
Cron string `json:"cron,optional"`
Timezone string `json:"timezone,optional"`
Enabled bool `json:"enabled"`
}
type UpsertJobTemplateReq struct {
Type string `path:"type" validate:"required"` // template type
Version int `json:"version,optional"` // template version
Name string `json:"name" validate:"required"` // display name
Description string `json:"description,optional"` // description
Enabled bool `json:"enabled"` // enabled flag
Repeatable bool `json:"repeatable"` // repeatable flag
ConcurrencyPolicy string `json:"concurrency_policy,optional"` // concurrency policy
DedupeKeys []string `json:"dedupe_keys,optional"` // dedupe keys
TimeoutSeconds int `json:"timeout_seconds,optional"` // timeout seconds
CancelPolicy JobCancelPolicyData `json:"cancel_policy,optional"` // cancel policy
RetryPolicy JobRetryPolicyData `json:"retry_policy,optional"` // retry policy
Steps []JobTemplateStepData `json:"steps" validate:"required,min=1,dive"` // steps
}
type UpsertPlacementTopicScanScheduleHandlerReq struct {
PlacementTopicPath
UpsertBrandScanScheduleReq
}
type ViralScanPostData struct {
ID string `json:"id"`
SearchTag string `json:"search_tag"`
Permalink string `json:"permalink"`
Author string `json:"author"`
AuthorVerified bool `json:"author_verified,omitempty"`
FollowerCount int `json:"follower_count,omitempty"`
Text string `json:"text"`
LikeCount int `json:"like_count"`
ReplyCount int `json:"reply_count"`
EngagementScore int `json:"engagement_score"`
Source string `json:"source"`
ScanJobID string `json:"scan_job_id"`
Replies []ScanReplyData `json:"replies,omitempty"`
CreateAt int64 `json:"create_at"`
}
type WorkerCancelCheckData struct {
Cancelled bool `json:"cancelled"`
}
type WorkerCompleteReq struct {
WorkerJobPath
WorkerID string `json:"worker_id" validate:"required"`
Result map[string]interface{} `json:"result,optional"`
}
type WorkerFailReq struct {
WorkerJobPath
WorkerID string `json:"worker_id" validate:"required"`
Error string `json:"error" validate:"required"`
Phase string `json:"phase,optional"`
}
type WorkerHeartbeatReq struct {
WorkerJobPath
WorkerID string `json:"worker_id" validate:"required"`
TTLSeconds int `json:"ttl_seconds,optional"`
}
type WorkerJobPath struct {
ID string `path:"id" validate:"required"`
}
type WorkerJobReq struct {
WorkerJobPath
WorkerID string `json:"worker_id" validate:"required"`
}
type WorkerOKData struct {
OK bool `json:"ok"`
}
type WorkerProgressReq struct {
WorkerJobPath
WorkerID string `json:"worker_id" validate:"required"`
Phase string `json:"phase,optional"`
Summary string `json:"summary,optional"`
Percentage int `json:"percentage,optional"`
Steps []JobStepProgressData `json:"steps,optional"`
}
type WorkerThreadsAccountSessionData struct {
AccountID string `json:"account_id"`
StorageState string `json:"storage_state"`
UpdateAt int64 `json:"update_at"`
}
type WorkerThreadsAccountSessionReq struct {
ID string `path:"id" validate:"required"`
TenantID string `json:"tenant_id" validate:"required"`
OwnerUID string `json:"owner_uid" validate:"required"`
}