Replaced EmailTemplateQueryBase record with IEmailTemplateQuery interface for email template queries. Updated all relevant commands, queries, and controller methods to use the new interface. Removed EmailTemplateQueryBase and migrated properties to implementing classes. Improved documentation to clarify query structure and Type property usage.
103 lines
4.2 KiB
C#
103 lines
4.2 KiB
C#
using AutoMapper;
|
|
using EnvelopeGenerator.Application.EmailTemplates;
|
|
using EnvelopeGenerator.Application.EmailTemplates.Commands.Reset;
|
|
using EnvelopeGenerator.Application.EmailTemplates.Queries.Read;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using MediatR;
|
|
using System.Threading.Tasks;
|
|
using EnvelopeGenerator.Application.Common.Dto;
|
|
using DigitalData.Core.Abstraction.Application.Repository;
|
|
using EnvelopeGenerator.Domain.Entities;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using EnvelopeGenerator.Domain.Constants;
|
|
using EnvelopeGenerator.Application.EmailTemplates.Commands;
|
|
|
|
namespace EnvelopeGenerator.API.Controllers;
|
|
|
|
/// <summary>
|
|
/// Controller for managing temp templates.
|
|
/// Steuerung zur Verwaltung von E-Mail-Vorlagen.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Initialisiert eine neue Instanz der <see cref="EmailTemplateController"/>-Klasse.
|
|
/// </remarks>
|
|
/// <param name="mapper">
|
|
/// <param name="repository">
|
|
/// Die AutoMapper-Instanz, die zum Zuordnen von Objekten verwendet wird.
|
|
/// </param>
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
[Authorize(Policy = AuthPolicy.Sender)]
|
|
public class EmailTemplateController(IMapper mapper, IRepository<EmailTemplate> repository, IMediator mediator) : ControllerBase
|
|
{
|
|
/// <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)
|
|
{
|
|
if (emailTemplate is null || (emailTemplate.Id is null && emailTemplate.Type is null))
|
|
{
|
|
var temps = await repository.Query.ToListAsync();
|
|
return Ok(mapper.Map<IEnumerable<EmailTemplateDto>>(temps));
|
|
}
|
|
else
|
|
{
|
|
var temp = await mediator.Send(emailTemplate);
|
|
return temp is null ? NotFound() : Ok(temp);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Updates an temp 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="temp">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] IEmailTemplateQuery? temp = null, [FromBody] UpdateEmailTemplateCommand? update = null)
|
|
{
|
|
if (update is null)
|
|
{
|
|
await mediator.Send(new ResetEmailTemplateCommand(temp));
|
|
return Ok();
|
|
}
|
|
else if (temp is null)
|
|
{
|
|
return BadRequest("No both id and type");
|
|
}
|
|
else
|
|
{
|
|
update.EmailTemplateQuery = temp;
|
|
await mediator.Send(update);
|
|
return Ok();
|
|
}
|
|
}
|
|
} |