b31d8d0096
- Added migration to harden task audit tracking by modifying audit_logs and related tables. - Introduced operator_id to several tables for better tracking of actions. - Updated article_templates with new prompt templates for various article types, enhancing content generation. - Created prompt_rules and schedule_tasks tables to manage content generation rules and scheduling. - Added foreign key constraints to articles for better data integrity.
128 lines
2.8 KiB
Go
128 lines
2.8 KiB
Go
package app
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
func normalizePlatformIDs(platformIDs []string) []string {
|
|
if len(platformIDs) == 0 {
|
|
return nil
|
|
}
|
|
|
|
seen := make(map[string]struct{}, len(platformIDs))
|
|
normalized := make([]string, 0, len(platformIDs))
|
|
for _, platformID := range platformIDs {
|
|
next := strings.TrimSpace(platformID)
|
|
if next == "" {
|
|
continue
|
|
}
|
|
if _, exists := seen[next]; exists {
|
|
continue
|
|
}
|
|
seen[next] = struct{}{}
|
|
normalized = append(normalized, next)
|
|
}
|
|
|
|
if len(normalized) == 0 {
|
|
return nil
|
|
}
|
|
return normalized
|
|
}
|
|
|
|
func parsePlatformIDs(value string) []string {
|
|
if strings.TrimSpace(value) == "" {
|
|
return nil
|
|
}
|
|
return normalizePlatformIDs(strings.Split(value, ","))
|
|
}
|
|
|
|
func serializePlatformIDs(platformIDs []string) string {
|
|
normalized := normalizePlatformIDs(platformIDs)
|
|
if len(normalized) == 0 {
|
|
return ""
|
|
}
|
|
return strings.Join(normalized, ",")
|
|
}
|
|
|
|
func resolveArticlePlatforms(wizardStateJSON, inputParamsJSON []byte) []string {
|
|
if platforms := extractPlatformsFromJSONPayload(wizardStateJSON); len(platforms) > 0 {
|
|
return platforms
|
|
}
|
|
if platforms := extractPlatformsFromJSONPayload(inputParamsJSON); len(platforms) > 0 {
|
|
return platforms
|
|
}
|
|
return []string{}
|
|
}
|
|
|
|
func extractPlatformsFromJSONPayload(raw []byte) []string {
|
|
if len(raw) == 0 {
|
|
return nil
|
|
}
|
|
|
|
var payload map[string]interface{}
|
|
if err := json.Unmarshal(raw, &payload); err != nil {
|
|
return nil
|
|
}
|
|
|
|
if platforms := normalizePlatformsFromValue(payload["platforms"]); len(platforms) > 0 {
|
|
return platforms
|
|
}
|
|
if platforms := normalizePlatformsFromValue(payload["target_platforms"]); len(platforms) > 0 {
|
|
return platforms
|
|
}
|
|
|
|
if targetPlatform, ok := payload["target_platform"].(string); ok {
|
|
return parsePlatformIDs(targetPlatform)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func normalizePlatformsFromValue(raw interface{}) []string {
|
|
switch typed := raw.(type) {
|
|
case nil:
|
|
return nil
|
|
case string:
|
|
return parsePlatformIDs(typed)
|
|
case []string:
|
|
return normalizePlatformIDs(typed)
|
|
case []interface{}:
|
|
values := make([]string, 0, len(typed))
|
|
for _, item := range typed {
|
|
value, ok := item.(string)
|
|
if !ok {
|
|
continue
|
|
}
|
|
values = append(values, value)
|
|
}
|
|
return normalizePlatformIDs(values)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func mergeArticleWizardState(raw []byte, title string, platforms []string) ([]byte, error) {
|
|
state := make(map[string]interface{})
|
|
if len(raw) > 0 {
|
|
_ = json.Unmarshal(raw, &state)
|
|
}
|
|
|
|
trimmedTitle := strings.TrimSpace(title)
|
|
if trimmedTitle != "" {
|
|
state["title"] = trimmedTitle
|
|
}
|
|
|
|
if platforms != nil {
|
|
normalized := normalizePlatformIDs(platforms)
|
|
if len(normalized) == 0 {
|
|
delete(state, "platforms")
|
|
delete(state, "target_platform")
|
|
} else {
|
|
state["platforms"] = normalized
|
|
state["target_platform"] = strings.Join(normalized, ",")
|
|
}
|
|
}
|
|
|
|
return json.Marshal(state)
|
|
}
|