231 lines
6.8 KiB
Plaintext
231 lines
6.8 KiB
Plaintext
syntax = "v1"
|
|
|
|
type (
|
|
CopyResearchMapData {
|
|
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"`
|
|
}
|
|
|
|
PersonaData {
|
|
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"`
|
|
}
|
|
|
|
ListPersonasData {
|
|
List []PersonaData `json:"list"`
|
|
}
|
|
|
|
CreatePersonaReq {
|
|
DisplayName string `json:"display_name,optional"`
|
|
}
|
|
|
|
PersonaPath {
|
|
ID string `path:"id" validate:"required"`
|
|
}
|
|
|
|
UpdatePersonaReq {
|
|
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"`
|
|
}
|
|
|
|
StartPersonaStyleAnalysisReq {
|
|
BenchmarkUsername string `json:"benchmark_username" validate:"required"`
|
|
}
|
|
|
|
StartPersonaStyleAnalysisData {
|
|
JobID string `json:"job_id"`
|
|
Status string `json:"status"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
UpdatePersonaHandlerReq {
|
|
PersonaPath
|
|
UpdatePersonaReq
|
|
}
|
|
|
|
StartPersonaStyleAnalysisHandlerReq {
|
|
PersonaPath
|
|
StartPersonaStyleAnalysisReq
|
|
}
|
|
|
|
StartPersonaViralScanJobReq {
|
|
Keywords []string `json:"keywords,optional"`
|
|
}
|
|
|
|
StartPersonaViralScanJobData {
|
|
JobID string `json:"job_id"`
|
|
Status string `json:"status"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
StartPersonaViralScanJobHandlerReq {
|
|
PersonaPath
|
|
StartPersonaViralScanJobReq
|
|
}
|
|
|
|
ListPersonaViralScanPostsReq {
|
|
Limit int `form:"limit,optional"`
|
|
}
|
|
|
|
ViralScanPostData {
|
|
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"`
|
|
}
|
|
|
|
ListPersonaViralScanPostsData {
|
|
List []ViralScanPostData `json:"list"`
|
|
Total int `json:"total"`
|
|
}
|
|
|
|
ListPersonaViralScanPostsHandlerReq {
|
|
PersonaPath
|
|
ListPersonaViralScanPostsReq
|
|
}
|
|
|
|
CopyDraftData {
|
|
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"`
|
|
}
|
|
|
|
ListPersonaCopyDraftsData {
|
|
List []CopyDraftData `json:"list"`
|
|
Total int `json:"total"`
|
|
}
|
|
|
|
GeneratePersonaCopyDraftReq {
|
|
ScanPostID string `json:"scan_post_id" validate:"required"`
|
|
}
|
|
|
|
GeneratePersonaCopyDraftHandlerReq {
|
|
PersonaPath
|
|
GeneratePersonaCopyDraftReq
|
|
}
|
|
|
|
GeneratePersonaCopyDraftData {
|
|
Draft CopyDraftData `json:"draft"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
CopyDraftPath {
|
|
ID string `path:"id" validate:"required"`
|
|
DraftID string `path:"draftId" validate:"required"`
|
|
}
|
|
|
|
UpdateCopyDraftReq {
|
|
Text *string `json:"text,optional"`
|
|
Hook *string `json:"hook,optional"`
|
|
Angle *string `json:"angle,optional"`
|
|
Status *string `json:"status,optional"`
|
|
}
|
|
|
|
UpdateCopyDraftHandlerReq {
|
|
CopyDraftPath
|
|
UpdateCopyDraftReq
|
|
}
|
|
|
|
PublishCopyDraftReq {
|
|
Text string `json:"text,optional"`
|
|
Confirm bool `json:"confirm"`
|
|
}
|
|
|
|
PublishCopyDraftHandlerReq {
|
|
CopyDraftPath
|
|
PublishCopyDraftReq
|
|
}
|
|
|
|
PublishCopyDraftData {
|
|
DraftID string `json:"draft_id"`
|
|
MediaID string `json:"media_id"`
|
|
Permalink string `json:"permalink,omitempty"`
|
|
Status string `json:"status"`
|
|
Message string `json:"message"`
|
|
}
|
|
)
|
|
|
|
@server(
|
|
group: persona
|
|
prefix: /api/v1/personas
|
|
middleware: AuthJWT
|
|
tags: "Persona"
|
|
summary: "Reusable persona profiles with 8D style strategy. Requires Bearer JWT."
|
|
)
|
|
service gateway {
|
|
@handler listPersonas
|
|
get / returns (ListPersonasData)
|
|
|
|
@handler createPersona
|
|
post / (CreatePersonaReq) returns (PersonaData)
|
|
|
|
@handler getPersona
|
|
get /:id (PersonaPath) returns (PersonaData)
|
|
|
|
@handler updatePersona
|
|
patch /:id (UpdatePersonaHandlerReq) returns (PersonaData)
|
|
|
|
@handler deletePersona
|
|
delete /:id (PersonaPath)
|
|
|
|
@handler startPersonaStyleAnalysis
|
|
post /:id/style-analysis (StartPersonaStyleAnalysisHandlerReq) returns (StartPersonaStyleAnalysisData)
|
|
|
|
@handler startPersonaViralScanJob
|
|
post /:id/viral-scan-jobs (StartPersonaViralScanJobHandlerReq) returns (StartPersonaViralScanJobData)
|
|
|
|
@handler listPersonaViralScanPosts
|
|
get /:id/viral-scan-posts (ListPersonaViralScanPostsHandlerReq) returns (ListPersonaViralScanPostsData)
|
|
|
|
@handler listPersonaCopyDrafts
|
|
get /:id/copy-drafts (PersonaPath) returns (ListPersonaCopyDraftsData)
|
|
|
|
@handler generatePersonaCopyDraft
|
|
post /:id/copy-drafts/generate (GeneratePersonaCopyDraftHandlerReq) returns (GeneratePersonaCopyDraftData)
|
|
|
|
@handler updatePersonaCopyDraft
|
|
patch /:id/copy-drafts/:draftId (UpdateCopyDraftHandlerReq) returns (CopyDraftData)
|
|
|
|
@handler publishPersonaCopyDraft
|
|
post /:id/copy-drafts/:draftId/publish (PublishCopyDraftHandlerReq) returns (PublishCopyDraftData)
|
|
} |