Updated namespace for `ResetEnvelopeTemplateCommand` and added default values for constructor parameters. Enhanced `EmailTemplateController` by making the `Update` method asynchronous, adding error handling, and incorporating a `try-catch` block for improved responsiveness and error management.
131 lines
5.0 KiB
C#
131 lines
5.0 KiB
C#
using AutoMapper;
|
|
using EnvelopeGenerator.Application.EmailTemplates;
|
|
using EnvelopeGenerator.Application.EmailTemplates.Commands.Update;
|
|
using EnvelopeGenerator.Application.EmailTemplates.Commands.Reset;
|
|
using EnvelopeGenerator.Application.EmailTemplates.Queries.Read;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using EnvelopeGenerator.Application.Contracts.Repositories;
|
|
using EnvelopeGenerator.Application.DTOs;
|
|
using MediatR;
|
|
using System.Threading.Tasks;
|
|
using DigitalData.UserManager.Application.Services;
|
|
|
|
namespace EnvelopeGenerator.GeneratorAPI.Controllers;
|
|
|
|
/// <summary>
|
|
/// Controller for managing email templates.
|
|
/// Steuerung zur Verwaltung von E-Mail-Vorlagen.
|
|
/// </summary>
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
[Authorize]
|
|
public class EmailTemplateController : ControllerBase
|
|
{
|
|
private readonly ILogger<EmailTemplateController> _logger;
|
|
|
|
private readonly IMapper _mapper;
|
|
|
|
private readonly IEmailTemplateRepository _repository;
|
|
|
|
private readonly IMediator _mediator;
|
|
|
|
/// <summary>
|
|
/// Initialisiert eine neue Instanz der <see cref="EmailTemplateController"/>-Klasse.
|
|
/// </summary>
|
|
/// <param name="mapper">
|
|
/// <param name="repository">
|
|
/// Die AutoMapper-Instanz, die zum Zuordnen von Objekten verwendet wird.
|
|
/// </param>
|
|
public EmailTemplateController(IMapper mapper, IEmailTemplateRepository repository, ILogger<EmailTemplateController> logger, IMediator mediator)
|
|
{
|
|
_mapper = mapper;
|
|
_repository = repository;
|
|
_logger = logger;
|
|
_mediator = mediator;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ruft E-Mail-Vorlagen basierend auf der angegebenen Abfrage ab.
|
|
/// Gibt alles zurück, wenn keine Id- oder Typ-Informationen eingegeben wurden.
|
|
/// </summary>
|
|
/// <param name="emailTemplate">Die Abfrageparameter zum Abrufen von E-Mail-Vorlagen.</param>
|
|
/// <returns>Gibt HTTP-Antwort zurück</returns>
|
|
/// <remarks>
|
|
/// Sample request:
|
|
/// GET /api/EmailTemplate?emailTemplateId=123
|
|
/// </remarks>
|
|
/// <response code="200">Wenn die E-Mail-Vorlagen erfolgreich abgerufen werden.</response>
|
|
/// <response code="400">Wenn die Abfrageparameter ungültig sind.</response>
|
|
/// <response code="401">Wenn der Benutzer nicht authentifiziert ist.</response>
|
|
/// <response code="404">Wenn die gesuchte Abfrage nicht gefunden wird.</response>
|
|
[HttpGet]
|
|
public async Task<IActionResult> Get([FromQuery] ReadEmailTemplateQuery? emailTemplate = null)
|
|
{
|
|
try
|
|
{
|
|
if (emailTemplate is null || (emailTemplate.Id is null && emailTemplate.Type is null))
|
|
{
|
|
var temps = await _repository.ReadAllAsync();
|
|
return Ok(_mapper.Map<IEnumerable<EmailTemplateDto>>(temps));
|
|
}
|
|
else
|
|
{
|
|
var temp = await _mediator.Send(emailTemplate);
|
|
return temp is null ? NotFound() : Ok(temp);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "{Message}", ex.Message);
|
|
return StatusCode(StatusCodes.Status500InternalServerError);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Updates an email template or resets it if no update command is provided.
|
|
/// Aktualisiert eine E-Mail-Vorlage oder setzt sie zurück, wenn kein Aktualisierungsbefehl angegeben ist.
|
|
/// </summary>
|
|
/// <param name="email">Die E-Mail-Vorlagenabfrage.</param>
|
|
/// <param name="update">Der Aktualisierungsbefehl für die E-Mail-Vorlage.
|
|
/// Wird auf Standardwert aktualisiert, wenn die Anfrage ohne http-Body gesendet wird.
|
|
/// </param>
|
|
/// <returns>Gibt HTTP-Antwort zurück</returns>
|
|
/// <remarks>
|
|
/// Sample request:
|
|
/// PUT /api/EmailTemplate
|
|
/// {
|
|
/// "emailTemplateId": 123,
|
|
/// "newContent": "Updated content"
|
|
/// }
|
|
/// </remarks>
|
|
/// <response code="200">Wenn die E-Mail-Vorlage erfolgreich aktualisiert oder zurückgesetzt wird.</response>
|
|
/// <response code="400">Wenn die Abfrage ohne einen String gesendet wird.</response>
|
|
/// <response code="401">Wenn der Benutzer nicht authentifiziert ist.</response>
|
|
/// <response code="404">Wenn die gesuchte Abfrage nicht gefunden wird.</response>
|
|
[HttpPut]
|
|
public async Task<IActionResult> Update([FromQuery] EmailTemplateQuery email, [FromBody] UpdateEmailTemplateCommand? update = null)
|
|
{
|
|
try
|
|
{
|
|
if (update is null)
|
|
{
|
|
var reset = _mapper.Map<ResetEnvelopeTemplateCommand>(email);
|
|
await _mediator.Send(new ResetEnvelopeTemplateCommand(email?.Id, email?.Type));
|
|
return Ok();
|
|
}
|
|
else
|
|
{
|
|
update.EmailTemplateQuery = email;
|
|
// Logic for updating the email template
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "An unexpected error occurred. {message}", ex.Message);
|
|
return new StatusCodeResult(StatusCodes.Status500InternalServerError);
|
|
}
|
|
}
|
|
}
|