feat(push): add service-owned firebase channels and delivery

Add push contracts, provider delivery and channel diagnostics. Link email channels to services and document migration and validation.

Ref: IT-1074
This commit is contained in:
2026-10-24 12:31:35 +03:00
parent b30dba93e8
commit 1631786ce2
105 changed files with 3838 additions and 147 deletions
+26
View File
@@ -0,0 +1,26 @@
# Supported incoming message types
The Worker uses `SupportedMessageType` for its two incoming commands:
| AMQP MessageType (unchanged) | Public enum | Consumer queue |
| --- | --- | --- |
| `Notification.SendEmail.v1` | `SendEmailV1` | `notification.send-email` |
| `Notification.SendPush.v1` | `SendPushV1` | `notification.send-push` |
`SupportedMessageTypeParser` maps the transport string at the validation boundary.
Matching is exact and case-sensitive. Unknown versions, missing values, whitespace
variants, enum names and numeric strings return no enum value and are rejected.
Each consumer's delivery validator accepts only its own enum member; a supported
command sent to the other consumer is also rejected before delivery.
The public enum lives in `HrynCo.NotificationService.Contracts/Messages/SupportedMessageType.cs`,
in namespace `HrynCo.NotificationService.Contracts.Messages`, and is included in the existing
`HrynCo.NotificationService.Contracts` package. The Worker parser remains internal and all
consumers, validators and tests reference this single Contracts enum. It does not change RabbitMQ headers, serialized
payloads, queues, producers or the shared RabbitMQ library. Result messages are not
incoming delivery commands and are outside this enum's scope. Existing payload and
correlation validation remains unchanged.
The Push Channels change removes the draft Firebase project/access-token fields from
SendPushMessageData. The enum and AMQP header stay unchanged; see
[push channels](android-push.md) for producer compatibility and rollout order.