No description
Find a file
valentinbvro 80e9ede875 feat: Sprint 2-3 -- Notifications Engine
Motorul NU trimite o notificare per eveniment. Decide daca merita notificat,
cui, ce severitate, daca se agrega, ce canal si cand.

- notifications / notification_preferences / notification_processed_events.
  Ultimul da idempotency: aceeasi regula nu proceseaza acelasi eveniment de
  doua ori (unique rule_id + event_id).
- Reguli in COD, nu in DB cu condition_expression evaluat dinamic. Un
  evaluator de expresii e o suprafata de atac si un limbaj in plus, fara ca
  nimeni sa administreze inca reguli per tenant. Contractul ramane acelasi
  cand vor migra in DB.
- Destinatarii se rezolva server-side din memberships, niciodata din payload.
  Implicit nu notificam actorul despre propria actiune.
- Deduplicare pe cheia tenant+recipient+categorie+entitate+versiune regula.
- Agregare: 47 de taskuri intr-o ora devin o notificare cu aggregated_count,
  nu 47 de notificari. Testul verifica invariantul ca fereastra de agregare
  <= fereastra de dedup, altfel s-ar crea una noua inainte sa se agrege.
- Quiet hours cu fereastra care poate traversa miezul noptii. CRITICAL le
  depaseste DOAR daca politica userului permite, nu implicit.
- Inbox: filtre (unread/action_required/critical/intelligence/system),
  mark-read, acknowledge (opreste escaladarea), dismiss, snooze.
- Preferinte per user+tenant cu UPSERT (NULLS NOT DISTINCT pe category, ca
  randul implicit "toate categoriile" sa fie unic).
2026-07-29 14:36:29 +02:00
drizzle feat: Sprint 2-3 -- Notifications Engine 2026-07-29 14:36:29 +02:00
src feat: Sprint 2-3 -- Notifications Engine 2026-07-29 14:36:29 +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