256 lines
8.6 KiB
Plaintext
256 lines
8.6 KiB
Plaintext
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 {
|
|
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"`
|
|
}
|
|
|
|
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"`
|
|
SuggestedTags []CopySuggestedTagData `json:"suggested_tags,omitempty"`
|
|
SimilarAccounts []CopySimilarAccountData `json:"similar_accounts,omitempty"`
|
|
BenchmarkNotes string `json:"benchmark_notes,omitempty"`
|
|
}
|
|
|
|
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"`
|
|
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"`
|
|
}
|
|
|
|
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"`
|
|
}
|
|
|
|
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
|
|
post /:personaId/copy-mission-inspiration (PersonaCopyMissionsPath) returns (CopyMissionInspirationData)
|
|
|
|
@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)
|
|
|
|
@handler getCopyMissionScanSchedule
|
|
get /:personaId/copy-missions/:id/scan-schedule (CopyMissionPath) returns (CopyMissionScanScheduleData)
|
|
|
|
@handler upsertCopyMissionScanSchedule
|
|
put /:personaId/copy-missions/:id/scan-schedule (UpsertCopyMissionScanScheduleHandlerReq) returns (CopyMissionScanScheduleData)
|
|
} |