thread-master/backend/generate/api/copy_mission.api

383 lines
13 KiB
Plaintext
Raw Normal View History

2026-06-26 08:37:04 +00:00
syntax = "v1"
type (
CopySuggestedTagData {
Tag string `json:"tag"`
Reason string `json:"reason,omitempty"`
SearchIntent string `json:"search_intent,omitempty"`
SearchType string `json:"search_type,omitempty"`
}
CopySimilarAccountData {
2026-06-28 08:28:42 +00:00
Username string `json:"username"`
Reason string `json:"reason,omitempty"`
Source string `json:"source,omitempty"`
MatchedSource []string `json:"matched_source,omitempty"`
Confidence string `json:"confidence,omitempty"`
Status string `json:"status,omitempty"`
TopicRelevance float64 `json:"topic_relevance,omitempty"`
LastSeenAt int64 `json:"last_seen_at,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"`
}
CopyAudienceSampleData {
Username string `json:"username"`
SamplePostId string `json:"sample_post_id,omitempty"`
SampleText string `json:"sample_text,omitempty"`
ReplyLikeCount int `json:"reply_like_count,omitempty"`
Appearances int `json:"appearances,omitempty"`
FirstSeenAt int64 `json:"first_seen_at"`
LastSeenAt int64 `json:"last_seen_at,omitempty"`
Status string `json:"status,omitempty"`
}
CopyMissionResearchItemData {
Title string `json:"title,omitempty"`
URL string `json:"url,omitempty"`
Snippet string `json:"snippet,omitempty"`
Query string `json:"query,omitempty"`
2026-06-26 08:37:04 +00:00
}
CopyMissionResearchMapData {
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"`
2026-06-28 08:28:42 +00:00
KnowledgeItems []string `json:"knowledge_items,omitempty"`
SelectedKnowledgeItems []string `json:"selected_knowledge_items,omitempty"`
ResearchItems []CopyMissionResearchItemData `json:"research_items,omitempty"`
2026-06-26 08:37:04 +00:00
SuggestedTags []CopySuggestedTagData `json:"suggested_tags,omitempty"`
SimilarAccounts []CopySimilarAccountData `json:"similar_accounts,omitempty"`
2026-06-28 08:28:42 +00:00
AudienceSamples []CopyAudienceSampleData `json:"audience_samples,omitempty"`
2026-06-26 08:37:04 +00:00
BenchmarkNotes string `json:"benchmark_notes,omitempty"`
}
2026-06-28 08:28:42 +00:00
ExpandCopyMissionGraphHandlerReq {
CopyMissionPath
ExpandKnowledgeGraphReq
}
PatchCopyMissionGraphNodesHandlerReq {
CopyMissionPath
PatchKnowledgeGraphNodesReq
}
PatchSimilarAccountReq {
Status string `json:"status"`
}
PatchAudienceSampleReq {
Status string `json:"status"`
}
CopyMissionSimilarAccountPath {
PersonaID string `path:"personaId" validate:"required"`
ID string `path:"id" validate:"required"`
Username string `path:"username" validate:"required"`
}
PatchSimilarAccountHandlerReq {
CopyMissionSimilarAccountPath
PatchSimilarAccountReq
}
PatchAudienceSampleHandlerReq {
CopyMissionSimilarAccountPath
PatchAudienceSampleReq
}
2026-06-26 08:37:04 +00:00
CopyMissionData {
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"`
}
ListCopyMissionsData {
List []CopyMissionData `json:"list"`
}
CreateCopyMissionReq {
Label string `json:"label" validate:"required"`
SeedQuery string `json:"seed_query" validate:"required"`
Brief string `json:"brief" validate:"required"`
}
UpdateCopyMissionReq {
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"`
2026-06-28 08:28:42 +00:00
KnowledgeItems []string `json:"knowledge_items,optional"`
SelectedKnowledgeItems []string `json:"selected_knowledge_items,optional"`
2026-06-26 08:37:04 +00:00
BenchmarkNotes *string `json:"benchmark_notes,optional"`
SelectedTags []string `json:"selected_tags,optional"`
Status *string `json:"status,optional"`
}
CopyMissionScanScheduleData {
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"`
}
UpsertCopyMissionScanScheduleReq {
Cron string `json:"cron,optional"`
Timezone string `json:"timezone,optional"`
Enabled bool `json:"enabled"`
}
UpsertCopyMissionScanScheduleHandlerReq {
CopyMissionPath
UpsertCopyMissionScanScheduleReq
}
CopyMissionPath {
PersonaID string `path:"personaId" validate:"required"`
ID string `path:"id" validate:"required"`
}
PersonaCopyMissionsPath {
PersonaID string `path:"personaId" validate:"required"`
}
2026-06-28 08:28:42 +00:00
CopyMissionInspirationReq {
Keyword string `json:"keyword,optional"`
}
CopyMissionInspirationHandlerReq {
PersonaCopyMissionsPath
CopyMissionInspirationReq
}
2026-06-26 08:37:04 +00:00
CreateCopyMissionHandlerReq {
PersonaCopyMissionsPath
CreateCopyMissionReq
}
UpdateCopyMissionHandlerReq {
CopyMissionPath
UpdateCopyMissionReq
}
StartCopyMissionAnalyzeJobData {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
StartCopyMissionScanJobData {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
StartCopyMissionMatrixJobReq {
Count int `json:"count,optional"`
}
StartCopyMissionMatrixJobHandlerReq {
CopyMissionPath
StartCopyMissionMatrixJobReq
}
StartCopyMissionMatrixJobData {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
StartCopyMissionCopyDraftJobReq {
ScanPostID string `json:"scan_post_id" validate:"required"`
}
StartCopyMissionCopyDraftJobHandlerReq {
CopyMissionPath
StartCopyMissionCopyDraftJobReq
}
StartCopyMissionCopyDraftJobData {
JobID string `json:"job_id"`
Status string `json:"status"`
Message string `json:"message"`
}
ListCopyMissionScanPostsReq {
Limit int `form:"limit,optional"`
}
ListCopyMissionScanPostsHandlerReq {
CopyMissionPath
ListCopyMissionScanPostsReq
}
GenerateCopyMissionMatrixReq {
Count int `json:"count,optional"`
}
GenerateCopyMissionMatrixHandlerReq {
CopyMissionPath
GenerateCopyMissionMatrixReq
}
GenerateCopyMissionMatrixData {
Drafts []CopyDraftData `json:"drafts"`
Message string `json:"message"`
}
ListCopyMissionCopyDraftsData {
List []CopyDraftData `json:"list"`
Total int `json:"total"`
}
2026-06-28 08:28:42 +00:00
DeleteCopyMissionMatrixDraftsReq {
DraftIDs []string `json:"draft_ids,optional"`
}
DeleteCopyMissionMatrixDraftsHandlerReq {
CopyMissionPath
DeleteCopyMissionMatrixDraftsReq
}
DeleteCopyMissionMatrixDraftsData {
Deleted int `json:"deleted"`
Message string `json:"message"`
}
2026-06-30 09:10:23 +00:00
ScheduleCopyDraftsReq {
AccountID string `json:"account_id" validate:"required"`
DraftIDs []string `json:"draft_ids" validate:"required,min=1"`
StartAt int64 `json:"start_at,optional"`
Timezone string `json:"timezone,optional"`
Slots []PublishSlotData `json:"slots,optional"`
Mode string `json:"mode,optional"`
}
ScheduleCopyMissionDraftsHandlerReq {
CopyMissionPath
ScheduleCopyDraftsReq
}
ScheduleCopyDraftsData {
Scheduled int `json:"scheduled"`
List []PublishQueueItemData `json:"list"`
Message string `json:"message"`
}
2026-06-26 08:37:04 +00:00
CopyMissionInspirationSourceData {
Query string `json:"query,omitempty"`
Title string `json:"title,omitempty"`
Snippet string `json:"snippet,omitempty"`
URL string `json:"url,omitempty"`
}
CopyMissionInspirationData {
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"`
}
)
@server(
group: copy_mission
prefix: /api/v1/personas
middleware: AuthJWT
tags: "CopyMission"
summary: "Copy ninja missions (Flow A). Requires Bearer JWT."
)
service gateway {
@handler listCopyMissions
get /:personaId/copy-missions (PersonaCopyMissionsPath) returns (ListCopyMissionsData)
@handler inspireCopyMission
2026-06-28 08:28:42 +00:00
post /:personaId/copy-mission-inspiration (CopyMissionInspirationHandlerReq) returns (CopyMissionInspirationData)
2026-06-26 08:37:04 +00:00
@handler createCopyMission
post /:personaId/copy-missions (CreateCopyMissionHandlerReq) returns (CopyMissionData)
@handler getCopyMission
get /:personaId/copy-missions/:id (CopyMissionPath) returns (CopyMissionData)
@handler updateCopyMission
patch /:personaId/copy-missions/:id (UpdateCopyMissionHandlerReq) returns (CopyMissionData)
@handler deleteCopyMission
delete /:personaId/copy-missions/:id (CopyMissionPath)
@handler startCopyMissionAnalyzeJob
post /:personaId/copy-missions/:id/analyze-jobs (CopyMissionPath) returns (StartCopyMissionAnalyzeJobData)
@handler startCopyMissionScanJob
post /:personaId/copy-missions/:id/scan-jobs (CopyMissionPath) returns (StartCopyMissionScanJobData)
@handler listCopyMissionScanPosts
get /:personaId/copy-missions/:id/scan-posts (ListCopyMissionScanPostsHandlerReq) returns (ListPersonaViralScanPostsData)
@handler generateCopyMissionMatrix
post /:personaId/copy-missions/:id/matrix-drafts (GenerateCopyMissionMatrixHandlerReq) returns (GenerateCopyMissionMatrixData)
@handler startCopyMissionMatrixJob
post /:personaId/copy-missions/:id/matrix-jobs (StartCopyMissionMatrixJobHandlerReq) returns (StartCopyMissionMatrixJobData)
@handler startCopyMissionCopyDraftJob
post /:personaId/copy-missions/:id/copy-draft-jobs (StartCopyMissionCopyDraftJobHandlerReq) returns (StartCopyMissionCopyDraftJobData)
@handler listCopyMissionCopyDrafts
get /:personaId/copy-missions/:id/copy-drafts (CopyMissionPath) returns (ListCopyMissionCopyDraftsData)
2026-06-28 08:28:42 +00:00
@handler deleteCopyMissionMatrixDrafts
post /:personaId/copy-missions/:id/matrix-drafts/delete (DeleteCopyMissionMatrixDraftsHandlerReq) returns (DeleteCopyMissionMatrixDraftsData)
2026-06-30 09:10:23 +00:00
@handler scheduleCopyMissionDrafts
post /:personaId/copy-missions/:id/copy-drafts/schedule (ScheduleCopyMissionDraftsHandlerReq) returns (ScheduleCopyDraftsData)
2026-06-26 08:37:04 +00:00
@handler getCopyMissionScanSchedule
get /:personaId/copy-missions/:id/scan-schedule (CopyMissionPath) returns (CopyMissionScanScheduleData)
@handler upsertCopyMissionScanSchedule
put /:personaId/copy-missions/:id/scan-schedule (UpsertCopyMissionScanScheduleHandlerReq) returns (CopyMissionScanScheduleData)
2026-06-28 08:28:42 +00:00
@handler patchCopyMissionSimilarAccount
patch /:personaId/copy-missions/:id/similar-accounts/:username (PatchSimilarAccountHandlerReq) returns (CopyMissionData)
@handler patchCopyMissionAudienceSample
patch /:personaId/copy-missions/:id/audience-samples/:username (PatchAudienceSampleHandlerReq) returns (CopyMissionData)
@handler expandCopyMissionGraph
post /:personaId/copy-missions/:id/knowledge-graph/expand (ExpandCopyMissionGraphHandlerReq) returns (ExpandKnowledgeGraphData)
@handler getCopyMissionGraph
get /:personaId/copy-missions/:id/knowledge-graph (CopyMissionPath) returns (KnowledgeGraphData)
@handler patchCopyMissionGraphNodes
patch /:personaId/copy-missions/:id/knowledge-graph/nodes (PatchCopyMissionGraphNodesHandlerReq) returns (KnowledgeGraphData)
}