4 Commits

Author SHA1 Message Date
Anatolii Grynchuk b0996833bc 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>
2026-05-02 14:00:58 +03:00
Anatolii Grynchuk 73b506992c feat: add EF migrations and design-time factory
- Fix EmailEmailTemplateEntityConfiguration -> EmailTemplateEntityConfiguration
- Rename tables to match domain: templates->email_templates,
  providers->email_channels, provider_usage->email_channel_usage
- Add NotificationDbContextFactory for design-time migrations tooling
- Add InitialCreate migration: email_templates, email_channels, email_channel_usage

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 00:46:49 +03:00
Anatolii Grynchuk 6dcc911fc2 refactor: rename domain types and introduce TransactionBehavior pattern
- Rename Template -> EmailTemplate, Provider -> EmailChannel,
  ProviderSettings -> EmailChannelSettings, ProviderType -> EmailChannelType,
  ProviderUsage -> EmailChannelUsage throughout all layers
- Add Undefined = 0 to EmailChannelType enum for safe default handling
- Remove SaveChangesAsync from EfRepository methods — repositories now only stage changes
- Add SaveChangesAsync to IUnitOfWork and EfUnitOfWork
- Add TransactionBehavior MediatR pipeline: wraps every handler in a transaction,
  saves and commits on success, rolls back on exception
- Add MediatR package reference to Services project

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 00:16:47 +03:00
Anatolii Grynchuk 26b29d169e feat: add EF Core layer with entities, configurations and DbContext
- Directory.Packages.props and Directory.Build.props for central package management
- TemplateEntity, ProviderEntity, ProviderUsageEntity (internal to DAL.EF)
- TemplateEntityConfiguration: composite unique index (service_name, key, language_code), Variables as JSON column
- ProviderEntityConfiguration: settings stored as jsonb, index on (service_name, priority)
- ProviderUsageEntityConfiguration: composite unique index (provider_id, date)
- All entities map Id column explicitly as 'id' (snake_case)
- NotificationDbContext with ApplyConfigurationsFromAssembly

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-01 19:50:33 +03:00