- Add null check and fetch entity before updating fields.
- Replace the direct property assignment with detailed updates.
- Ensure changes are saved using SaveChangesAsync.
- Switch `.template-preview-variables` to grid layout for better responsiveness.
- Adjust form label font size and spacing for consistency.
- Enhance styles of `.form-control-sm` for improved usability.
- Consolidate unit of work implementation with NotificationUnitOfWork.
- Refactor repositories to use NotificationBaseRepository for consistency.
- Simplify request handlers by removing IUnitOfWork dependency.
- Update related tests and service registration.
- Introduce preview panel to edit form for rendering subject, HTML, and text with sample values.
- Add support for real-time updates using JavaScript.
- Include supporting styles for preview panel in admin CSS.
- Add optional `Scripts` section rendering to `_EditorLayout`.
- Create `.env.Development` for better development environment configuration.
- Worker logs tagged as 'hrynco-notification-service-worker'
- Web logs tagged as 'hrynco-notification-service-web'
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Add TestSmtpCommand and TestSmtpHandler for ad-hoc smtp testing without saving
- Add POST /admin/channels/test-smtp endpoint accepting raw smtp settings
- Show Test button on both Create and Edit forms
- Test reads current form values so channel can be tested before saving
- Aligns compose service name with the image name (hrynco.notification-service.web)
- Rename API_PORT env var to WEB_PORT for consistency
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- EF model had a pending HasOne/WithMany relationship not in migrations
- Adds FK_email_channel_usage_email_channels_provider_id with cascade delete
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- migrator, api, worker were missing 'networks: - internal'
- db and rabbitmq are only on internal network, so services couldn't reach them
- also changed api depends_on db condition to service_healthy
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Base compose: explicit internal network, named volumes with VOLUME_PREFIX
- docker-compose.prod.yml: production images, ports, restart policies, hrynco-services external network on rabbitmq
- docker-compose.Development.yml: cleaned up orphan volumes, named dev volumes
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- 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>
MailKit/MimeKit are unnecessary third-party dependencies with known
vulnerabilities. .NET's built-in System.Net.Mail.SmtpClient handles
the same test send without any additional packages.
Ref: IT-628
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>