Add a `seed-demo` subcommand (cmd/seed_demo.go + internal/demoseed/) that inserts a fixed reference catalog into the member-console DB so the operator panel has rows to walk through for UX research. Catalog: 6 demo-* products (4 by product_type + 2 extra plans), 1 plan ladder with 3 tiers, 1 entitlement set with 2 rules (limit + boolean), and 1 grant on Alice's personal org (once she's logged in). Person rows for bob/carlos/diana are seeded via provisioning.AutoProvision keyed on the pinned Keycloak UUIDs — no longer fragile now that seed-keycloak.sh's partialImport switch preserves the pinned id. Alice is intentionally NOT pre-seeded so the lazy-creation OIDC flow stays exercised on every fresh stack. Idempotency: list+filter by `name` for catalog rows, by `oidc_subject` for persons. Re-running is a no-op for created rows; warns + skips the grant if alice hasn't logged in yet. Host-side invocation only — run `./test/seed-demo.sh` after bootstrap-stack.sh. Mirrors how member-console itself runs on the host (config + secrets live under test/). Two OpenSpec changes folded in: 2026-05-10-member-console-demo-seeder (the seeder) and 2026-05-11-demo-seeder-persons (the persons follow-up unlocked by the Keycloak fix).
56 lines
1.6 KiB
Go
56 lines
1.6 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
|
|
"git.coopcloud.tech/wiki-cafe/member-console/internal/db"
|
|
"git.coopcloud.tech/wiki-cafe/member-console/internal/demoseed"
|
|
"git.coopcloud.tech/wiki-cafe/member-console/internal/logging"
|
|
"github.com/spf13/cobra"
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
var seedDemoCmd = &cobra.Command{
|
|
Use: "seed-demo",
|
|
Short: "Seed a fixed reference catalog of demo data for the operator panel",
|
|
Long: `Insert an idempotent reference catalog (products, entitlement sets, plan ladder,
|
|
one grant) so the operator panel has data to walk through. Re-running is a no-op.
|
|
Person rows are NOT seeded — log in as bob/carlos/diana once to populate them via
|
|
the existing OIDC lazy-creation path. See OpenSpec change
|
|
2026-05-10-member-console-demo-seeder for the rationale.`,
|
|
Args: cobra.NoArgs,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
ctx := context.Background()
|
|
|
|
env := viper.GetString("env")
|
|
logger := logging.SetupLogger(env)
|
|
ctx = logging.WithContext(ctx, logger)
|
|
|
|
dbDSN := viper.GetString("db-dsn")
|
|
dbConfig := db.DefaultDBConfig(dbDSN)
|
|
database, err := db.ConnectAndMigrate(ctx, logger, dbConfig, migrationSources())
|
|
if err != nil {
|
|
logger.Error("failed to initialize database", slog.Any("error", err))
|
|
return err
|
|
}
|
|
defer database.Close()
|
|
|
|
summary, err := demoseed.Seed(ctx, database, logger)
|
|
if err != nil {
|
|
logger.Error("seed-demo failed", slog.Any("error", err))
|
|
return err
|
|
}
|
|
|
|
logger.Info("seed-demo complete",
|
|
slog.Int("created", summary.Created),
|
|
slog.Int("skipped", summary.Skipped),
|
|
)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(seedDemoCmd)
|
|
}
|