BadWolf
S60BadWolf — core NestJS modulární monolit, business logika, API pro všechny klienty.
| Owner | badwolf (agent) |
| Status | running |
| Repo | studio60-cz/badwolf |
| Stack | NestJS + TypeORM + PostgreSQL + Redis/BullMQ |
| Catalog | catalog/services/s60badwolf.yaml |
URLs
| Env | URL | HC |
|---|---|---|
| dev | https://be.s60dev.cz | /health |
| hub | https://api.s60hub.cz | /health |
| prod | https://api.studio60.cz | /health (container s60-badwolf na prod-alfa; deploy.yml production: api.studio60.cz) |
⚠️
be.studio60.cz≠ tenhle badwolf. be.studio60.cz → merlin (37.205.13.114) = PŮVODNÍ/legacy backend, samostatný systém, NEsouvisí s novým S60BadWolf. Nový badwolf prod jede přes api.studio60.cz. be.studio60.cz DNS neměnit ([[feedback_dns_be_studio60]]), ale není to tahle služba.⚠️ Prod data (s60_badwolf_prod) k 2026-06 = experimentální pokus (~2 měsíce stará), DISPOSABLE. Při deployi nového badwolfu se NEchrání/nedress-rehearsuje kvůli těmto datům — budou nahrazena FRESH daty (jenkins-sync DES-003 z původního backendu). Data scale níže (6868 apps…) = ten starý pokus, ne autorita.
DB (port 5432 přímo, ne pgBouncer)
| Env | DB | User | Server |
|---|---|---|---|
| Hub | s60_badwolf_hub |
s60_badwolf_hub_user |
hub-alfa (pg-alfa) |
| Prod | s60_badwolf_prod |
s60_badwolf_prod_user |
prod-alfa (pg-alfa) |
| Dev | (cerebro pg-alfa) | — | cerebro |
⚠️ Port 5432 (ne 6432) kvůli SSL — pgBouncer nepodporuje SSL passthrough přímo.
Modules (16)
| Module | Účel |
|---|---|
applications |
CRUD přihlášek, status workflow |
auth |
Legacy password migration endpoint |
clients |
Klientský modul (B2B + B2C) |
course-dates |
Termíny kurzů |
courses |
Katalog kurzů |
health |
Health check endpoint |
locations |
Lokace konání |
media |
Upload / file management |
online-courses |
Online kurzy |
orders |
WooCommerce webhook receiver |
product-categories |
— |
products |
Produktový katalog + product_versions |
product-tags |
— |
sites |
Multi-site konfigurace |
wc-sync |
WooCommerce sync |
wc-webhook |
WC webhook idempotentní handler |
Key endpoints
GET/POST /applicationsGET /courses,GET /locationsGET /clients?search=GET /products/versionsPOST /orders/webhook(WooCommerce)GET /health
Auth
ApiKeyGuardnaPATCHendpointech- JWT validation lokálně přes
@s60/auth-sdkJwtAuthGuard (sdílenýJWT_SECRET+ Redis blacklist) @Public()dekorátor na veřejných endpointech (orders/webhook atd.)
Závislosti
- postgres-managed (pg-alfa, port 5432)
- redis (BullMQ pro async jobs)
- s60auth (JWT vydavatel, sdílený
JWT_SECRET)
Data scale (2026-02)
- 6,868 applications
- 20,870 clients
- 347 course_dates
Server lifecycle pravidla
- NIKDY nestartovat BE přímo (
npm run start:dev,docker restart,pkill -f nest) - VŽDY přes Main agenta —
send-message.sh main SERVER_START_REQUEST ... - Důvod: 2026-02-19 6h outage (53 PM2 restartů, EADDRINUSE) když
node dist/mainběžel mimo PM2
Secrets
/root/secrets/badwolf/.env.hub/root/secrets/badwolf/.env.prod
Související
auth/— JWT issuervenom/— frontend pro BadWolf APIrunbooks/restart-be.md(pokud existuje)runbooks/deploy-service.md(pokud existuje)