Refactor email template DTOs and response handling

Replaced ReadEmailTemplateResponse with EmailTemplateDto as the standard DTO for email templates. Updated ReadEmailTemplateQuery and its handler to use EmailTemplateDto. Removed the obsolete MappingProfile and cleaned up EmailTemplateDto with improved documentation. Simplified UpdateEmailTemplateCommandHandler by removing conditional updates for Body and Subject. These changes streamline DTO usage and reduce redundancy in email template handling.
This commit is contained in:
2026-02-06 15:01:04 +01:00
parent 6611b92fdb
commit 632723de5a
5 changed files with 32 additions and 104 deletions

View File

@@ -1,12 +1,10 @@
using Microsoft.AspNetCore.Mvc; namespace EnvelopeGenerator.Application.Common.Dto;
namespace EnvelopeGenerator.Application.Common.Dto /// <summary>
///
/// </summary>
public record EmailTemplateDto
{ {
/// <summary>
///
/// </summary>
public record EmailTemplateDto
{
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
@@ -36,5 +34,4 @@ namespace EnvelopeGenerator.Application.Common.Dto
/// Das Datum und die Uhrzeit, wann die Vorlage zuletzt geändert wurde. Kann null sein. /// Das Datum und die Uhrzeit, wann die Vorlage zuletzt geändert wurde. Kann null sein.
/// </summary> /// </summary>
public DateTime? ChangedWhen { get; init; } public DateTime? ChangedWhen { get; init; }
}; };
}

View File

@@ -62,12 +62,6 @@ public class UpdateEmailTemplateCommandHandler : IRequestHandler<UpdateEmailTemp
throw new NotFoundException(); 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); await _repository.UpdateAsync(tempDto, t => t.Id == tempDto.Id, cancel);
} }
} }

View File

@@ -1,24 +0,0 @@
using AutoMapper;
using EnvelopeGenerator.Application.EmailTemplates.Queries.Read;
using EnvelopeGenerator.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EnvelopeGenerator.Application.EmailTemplates;
/// <summary>
///
/// </summary>
public class MappingProfile : Profile
{
/// <summary>
///
/// </summary>
public MappingProfile()
{
CreateMap<EmailTemplate, ReadEmailTemplateResponse>();
}
}

View File

@@ -2,22 +2,22 @@
using MediatR; using MediatR;
using EnvelopeGenerator.Application.Common.Interfaces.Repositories; using EnvelopeGenerator.Application.Common.Interfaces.Repositories;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using EnvelopeGenerator.Application.Common.Dto;
namespace EnvelopeGenerator.Application.EmailTemplates.Queries.Read; namespace EnvelopeGenerator.Application.EmailTemplates.Queries.Read;
/// <summary> /// <summary>
/// Stellt eine Abfrage dar, um eine E-Mail-Vorlage zu lesen. /// Stellt eine Abfrage dar, um eine E-Mail-Vorlage zu lesen.
/// Diese Klasse erbt von <see cref="EmailTemplateQuery"/>. /// Diese Klasse erbt von <see cref="EmailTemplateQuery"/>.
/// </summary> /// </summary>
public record ReadEmailTemplateQuery : EmailTemplateQuery, IRequest<ReadEmailTemplateResponse?> public record ReadEmailTemplateQuery : EmailTemplateQuery, IRequest<EmailTemplateDto?>
{ {
} }
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQuery, ReadEmailTemplateResponse?> public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQuery, EmailTemplateDto?>
{ {
private readonly IMapper _mapper; private readonly IMapper _mapper;
@@ -46,7 +46,7 @@ public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQu
/// <returns></returns> /// <returns></returns>
/// <exception cref="InvalidOperationException"></exception> /// <exception cref="InvalidOperationException"></exception>
[Obsolete("Use IRepository")] [Obsolete("Use IRepository")]
public async Task<ReadEmailTemplateResponse?> Handle(ReadEmailTemplateQuery request, CancellationToken cancellationToken) public async Task<EmailTemplateDto?> Handle(ReadEmailTemplateQuery request, CancellationToken cancellationToken)
{ {
var temp = request.Id is int id var temp = request.Id is int id
? await _repository.ReadByIdAsync(id) ? await _repository.ReadByIdAsync(id)
@@ -54,8 +54,6 @@ public class ReadEmailTemplateQueryHandler : IRequestHandler<ReadEmailTemplateQu
? await _repository.ReadByNameAsync(type) ? await _repository.ReadByNameAsync(type)
: throw new InvalidOperationException("Either a valid integer ID or a valid EmailTemplateType must be provided in the request."); : throw new InvalidOperationException("Either a valid integer ID or a valid EmailTemplateType must be provided in the request.");
var res = _mapper.Map<ReadEmailTemplateResponse>(temp); return _mapper.Map<EmailTemplateDto>(temp);
return res;
} }
} }

View File

@@ -1,37 +0,0 @@
namespace EnvelopeGenerator.Application.EmailTemplates.Queries.Read;
/// <summary>
/// Stellt die Antwort für eine Abfrage von E-Mail-Vorlagen bereit.
/// </summary>
public class ReadEmailTemplateResponse
{
/// <summary>
/// Die eindeutige Kennung der E-Mail-Vorlage.
/// </summary>
public int Id { get; set; }
/// <summary>
/// Name des Typs
/// </summary>
public required string Name { get; set; }
/// <summary>
/// Das Datum und die Uhrzeit, wann die Vorlage hinzugefügt wurde.
/// </summary>
public DateTime AddedWhen { get; set; }
/// <summary>
/// Der Inhalt (Body) der E-Mail-Vorlage. Kann null sein.
/// </summary>
public string? Body { get; set; }
/// <summary>
/// Der Betreff der E-Mail-Vorlage. Kann null sein.
/// </summary>
public string? Subject { get; set; }
/// <summary>
/// Das Datum und die Uhrzeit, wann die Vorlage zuletzt geändert wurde. Kann null sein.
/// </summary>
public DateTime? ChangedWhen { get; set; }
}