Sari la conținut

Stack tehnologic

Tabel de referință pentru stack-ul ASYDATA. Sursa autoritativă a deciziilor actuale este asydata-app-backend-dotnet/CLAUDE.md (cu detalii în docs/DECISIONS.md); docs/ARCHITECTURE.md conține propunerea inițială, din care unele elemente au fost ulterior respinse — marcate mai jos.

AriaTehnologieNote
Runtime.NET 10 LTS, C# 14suport până nov. 2028
Web frameworkASP.NET Core Minimal APIOpenAPI 3.1 nativ + Scalar UI la /scalar/v1
ArhitecturăClean Architecture (Domain ← Application ← Platform ← Infrastructure ← WebApi)service pattern, Result<T> — vezi Clean Architecture
ModularitateModule Odoo-style (IAsyModule, src/Modules/Asy.Modules.*)assembly scan la startup
ORMEF Core 10 + Npgsql, AddPooledDbContextFactory<T>DbContext pooling
Bază de datePostgreSQLpooled multi-tenant, RLS pe firm_id — vezi Multi-tenancy
MesagerieConfluent.Kafka direct + outbox propriutopic firm.events — vezi Event-driven
SearchElasticsearch 9 + Elastic.Clients.Elasticsearchfull-text, multilingv (planificat)
Storage fișiereMinIO (self-host, S3-compatible)PDF-uri, atașamente (planificat)
RealtimeSignalRcând va fi nevoie
AuthASP.NET Core Identity nativ + Google OAuthvezi Autentificare
ObservabilitySerilog + OpenTelemetry + Sentrylogging structurat, tracing, error tracking
TestingxUnit + Testcontainers / WebApplicationFactoryteste pe servicii reale
Orchestrare devDocker Compose (Postgres + Kafka + ES + MinIO + UIs)infra/docker-compose.yml
Orchestrare prodKubernetes self-host (kubeadm + Rancher + Harbor + NFS)Helm charts
Reverse proxyCaddyservește SPA + rutează /api/*
AriaTehnologie
FrameworkReact 19
BuildVite
Routing / dataTanStack Router + Query
StylingTailwind
Deploymentbuild static → wwwroot/, servit de Caddy (single-deployment, same-origin)

Sursa: CLAUDE.md / docs/DECISIONS.md. NU se sugerează alternative la stack — aceste opțiuni au fost respinse deliberat:

RespinsMotiv
Wolverinepreferință pentru control total, fără framework de messaging (outbox + Kafka direct)
MediatRcomercial din 2025; oricum fără CQRS — service pattern clasic
MassTransitcomercial din 2026
CQRS / dispatcherservice pattern clasic e suficient pentru nevoile actuale
Keycloaktotul în ASP.NET Core Identity nativ (PII sub jurisdicția noastră)
Supabaseindependență de vendor — Postgres self-managed
.NET AspireDocker Compose e suficient și transparent
Schema-per-tenant / DB-per-tenantoperare scumpă; izolarea RLS pooled e suficientă
Dapper ca ORM primarEF Core (migrations native, DbContextFactory)
Cod customer la runtime (eval / DLL-uri dinamice)toate modulele sunt în binar
UNIQUE pe IDNOIDNO nu e unic și nu e validat — admin verifică manual

Neconfirmate încă (docs/DECISIONS.md, docs/AUTH.md):

  • Token flow peste Identity: BearerToken nativ vs OpenIddict vs cookie pur (BFF). Inclusiv întrebarea „JWT cu client certificate” (mTLS / RFC 8705 / RS256-with-cert) — de clarificat.
  • Cluster K8s prod: DOKS / AKS / Hetzner managed K3s / self-hosted bare?
  • Postgres pe NFS vs local PV + CloudNativePG?
  • Sidecar deploy: 1 pod per tenant vs shared core + sidecars per-tenant?
  • Volum estimat: câți tenants în 12 luni? (dimensionare cluster + sharding viitor)