Commit Graph

9 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 855d0862f9 fix: save button not submitting — form id + form= attribute on submit button; migrator connection string in dev compose
- _EditorLayout renders FormActions section outside <form> in the DOM
- Added id='templateForm' to form, form='templateForm' to submit button (HTML5 form association)
- Added migrator env override in docker-compose.Development.yml so connection string is not read from \

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 02:35:01 +03:00
Anatolii Grynchuk d36bfd2b97 fix: pin Seq to 2024 image, add no-auth flag, restore dedicated Seq service
- datalust/seq:latest (2025.x) requires mandatory auth — pin to :2024
- Add SEQ_FIRSTRUN_NOAUTHENTICATION=true to match ItemTracker pattern
- Seq UI on port 5342, api/worker point to internal http://seq
- Restore notification_seq volume

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 02:31:05 +03:00
Anatolii Grynchuk 7ee811ca8e fix: reuse host Seq instance in Development, remove local seq service
- Seq on 5341 conflicts with ItemTracker dev environment
- Dev compose now points to host.docker.internal:5341 (shared Seq)
- Removed seq service and notification_seq volume from dev compose

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 02:28:51 +03:00
Anatolii Grynchuk d23717d123 fix: move api port mapping to dev override, fix Web Dockerfile project name
- Base compose has no ports (env overrides define them)
- Dev override maps api to 5200:8080
- Web Dockerfile updated to reference .Web project name

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 02:27:51 +03:00
Anatolii Grynchuk a8bc26fe38 feat: add Migrator console project
- Dedicated HrynCo.NotificationService.Migrator console app
- Reads App:ConnectionString from config/env
- Calls db.Database.MigrateAsync() with clear log output
- Own Dockerfile (runtime:10.0 base, no SDK overhead)
- Replaces SDK volume-mount approach in docker-compose
- Added to solution with /docker/Migrator/ folder

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 02:24:45 +03:00
Anatolii Grynchuk 2e6dacc3a2 feat: add docker migrator service following ItemTracker pattern
- migrations service uses mcr.microsoft.com/dotnet/sdk:10.0
- mounts source, installs dotnet-ef, retries until DB is ready
- api and worker depend on migrator completing successfully
- removed startup migration from Program.cs

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 02:16:47 +03:00
Anatolii Grynchuk ab44ad117c refactor: rename Api project to Web
- HrynCo.NotificationService.Api -> HrynCo.NotificationService.Web
- HrynCo.NotificationService.Api.IntegrationTests -> HrynCo.NotificationService.Web.IntegrationTests
- Updated slnx, docker-compose, project references, and namespaces
- Project serves both REST API and admin UI

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 01:55:57 +03:00
Anatolii Grynchuk ae724e4aee chore: add docker compose files and solution folder
- docker/environments/docker-compose.yml: base Api + Worker service definitions
- docker/environments/docker-compose.Development.yml: local PostgreSQL + Seq + port mappings
- Solution folder /docker/ in .slnx for IDE access

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-02 01:31:40 +03:00