feat: add base entity abstractions and domain model to DAL.Abstract

- IEntity<TId>, Entity<TId>, Entity base classes in Entities/
- Template, TemplateVariable domain models in Templates/
- Provider, ProviderSettings, SmtpProviderSettings, ProviderUsage, ProviderType in Providers/
- ITemplateRepository, IProviderRepository, IProviderUsageRepository in Repositories/
- ProviderUsage tracks daily counts; monthly derived by summing daily records
- IEntity<TId> lives in DAL.Abstract (not DAL.EF) — boundary enforced from the start

Ref: IT-628

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
Anatolii Grynchuk
2026-05-01 19:28:34 +03:00
parent ed4a6578c3
commit 7cb691db14
14 changed files with 136 additions and 18 deletions
@@ -0,0 +1,12 @@
using HrynCo.NotificationService.DAL.Abstract.Providers;
namespace HrynCo.NotificationService.DAL.Abstract.Repositories;
public interface IProviderRepository
{
Task<IReadOnlyList<Provider>> GetByServiceAsync(string serviceName, CancellationToken ct = default);
Task<Provider?> GetByIdAsync(Guid id, CancellationToken ct = default);
Task AddAsync(Provider provider, CancellationToken ct = default);
Task UpdateAsync(Provider provider, CancellationToken ct = default);
Task DeleteAsync(Provider provider, CancellationToken ct = default);
}
@@ -0,0 +1,10 @@
using HrynCo.NotificationService.DAL.Abstract.Providers;
namespace HrynCo.NotificationService.DAL.Abstract.Repositories;
public interface IProviderUsageRepository
{
Task<int> GetDailyCountAsync(Guid providerId, DateOnly date, CancellationToken ct = default);
Task<int> GetMonthlyCountAsync(Guid providerId, int year, int month, CancellationToken ct = default);
Task IncrementAsync(Guid providerId, DateOnly date, CancellationToken ct = default);
}
@@ -0,0 +1,12 @@
using HrynCo.NotificationService.DAL.Abstract.Templates;
namespace HrynCo.NotificationService.DAL.Abstract.Repositories;
public interface ITemplateRepository
{
Task<IReadOnlyList<Template>> GetByServiceAsync(string serviceName, CancellationToken ct = default);
Task<Template?> GetAsync(string serviceName, string key, string languageCode, CancellationToken ct = default);
Task AddAsync(Template template, CancellationToken ct = default);
Task UpdateAsync(Template template, CancellationToken ct = default);
Task DeleteAsync(Template template, CancellationToken ct = default);
}