Skip to content

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 /applications
  • GET /courses, GET /locations
  • GET /clients?search=
  • GET /products/versions
  • POST /orders/webhook (WooCommerce)
  • GET /health

Auth

  • ApiKeyGuard na PATCH endpointech
  • JWT validation lokálně přes @s60/auth-sdk JwtAuthGuard (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/main běžel mimo PM2

Secrets

  • /root/secrets/badwolf/.env.hub
  • /root/secrets/badwolf/.env.prod

Související