thread-master/internal/types/types.go

1502 lines
54 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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"`
}