2026-08-17 09:33:07 +02:00
|
|
|
A1 Slovenija tenant seed (Postgres COPY archive, gzipped)
|
2026-08-09 22:47:43 +02:00
|
|
|
|
|
|
|
|
File: a1-demo-data.sql.gz
|
|
|
|
|
Company id: 604f23a8-b66e-4b21-8b45-0d72b68f4790
|
|
|
|
|
Legacy MySQL id: 97e1a309-3d23-4aa2-b518-8e8d7afdfec7
|
|
|
|
|
|
|
|
|
|
Source of truth for a clean local DB (2026-08-08 reseed):
|
|
|
|
|
MySQL dump → C:\Users\Green Eclipse\Downloads\descrybe_new (1).sql
|
|
|
|
|
Loaded into Laragon MySQL DB `descrybe_new`, then A1-only migrator
|
|
|
|
|
(`-company 97e1a309-3d23-4aa2-b518-8e8d7afdfec7`) + seed-demo + user cleanup.
|
|
|
|
|
See docs/migrate-from-descrybe-new.md and docs/demo-user.md.
|
|
|
|
|
|
|
|
|
|
Expected A1 snapshot (dump-faithful, no local QA/Iso pollution):
|
|
|
|
|
companies=1 (A1 Slovenija only, plus internal __platform_settings__)
|
|
|
|
|
users=3 (demo@descrybe.local, demo@descrybe.test, a1-primary@descrybe.local)
|
|
|
|
|
memberships=3
|
|
|
|
|
categories=119 (108 with AI prompts via overlay)
|
|
|
|
|
attributes=303
|
|
|
|
|
category_attributes=307
|
|
|
|
|
input_feeds=12 / feed_mappings=11 / export_feeds=2
|
|
|
|
|
raw_products=~25355 / processed_products=0 (demo seed clears processed)
|
|
|
|
|
processing_jobs=0 / processing_job_products=0
|
|
|
|
|
plan=A1 wallet total=2500 used=163 remaining=2337
|
|
|
|
|
mapped coverage (typical): description ~98%, feed attrs ~99%, category ~17% (4330 dump-assigned)
|
|
|
|
|
|
|
|
|
|
Category assignment (dump -> PG):
|
|
|
|
|
MySQL processed_products.category holds category unique_id (e.g. 46, 120).
|
|
|
|
|
Feed XML / feed_mappings do NOT include a category field - assignment was
|
|
|
|
|
historical processing output. Archive restores raw mapped_data (description,
|
|
|
|
|
specs/attrs, category when present). seed-a1 then refreshes
|
|
|
|
|
mapped_data.category from a MySQL dump when available.
|
|
|
|
|
|
|
|
|
|
Dump path (first match wins):
|
2026-08-16 18:36:56 +02:00
|
|
|
1. -mysql-dump flag / admin body mysql_dump
|
|
|
|
|
2. SEED_A1_MYSQL_DUMP (API process env on Git-Syncer)
|
|
|
|
|
3. Auto-detect: scripts/seed/descrybe_new.sql (deploy root),
|
|
|
|
|
~/Downloads/descrybe_new (1).sql or descrybe_new.sql
|
2026-08-09 22:47:43 +02:00
|
|
|
|
2026-08-16 18:36:56 +02:00
|
|
|
Git-Syncer / production: copy the dump onto the API host, e.g.
|
|
|
|
|
<deploy-root>/scripts/seed/descrybe_new.sql
|
|
|
|
|
or set SEED_A1_MYSQL_DUMP=/absolute/path/descrybe_new.sql in the API env.
|
|
|
|
|
Then use Admin → Companies → Sync A1 (no CLI DATABASE_URL needed).
|
|
|
|
|
|
|
|
|
|
One-off without wipe (CLI; loads monorepo-root .env when unset):
|
2026-08-09 22:47:43 +02:00
|
|
|
go run ./cmd/seed-a1 -mode backfill-categories
|
|
|
|
|
|
2026-08-16 18:36:56 +02:00
|
|
|
Admin Sync A1 = dump category backfill (when dump present) + Fix hygiene
|
|
|
|
|
(prompts, weak hashes, bidirectional category backfill, attr sanitize).
|
|
|
|
|
It does NOT wipe/reimport the ~25k catalog.
|
2026-08-09 22:47:43 +02:00
|
|
|
|
|
|
|
|
Note: MySQL processed description/attributes are usually NULL; feed-origin
|
|
|
|
|
original description + specs live on raw_products.mapped_data in the archive.
|
|
|
|
|
A1 demo seed keeps processed=0 / jobs=0.
|
|
|
|
|
|
|
|
|
|
Who sees what:
|
|
|
|
|
demo@descrybe.local � platform admin + membership on Platform Demo only
|
|
|
|
|
(switch/impersonate to a1-primary to act on A1; do not use demo API key for A1)
|
|
|
|
|
a1-primary@descrybe.local � A1 member only (same A1 catalog; no other tenants)
|
|
|
|
|
|
2026-08-17 09:33:07 +02:00
|
|
|
Category prompts overlay (committed WP dump + JSON fallback):
|
|
|
|
|
wp_product_categories.sql — primary Sync A1 / repair source of truth
|
|
|
|
|
a1-category-prompts.json — JSON fallback when WP SQL is absent
|
2026-08-09 22:47:43 +02:00
|
|
|
Applied automatically after every `npm run seed:a1` reimport (match by normalized
|
2026-08-17 09:33:07 +02:00
|
|
|
category name; rewrites {""OPIS IZDELKA""} -> {{description}},
|
|
|
|
|
{""STARO IME IZDELKA""} -> {{name}}). Skip with -skip-category-prompts, or re-apply
|
2026-08-09 22:47:43 +02:00
|
|
|
without wipe:
|
|
|
|
|
|
|
|
|
|
go run ./cmd/seed-a1 -mode apply-category-prompts -file ../../scripts/seed/a1-demo-data.sql.gz
|
2026-08-17 09:33:07 +02:00
|
|
|
go run ./cmd/repair-category-prompts -apply
|
|
|
|
|
# uses scripts/seed/wp_product_categories.sql by default (SEED_A1_WP_CATEGORIES overrides)
|
2026-08-09 22:47:43 +02:00
|
|
|
|
|
|
|
|
Normal use (loads DATABASE_URL from repo-root .env if unset):
|
|
|
|
|
npm run seed:a1 # wipe A1-only rows, import archive, prompts + mapped category backfill
|
|
|
|
|
npm run reimport:a1 # alias of seed:a1
|
|
|
|
|
|
|
|
|
|
Requires migrations already applied. Does not wipe other companies.
|
|
|
|
|
Does not run export — it only imports scripts/seed/a1-demo-data.sql.gz.
|
|
|
|
|
|
|
|
|
|
A1 demo seed skips processed_products / processing_jobs (processed=0, jobs=0).
|
|
|
|
|
Use -mode recover-jobs only when restoring legacy job history from a MySQL dump.
|
|
|
|
|
feed_sync_jobs stay ephemeral and are not restored; raw_products.sync_job_id is
|
|
|
|
|
exported as NULL for that reason. Archive is Postgres COPY text inside gzip, not
|
|
|
|
|
MySQL dump SQL.
|
|
|
|
|
|
|
|
|
|
Full clean rebuild from MySQL dump (when archive is wrong / polluted):
|
|
|
|
|
1. mysql: DROP/CREATE descrybe_new; stream-import the Adminer dump
|
|
|
|
|
2. docker: DROP/CREATE postgres descrybe; goose up
|
|
|
|
|
3. migrator -company <A1 legacy id> -resume -ensure-demo -skip-post-import
|
|
|
|
|
4. migrator -domains jobs -resume
|
|
|
|
|
5. go run ./cmd/seed-demo
|
|
|
|
|
6. keep only demo + a1-primary memberships; delete orphan users / Iso test cos
|
|
|
|
|
7. go run ./cmd/seed-a1 -mode apply-category-prompts
|
|
|
|
|
8. npm run seed:a1:export # refresh a1-demo-data.sql.gz then commit
|
|
|
|
|
|
|
|
|
|
Export copies EVERY A1 processing_jobs / processing_job_products row (no LIMIT).
|
|
|
|
|
If the archive only has a couple of jobs, live Postgres was missing history —
|
|
|
|
|
recover from the MySQL dump first, then re-export:
|
|
|
|
|
|
|
|
|
|
set SEED_A1_MYSQL_DUMP=D:\path\descrybe_new.sql
|
|
|
|
|
go run ./cmd/seed-a1 -mode recover-jobs
|
|
|
|
|
npm run seed:a1:export
|
|
|
|
|
|
|
|
|
|
Maintainer only — regenerate the snapshot when live A1 data must be re-captured:
|
|
|
|
|
npm run seed:a1:export # snapshot live A1 → a1-demo-data.sql.gz (then commit)
|
|
|
|
|
Not part of the day-to-day reset workflow.
|
|
|
|
|
|
|
|
|
|
Support Knowledge articles (platform FAQ /admin/support/knowledge):
|
|
|
|
|
support-kb-articles.json � product/user corpus (Agent 6)
|
|
|
|
|
support-kb-articles-tech.json � technical/ops/admin corpus (Agent 7; tech-* slugs)
|
|
|
|
|
Markdown sources for tech bodies (optional edit then regenerate JSON):
|
|
|
|
|
apps/api/cmd/seed-support-kb/content/*.md
|
|
|
|
|
Seed (from apps/api, DATABASE_URL set):
|
|
|
|
|
go run ./cmd/seed-support-kb
|
|
|
|
|
go run ./cmd/seed-support-kb -file ../../scripts/seed/support-kb-articles-tech.json
|
|
|
|
|
Idempotent ON CONFLICT (slug). Do not reuse product slugs for tech articles.
|