Registrul Destinatarilor
Feature aditiv, activabil prin env (gnotify.recipients.enabled, implicit OFF / GNOTIFY_RECIPIENTS_ENABLED): în loc să trimită la o adresă, un sistem trimite doar IDNP/IDNO, iar gNotify deține contactele reale și rezolvă destinația.
Entitățile trăiesc în slice-uri JDL aditive (
registry.jdl,registry-groups.jdl), generate țintit cu@skipClient(backend-only). Resursele condiționate (Destinatar/CanalContact/PreferintaNotificare+NotifyByIdV1Resource+AdminNotifyByIdResource) poartă@ConditionalOnProperty("gnotify.recipients.enabled")— re-aplică adnotarea după oricejhipster jdl.
Un Destinatar (PF/IDNP sau PJ/IDNO) își înregistrează o dată metodele de contact (mai multe email-uri / telefoane / telegram / push) și preferințele. Un sistem trimite apoi doar identificatorul (sau un lot / grup), fără să cunoască adresele.
Rezolvare
Section titled “Rezolvare”flowchart LR ID[IDNP/IDNO] --> R[RecipientResolutionService] R --> C[CanalContact-uri] R --> P[PreferintaNotificare<br/>canalePreferate ordonate] P --> CH{canal disponibil?} CH -->|da| DISP[NotificationDispatchService<br/>1 Notificare, N Livrare] CH -->|fallback| DISPservice/registry/RecipientResolutionService (scris de mână): identificator → contacte → preferință → canal cu fallback ordonat (ex. canalePreferate="EMAIL,TELEGRAM" = întâi email, altfel telegram). Dispatch-ul reutilizează NotificationDispatchService (pipeline-ul Notificare/Livrare/RabbitMQ existent).
Grupuri
Section titled “Grupuri”Un Grup e deținut de un sistem (systemId) și are membri = CSV de identificatori. Trimiterea către un grup expandează membrii → identificatori → rezolvare normală. Entitate decuplată (fără FK către Destinatar).
Preferințe
Section titled “Preferințe”PreferintaNotificare: canalePreferate (CSV ordonat), systemId opțional (null = preferință globală; setat = override pentru un sistem anume), activ=false = opt-out.
Endpoint-uri
Section titled “Endpoint-uri”Mașină (mTLS /api/v1):
POST /api/v1/notify-by-id/{id}— trimite după IDNP/IDNO ({id}= trackingId).
Admin:
POST /api/admin/notify-by-id— consola de trimitere după ID/grup.POST/PUT/DELETE /api/admin/provision/*— provizionare destinatari + legare user (self-service).
Operator (sisteme cu login de operator):
GET /api/operator/context,GET|POST|PUT|DELETE /api/operator/groups,GET /api/operator/templates,POST /api/operator/notify-by-id.
Portal cetățean (self-service, JWT):
GET /api/registry/me— contul meu.GET|POST|PUT|DELETE /api/registry/me/contacts[/{id}]— contactele mele.GET|POST|PUT|DELETE /api/registry/me/preferences[/{id}]— preferințele mele.GET /api/registry/push-public-key,GET /api/registry/me/push-subscriptions,POST|DELETE /api/registry/me/push-subscription— Web Push.
CRUD backend (când feature-ul e activ): /api/destinatars, /api/canal-contacts, /api/preferinta-notificares, /api/grups, /api/push-subscriptions.
UI separat
Section titled “UI separat”Portalul cetățean este o aplicație Angular 20 separată în registry-ui/ (@gstack/gds-angular), livrată ca un container distinct saas_gnotify:registry-* (același proiect GitLab) → https://portalgnotify.gstack.esempla.systems. Pornit/activat doar la nevoie.