Skip to content

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ă orice jhipster 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.

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| DISP

service/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).

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).

PreferintaNotificare: canalePreferate (CSV ordonat), systemId opțional (null = preferință globală; setat = override pentru un sistem anume), activ=false = opt-out.

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.

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.