78 lines
2.1 KiB
Go
78 lines
2.1 KiB
Go
// Command repair-category-prompts replaces legacy A1 / Platform Demo categories.prompt
|
|
// HTML marketing formulas with aiprompts.CategoryEnhanceUserTemplate (JSON-compatible
|
|
// user overlay: {{name}} {{description}} {{attrs}} {{category}} {{language}}; stores
|
|
// both prompt->>'sl' and "*"). Does not touch title_template / description_template
|
|
// (formulas are appended as plain-text instructions at enhance render time).
|
|
//
|
|
// Usage (from apps/api):
|
|
//
|
|
// go run ./cmd/repair-category-prompts -dry-run
|
|
// go run ./cmd/repair-category-prompts -apply
|
|
//
|
|
// DATABASE_URL / -postgres required. Default is dry-run (count only).
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/descrybe/descrybe-v2/apps/api/internal/catalog"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
func main() {
|
|
postgresURL := flag.String("postgres", os.Getenv("DATABASE_URL"), "Postgres URL (DATABASE_URL)")
|
|
dryRun := flag.Bool("dry-run", true, "count rows that would update (default true)")
|
|
apply := flag.Bool("apply", false, "write updates (implies not dry-run)")
|
|
flag.Parse()
|
|
|
|
if strings.TrimSpace(*postgresURL) == "" {
|
|
log.Fatal("-postgres / DATABASE_URL is required")
|
|
}
|
|
doDryRun := *dryRun
|
|
if *apply {
|
|
doDryRun = false
|
|
}
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
|
|
defer cancel()
|
|
|
|
pg, err := pgxpool.New(ctx, *postgresURL)
|
|
if err != nil {
|
|
log.Fatalf("postgres: %v", err)
|
|
}
|
|
defer pg.Close()
|
|
|
|
// Always print dry-run counts first when applying, so operators see the delta.
|
|
preview, err := catalog.RepairA1DemoCategoryEnhancePrompts(ctx, pg, true)
|
|
if err != nil {
|
|
log.Fatalf("dry-run: %v", err)
|
|
}
|
|
printResult("dry-run", preview)
|
|
|
|
if doDryRun {
|
|
return
|
|
}
|
|
|
|
res, err := catalog.RepairA1DemoCategoryEnhancePrompts(ctx, pg, false)
|
|
if err != nil {
|
|
log.Fatalf("apply: %v", err)
|
|
}
|
|
printResult("apply", res)
|
|
}
|
|
|
|
func printResult(phase string, res catalog.RepairCategoryEnhancePromptsResult) {
|
|
b, err := json.MarshalIndent(res, "", " ")
|
|
if err != nil {
|
|
log.Printf("%s: %+v", phase, res)
|
|
return
|
|
}
|
|
fmt.Printf("%s:\n%s\n", phase, string(b))
|
|
}
|