Added XML documentation to extension and handler classes for improved maintainability. Refactored repository access to use .Query instead of .ReadOnly() for consistency. Updated async extension methods for better readability and error handling.
74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
using AutoMapper;
|
|
using DigitalData.Core.Abstraction.Application.Repository;
|
|
using DigitalData.Core.Exceptions;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using MediatR;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Application.Common.Dto;
|
|
|
|
namespace EnvelopeGenerator.Application.EmailTemplates.Commands.Update;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
public class UpdateEmailTemplateCommandHandler : IRequestHandler<UpdateEmailTemplateCommand>
|
|
{
|
|
private readonly IRepository<EmailTemplate> _repository;
|
|
|
|
private readonly IMapper _mapper;
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="repository"></param>
|
|
/// <param name="mapper"></param>
|
|
public UpdateEmailTemplateCommandHandler(IRepository<EmailTemplate> repository, IMapper mapper)
|
|
{
|
|
_repository = repository;
|
|
_mapper = mapper;
|
|
}
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="request"></param>
|
|
/// <param name="cancel"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="InvalidOperationException"></exception>
|
|
/// <exception cref="NotFoundException"></exception>
|
|
[Obsolete("Use Read-method returning IReadQuery<TEntity> instead.")]
|
|
public async Task Handle(UpdateEmailTemplateCommand request, CancellationToken cancel)
|
|
{
|
|
EmailTemplateDto? tempDto;
|
|
|
|
if (request.EmailTemplateQuery?.Id is int id)
|
|
{
|
|
var temp = await _repository.ReadOnly().Where(t => t.Id == id).FirstOrDefaultAsync(cancel);
|
|
tempDto = _mapper.Map<EmailTemplateDto>(temp);
|
|
}
|
|
else if (request!.EmailTemplateQuery!.Type is EmailTemplateType type)
|
|
{
|
|
var temp = await _repository.ReadOnly().Where(t => t.Name == type.ToString()).FirstOrDefaultAsync(cancel);
|
|
tempDto = _mapper.Map<EmailTemplateDto>(temp);
|
|
}
|
|
else
|
|
{
|
|
throw new InvalidOperationException("Both id and type is null. Id: " + request.EmailTemplateQuery.Id +". Type: " + request.EmailTemplateQuery.Type.ToString());
|
|
}
|
|
|
|
if (tempDto == null)
|
|
{
|
|
throw new NotFoundException();
|
|
}
|
|
|
|
if (request.Body is not null)
|
|
tempDto.Body = request.Body;
|
|
|
|
if (request.Subject is not null)
|
|
tempDto.Subject = request.Subject;
|
|
|
|
await _repository.UpdateAsync(tempDto, t => t.Id == tempDto.Id, cancel);
|
|
}
|
|
}
|