RECORDGOD/README.md
type-two d75f27a691 feat: RecordGod founding — service scaffold + MariaDB→Postgres migration
- FastAPI twin of DealGod (async SQLAlchemy/asyncpg). wowplatter/v1: ping,
  inventory/lookup, inventory/intake (enriches from discogs_full by release_id).
- schema v2: unified inventory (vinyl+general), slim crate, sales/sale_items.
  Discogs catalog NOT copied — joined from discogs_full at read time.
- migrate.py: 34,543 shop rows moved (vs ~3.2M in the WowPlatter clone).
- Smoke test green; plan/readme carry the architecture + UI boundary.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 17:18:50 +10:00

52 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# RecordGod
**The records back-office engine — the best of WowPlatter, reborn on Postgres, outside WordPress.**
RecordGod ingests WowPlatter's *job* (inventory, import, enrichment, labels, copy, queries)
but not WowPlatter's *code*. It runs as its own service on the VPS, calls DealGod for market
value, and feeds WordPress the tidy data it likes for the storefront.
WowPlatter is the **ancestral founder** — still running the live shop floor, and the reference
spec RecordGod matches before it retires anything. Honour the founder: don't redesign what
already works, copy it.
## Start here
- **[RECORDGOD_PLAN.md](RECORDGOD_PLAN.md)** — the plan, the map, the keep/drop triage, build
order, and the open decisions. Read this first.
## The family (sibling repos on this machine)
| Repo | What it is | Talks to RecordGod via |
|---|---|---|
| `../dealgod` | The **market** brain — cross-store value, arbitrage. Its own product. | RecordGod *calls* it (`X-API-Key`) for value |
| `../PRICEGOD` | The seller **extension** (Discogs cockpit). Successor to pliceclogs. | Calls RecordGod's `wowplatter/v1` contract |
| `../wowplatter` | The founder — WP/WooCommerce plugin running the live store. | RecordGod publishes tidy data to it |
Briefs that define the contracts already live in `../PRICEGOD/DEALGOD_BRIEF.md` and
`../PRICEGOD/WOWPLATTER_BRIEF.md`. All three still hold; RecordGod is who fulfils the
WowPlatter side of them.
## Run it (dev)
```bash
python3 -m venv .venv && ./.venv/bin/pip install -r requirements.txt
RECORDGOD_TOKEN=dev-tok ./.venv/bin/uvicorn app.main:app --reload --port 8010
./.venv/bin/python test_smoke.py # self-check — no DB/infra needed
```
Postgres schema: `psql recordgod < schema.sql`.
Live now: `GET /wowplatter/v1/ping`, `GET /wowplatter/v1/inventory/lookup?release_id=`.
Routes 35 (price / labels / intake) are intentionally **404** — PRICEGOD reads that as
"pending" and degrades gracefully, so an undefined route is the correct "not built yet" signal.
## Layout
```
app/
main.py FastAPI app + /healthz
db.py async SQLAlchemy over asyncpg (twin of DealGod's db.py)
auth.py require_token — Bearer; the one place the auth scheme lives
wowplatter_v1.py the contract router (ping + lookup live)
schema.sql minimal inventory table, release_id-keyed, store_id seam
test_smoke.py infra-free self-check
```
_Status: founding — scaffold runs, smoke test green. 2026-06-19._