feat: add RabbitMQ worker, contracts, usage UI in channels screen

- Add HrynCo.NotificationService.Contracts project with SendEmailMessage and NotificationResultMessage
- Add SendEmailConsumer (RabbitMQ worker) with reply-to pattern via CorrelationContext.ReplyTo
- Add SendEmailHandler owning SMTP send + usage increment as business logic
- Add GetChannelUsageSummaryHandler with single DB query via navigation property
- Merge usage stats inline into channels list (daily/monthly with progress bars)
- Refactor AdminChannelsController.Index to use GetChannelUsageSummaryQuery
- Add RabbitMQ service to docker-compose files
- Remove dead AdminChannelUsageController, ChannelUsageViewModel, ChannelUsageSummary

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Anatolii Grynchuk
2026-05-02 14:00:58 +03:00
parent 395f5573a1
commit b0996833bc
29 changed files with 569 additions and 78 deletions
+19 -1
View File
@@ -1,3 +1,5 @@
name: hrynco-notification-service
services:
migrator:
build:
@@ -30,8 +32,24 @@ services:
environment:
- DOTNET_ENVIRONMENT=Production
- App__ConnectionString=${CONNECTION_STRING}
- App__RabbitMq__Host=rabbitmq
- App__RabbitMq__User=${RABBITMQ_USER:-guest}
- App__RabbitMq__Password=${RABBITMQ_PASSWORD:-guest}
depends_on:
db:
condition: service_started
migrator:
condition: service_completed_successfully
condition: service_completed_successfully
rabbitmq:
condition: service_healthy
rabbitmq:
image: rabbitmq:4-management-alpine
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-guest}
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "ping"]
interval: 10s
timeout: 5s
retries: 5