Drop one-shot tmp/axe scripts and agent i18n scratch so the Gitea tree is deployable.
129 lines
5.3 KiB
Markdown
129 lines
5.3 KiB
Markdown
# Process & sell — end-to-end summary (Descrybe v2)
|
|
|
|
Last updated: 2026-08-04
|
|
Repo: `f:/laragon/www/_MY/descrybe-v2`
|
|
|
|
Short guide for verifying the parallel feature work: standard fields, feed auto-map, sync+process (including EPREL/specs), export, and the public API + docs.
|
|
|
|
## Prerequisites
|
|
|
|
```powershell
|
|
cd f:/laragon/www/_MY/descrybe-v2
|
|
docker compose up -d # Postgres on host :5433 (healthy)
|
|
|
|
$env:DATABASE_URL = "postgres://descrybe:descrybe@localhost:5433/descrybe?sslmode=disable"
|
|
# Goose migrations through 009 (008 standard fields config, 009 processing step progress; 007 already applied)
|
|
cd apps/api
|
|
go run github.com/pressly/goose/v3/cmd/goose@v3.24.3 -dir sql/schema postgres $env:DATABASE_URL up
|
|
|
|
# API + worker (separate terminals)
|
|
go run ./cmd/api
|
|
go run ./cmd/worker
|
|
|
|
# Web
|
|
cd ../web
|
|
npm install
|
|
npm run dev
|
|
```
|
|
|
|
- Web: http://localhost:5174
|
|
- API: http://localhost:8080
|
|
- API docs (RapiDoc): http://localhost:5174/docs
|
|
- OpenAPI YAML: http://localhost:8080/api/v1/openapi.yaml
|
|
|
|
## Demo credentials
|
|
|
|
From [demo-user.md](demo-user.md):
|
|
|
|
| Field | Value |
|
|
|-------|--------|
|
|
| Email | `demo@descrybe.test` |
|
|
| Password | `DemoPass123!` |
|
|
| Role | Platform admin; **Platform Demo** only (not A1) |
|
|
| Default company | **Platform Demo** (sandbox; see [safe-test-fixtures.md](safe-test-fixtures.md)) |
|
|
| Demo API key | `dk_demo_local_descrybe_test_key_v1` → Platform Demo only |
|
|
|
|
Re-seed anytime:
|
|
|
|
```powershell
|
|
cd apps/api
|
|
$env:DATABASE_URL = "postgres://descrybe:descrybe@localhost:5433/descrybe?sslmode=disable"
|
|
go run ./cmd/seed-demo -postgres $env:DATABASE_URL
|
|
```
|
|
|
|
`seed-demo` assigns the **Platform Demo** plan (~1M AI credits). Do **not** top up or rename **A1 Slovenija**. Resolve Platform Demo `company_id` from SQL/`/api/auth/me` before any wallet UPDATE.
|
|
|
|
## How to test (happy path)
|
|
|
|
1. **Login** at http://localhost:5174/login with the demo credentials → land on `/dashboard` (company **Platform Demo**).
|
|
2. **Standard fields** → open `/standard-fields`, enable the **recommended** standard fields (company config from migration `008`).
|
|
3. **Open a feed** → `/feeds`, pick an input feed with URL data → `/feeds/{feedId}` (and `/feeds/{feedId}/mapping`).
|
|
4. **Auto-map** → run auto-map on the feed mapping so source columns/paths bind to product + standard fields.
|
|
5. **Sync + process a sample** → sync the feed (URL CSV/XML → `raw_products`), then start a small processing job (dashboard Background Tasks `/processing`, or select raw products and process). Keep the **worker** running.
|
|
6. **See EPREL / specs** → open a processed product; when `EPREL_ENABLED=true` and an EPREL id is present, attributes include `eprel_*` / nested `eprel`; specs come from the `parse_specs` / `fill_fields` steps. See [eprel.md](eprel.md).
|
|
7. **Export** → `/export-feeds`, generate or open the public XML/CSV stream for a template that maps `eprel_*` / attribute sources.
|
|
8. **Public API + docs** → browse http://localhost:5174/docs (RapiDoc) and smoke:
|
|
|
|
```bash
|
|
curl -s -H "Authorization: Bearer dk_demo_local_descrybe_test_key_v1" \
|
|
"http://localhost:8080/api/v1/products?limit=1"
|
|
```
|
|
|
|
Processing via public API (same pipeline as the dashboard):
|
|
|
|
- `POST /api/v1/process`
|
|
- `GET /api/v1/process/{id}`
|
|
|
|
## Env flags
|
|
|
|
Set on the **API** and especially the **worker** (enrichment runs in `ProcessJob`):
|
|
|
|
| Variable | Default | Purpose |
|
|
|----------|---------|---------|
|
|
| `EPREL_ENABLED` | `false` | Turn on EPREL enrichment step |
|
|
| `EPREL_TIMEOUT` | `10s` | HTTP client timeout |
|
|
| `EPREL_BASE_URL` | `https://eprel.ec.europa.eu/api` | Override for tests/proxies |
|
|
| `EPREL_FICHE_LANGUAGE` | `EN` | Product fiche language |
|
|
| `EPREL_API_KEY` | _(empty)_ | Optional `X-API-KEY` — never log |
|
|
| `OPENAI_API_KEY` | _(empty)_ | Enables OpenAI enhance; without it, heuristic fallback still runs |
|
|
| `OPENAI_MODEL` | `gpt-4o-mini` | Chat model |
|
|
| `OPENAI_BASE_URL` | `https://api.openai.com/v1` | Override for proxies |
|
|
|
|
Example worker env:
|
|
|
|
```powershell
|
|
$env:DATABASE_URL = "postgres://descrybe:descrybe@localhost:5433/descrybe?sslmode=disable"
|
|
$env:EPREL_ENABLED = "true"
|
|
$env:OPENAI_API_KEY = "sk-..." # optional
|
|
go run ./cmd/worker
|
|
```
|
|
|
|
## What was deferred
|
|
|
|
Not in scope for this reconcile / parallel feature pass (see [status-and-gaps.md](status-and-gaps.md)):
|
|
|
|
- **Stripe** checkout / subscriptions (manual credits + plans only)
|
|
- **River** job client (DB claim + NOTIFY remains)
|
|
- Feed **FTP / Excel / uploaded-file** ingest; export **schedule / object storage**
|
|
- Rich WooCommerce mapping UI + live store E2E
|
|
- Production cutover blockers: Clerk email patch, membership role promotion, SMTP set-password smoke
|
|
- Org export/import, WebSocket live updates, GitHub Actions CI
|
|
- Structured-descriptions / vector-categories **backend** APIs (UI shells exist)
|
|
- Pinecone index tuning (optional; needs config)
|
|
|
|
## Related docs
|
|
|
|
- [demo-user.md](demo-user.md) — credentials, API key, company counts
|
|
- [eprel.md](eprel.md) — EPREL step, export aliases, tests
|
|
- [status-and-gaps.md](status-and-gaps.md) — full gap list
|
|
- [go-live-checklist.md](go-live-checklist.md) — cutover gates
|
|
- Root [README.md](../README.md) — quick start
|
|
|
|
## Build smoke (reconcile)
|
|
|
|
```powershell
|
|
cd apps/api; go build ./...
|
|
cd ../web; npm run check
|
|
```
|
|
|
|
Expected: Go packages compile; `svelte-check` reports 0 errors / 0 warnings. |