No description
Find a file
valentinbvro eb652446f6 feat: Sprint 1 -- Projection Kernel (read models pentru dashboard)
Repara criteriul de acceptare "dashboardurile citesc read models, nu
interogheaza haotic toate modulele".

- projection_processed_events (unique: name+version+event_id) = garantia de
  idempotency. Checkpointul e doar optimizare de scanare, nu corectitudine:
  rescanam cu un safety lag de 60s si sarim ce s-a aplicat deja, ca sa nu
  pierdem evenimente comise dupa unul cu created_at mai mare.
- ProjectionRegistry cu ProjectionDefinition (name, version, subscribedEvents,
  rebuildStrategy, apply, rebuildTenant).
- executive_dashboard foloseste rebuildStrategy 'canonical-tables':
  recalculeaza contorii din tabelele canonice, nu incrementeaza. Contorii
  incrementali pot deriva daca un eveniment se pierde sau se dubleaza;
  recalcularea e corecta prin constructie si idempotenta natural. Costul e o
  interogare per eveniment relevant -- ok la volumul actual.
- GET /v1/dashboard/executive citeste proiectia. Cand proiectia inca n-a rulat
  pentru workspace, intoarce status 'building' explicit, NU zerouri care ar
  parea date reale.
- POST /v1/dashboard/executive/rebuild -- owner/admin, auditat.
- Serviciile de taskuri/organizatii/segmente emit acum evenimente in outbox
  (in aceeasi tranzactie cu scrierea). Fara ele proiectia era cod mort.
- Campurile din spec care depind de module neconstruite (documents,
  transactions, approvals) raman 0 explicit, nu inventate.
2026-07-29 12:03:34 +02:00
drizzle feat: Sprint 1 -- Projection Kernel (read models pentru dashboard) 2026-07-29 12:03:34 +02:00
src feat: Sprint 1 -- Projection Kernel (read models pentru dashboard) 2026-07-29 12:03:34 +02:00
.dockerignore fix: correct ceo-api Dockerfile port and dependency install 2026-07-21 02:50:53 +02:00
.env.example security: enforce TenantGuard and ThrottlerGuard globally, lock down CORS 2026-07-21 19:48:17 +02:00
.gitignore feat: scaffold NestJS API skeleton with health check 2026-07-20 22:26:33 +02:00
Dockerfile fix: force devDependencies install in ceo-api Docker build stage 2026-07-21 12:03:42 +02:00
drizzle.config.ts feat: add Drizzle ORM, Supabase admin client, Swagger, Helmet, Pino logging, rate limiting 2026-07-20 22:41:09 +02:00
jest.config.js feat: multi-tenant core -- session auth, RBAC, organizations, tasks, audit 2026-07-28 21:15:43 +02:00
nest-cli.json feat: add agent niche registry (SKILL.md-style) grouping AI tools by domain 2026-07-24 00:00:42 +02:00
package-lock.json feat: multi-tenant core -- session auth, RBAC, organizations, tasks, audit 2026-07-28 21:15:43 +02:00
package.json feat: multi-tenant core -- session auth, RBAC, organizations, tasks, audit 2026-07-28 21:15:43 +02:00
README.md feat: add Drizzle ORM, Supabase admin client, Swagger, Helmet, Pino logging, rate limiting 2026-07-20 22:41:09 +02:00
tsconfig.json fix: scope tsconfig to src/ so nest build emits dist/main.js 2026-07-21 12:07:06 +02:00

ceo-api

NestJS API pentru CEO-OS. Se conecteaza la Supabase (Postgres/Auth) si Redis, deployat prin Coolify pe proiectul CEO-OS.

Dezvoltare

npm install
cp .env.example .env
npm run start:dev

GET /health returneaza statusul serviciului. GET /docs expune Swagger UI.

Stack

NestJS, Drizzle ORM (src/db), Supabase Admin SDK (src/supabase), BullMQ/Redis, class-validator/Zod, Helmet, rate limiting (Throttler), logging Pino.

Migratii

npm run db:generate
npm run db:migrate