using HrynCo.NotificationService.DAL.Abstract.Repositories; using HrynCo.NotificationService.Services.Core; using HrynCo.NotificationService.Services.Logging; using static HrynCo.NotificationService.Services.Core.ServiceResultHelper; namespace HrynCo.NotificationService.Services.TemplateDefinitions; internal sealed class GetNotificationServiceHandler( IContextualSerilogLogger logger, INotificationServiceRepository services) : RequestHandler>(logger) { protected override async Task> DoOnHandle(GetNotificationServiceQuery request, CancellationToken cancellationToken) { if (request.ServiceId is null && string.IsNullOrWhiteSpace(request.Name)) return Failure("An exact service name is required.", ServiceErrorCode.InvalidRequest); var service = request.ServiceId is Guid id ? await services.GetAsync(id, cancellationToken) : await services.GetByNameAsync(request.Name!, cancellationToken); return service is null ? Failure("Service not found.", ServiceErrorCode.NotFound) : Success(NotificationServiceMapping.Map(service)); } }