186 lines
5.8 KiB
Plaintext
186 lines
5.8 KiB
Plaintext
syntax = "v1"
|
||
|
||
type (
|
||
PlacementTopicData {
|
||
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"`
|
||
}
|
||
|
||
ListPlacementTopicsData {
|
||
List []PlacementTopicData `json:"list"`
|
||
}
|
||
|
||
CreatePlacementTopicReq {
|
||
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"`
|
||
}
|
||
|
||
UpdatePlacementTopicReq {
|
||
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"`
|
||
}
|
||
|
||
PlacementTopicPath {
|
||
ID string `path:"id" validate:"required"`
|
||
}
|
||
|
||
UpdatePlacementTopicHandlerReq {
|
||
PlacementTopicPath
|
||
UpdatePlacementTopicReq
|
||
}
|
||
|
||
CreatePlacementTopicHandlerReq {
|
||
CreatePlacementTopicReq
|
||
}
|
||
|
||
ExpandPlacementTopicGraphHandlerReq {
|
||
PlacementTopicPath
|
||
ExpandKnowledgeGraphReq
|
||
}
|
||
|
||
PatchPlacementTopicGraphNodesHandlerReq {
|
||
PlacementTopicPath
|
||
PatchKnowledgeGraphNodesReq
|
||
}
|
||
|
||
StartPlacementTopicScanJobHandlerReq {
|
||
PlacementTopicPath
|
||
StartBrandScanJobReq
|
||
}
|
||
|
||
ListPlacementTopicScanPostsHandlerReq {
|
||
PlacementTopicPath
|
||
ListBrandScanPostsReq
|
||
}
|
||
|
||
GeneratePlacementTopicOutreachDraftsHandlerReq {
|
||
PlacementTopicPath
|
||
GenerateOutreachDraftsReq
|
||
}
|
||
|
||
PublishPlacementTopicOutreachDraftHandlerReq {
|
||
PlacementTopicPath
|
||
PublishOutreachDraftReq
|
||
}
|
||
|
||
PatchPlacementTopicScanPostOutreachHandlerReq {
|
||
PlacementTopicPath
|
||
PostID string `path:"postId"`
|
||
PatchScanPostOutreachReq
|
||
}
|
||
|
||
DeletePlacementTopicScanPostHandlerReq {
|
||
PlacementTopicPath
|
||
PostID string `path:"postId" validate:"required"`
|
||
}
|
||
|
||
BatchDeletePlacementTopicScanPostsReq {
|
||
PostIDs []string `json:"post_ids" validate:"required"`
|
||
}
|
||
|
||
BatchDeletePlacementTopicScanPostsData {
|
||
DeletedCount int `json:"deleted_count"`
|
||
}
|
||
|
||
BatchDeletePlacementTopicScanPostsHandlerReq {
|
||
PlacementTopicPath
|
||
BatchDeletePlacementTopicScanPostsReq
|
||
}
|
||
|
||
GeneratePlacementTopicContentMatrixHandlerReq {
|
||
PlacementTopicPath
|
||
GenerateContentMatrixReq
|
||
}
|
||
|
||
UpsertPlacementTopicScanScheduleHandlerReq {
|
||
PlacementTopicPath
|
||
UpsertBrandScanScheduleReq
|
||
}
|
||
)
|
||
|
||
@server(
|
||
group: placement_topic
|
||
prefix: /api/v1/placement/topics
|
||
middleware: AuthJWT
|
||
tags: "Placement Topic"
|
||
summary: "找 TA 主題;每個主題關聯一個品牌,一個品牌可有多個主題。Requires Bearer JWT."
|
||
)
|
||
service gateway {
|
||
@handler listPlacementTopics
|
||
get / returns (ListPlacementTopicsData)
|
||
|
||
@handler createPlacementTopic
|
||
post / (CreatePlacementTopicHandlerReq) returns (PlacementTopicData)
|
||
|
||
@handler getPlacementTopic
|
||
get /:id (PlacementTopicPath) returns (PlacementTopicData)
|
||
|
||
@handler updatePlacementTopic
|
||
patch /:id (UpdatePlacementTopicHandlerReq) returns (PlacementTopicData)
|
||
|
||
@handler deletePlacementTopic
|
||
delete /:id (PlacementTopicPath)
|
||
|
||
@handler expandPlacementTopicGraph
|
||
post /:id/knowledge-graph/expand (ExpandPlacementTopicGraphHandlerReq) returns (ExpandKnowledgeGraphData)
|
||
|
||
@handler getPlacementTopicGraph
|
||
get /:id/knowledge-graph (PlacementTopicPath) returns (KnowledgeGraphData)
|
||
|
||
@handler patchPlacementTopicGraphNodes
|
||
patch /:id/knowledge-graph/nodes (PatchPlacementTopicGraphNodesHandlerReq) returns (KnowledgeGraphData)
|
||
|
||
@handler startPlacementTopicScanJob
|
||
post /:id/scan-jobs (StartPlacementTopicScanJobHandlerReq) returns (StartBrandScanJobData)
|
||
|
||
@handler listPlacementTopicScanPosts
|
||
get /:id/scan-posts (ListPlacementTopicScanPostsHandlerReq) returns (ListBrandScanPostsData)
|
||
|
||
@handler generatePlacementTopicOutreachDrafts
|
||
post /:id/outreach-drafts/generate (GeneratePlacementTopicOutreachDraftsHandlerReq) returns (GenerateOutreachDraftsData)
|
||
|
||
@handler publishPlacementTopicOutreachDraft
|
||
post /:id/outreach-drafts/publish (PublishPlacementTopicOutreachDraftHandlerReq) returns (PublishOutreachDraftData)
|
||
|
||
@handler patchPlacementTopicScanPostOutreach
|
||
patch /:id/scan-posts/:postId (PatchPlacementTopicScanPostOutreachHandlerReq) returns (ScanPostData)
|
||
|
||
@handler deletePlacementTopicScanPost
|
||
delete /:id/scan-posts/:postId (DeletePlacementTopicScanPostHandlerReq)
|
||
|
||
@handler batchDeletePlacementTopicScanPosts
|
||
post /:id/scan-posts/batch-delete (BatchDeletePlacementTopicScanPostsHandlerReq) returns (BatchDeletePlacementTopicScanPostsData)
|
||
|
||
@handler getPlacementTopicContentMatrix
|
||
get /:id/content-matrix (PlacementTopicPath) returns (ContentMatrixData)
|
||
|
||
@handler generatePlacementTopicContentMatrix
|
||
post /:id/content-matrix/generate (GeneratePlacementTopicContentMatrixHandlerReq) returns (ContentMatrixData)
|
||
|
||
@handler getPlacementTopicScanSchedule
|
||
get /:id/scan-schedule (PlacementTopicPath) returns (BrandScanScheduleData)
|
||
|
||
@handler upsertPlacementTopicScanSchedule
|
||
put /:id/scan-schedule (UpsertPlacementTopicScanScheduleHandlerReq) returns (BrandScanScheduleData)
|
||
}
|