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; using EnvelopeGenerator.Application.Exceptions; namespace EnvelopeGenerator.GeneratorAPI.Controllers; /// /// Controller for managing temp templates. /// Steuerung zur Verwaltung von E-Mail-Vorlagen. /// [Route("api/[controller]")] [ApiController] [Authorize] public class EmailTemplateController : ControllerBase { private readonly ILogger _logger; private readonly IMapper _mapper; private readonly IEmailTemplateRepository _repository; private readonly IMediator _mediator; /// /// Initialisiert eine neue Instanz der -Klasse. /// /// /// /// Die AutoMapper-Instanz, die zum Zuordnen von Objekten verwendet wird. /// public EmailTemplateController(IMapper mapper, IEmailTemplateRepository repository, ILogger logger, IMediator mediator) { _mapper = mapper; _repository = repository; _logger = logger; _mediator = mediator; } /// /// Ruft E-Mail-Vorlagen basierend auf der angegebenen Abfrage ab. /// Gibt alles zurück, wenn keine Id- oder Typ-Informationen eingegeben wurden. /// /// Die Abfrageparameter zum Abrufen von E-Mail-Vorlagen. /// Gibt HTTP-Antwort zurück /// /// Sample request: /// GET /api/EmailTemplate?emailTemplateId=123 /// /// Wenn die E-Mail-Vorlagen erfolgreich abgerufen werden. /// Wenn die Abfrageparameter ungültig sind. /// Wenn der Benutzer nicht authentifiziert ist. /// Wenn die gesuchte Abfrage nicht gefunden wird. [HttpGet] public async Task Get([FromQuery] ReadEmailTemplateQuery? emailTemplate = null) { if (emailTemplate is null || (emailTemplate.Id is null && emailTemplate.Type is null)) { var temps = await _repository.ReadAllAsync(); return Ok(_mapper.Map>(temps)); } else { var temp = await _mediator.Send(emailTemplate); return temp is null ? NotFound() : Ok(temp); } } /// /// 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. /// /// Die E-Mail-Vorlagenabfrage. /// Der Aktualisierungsbefehl für die E-Mail-Vorlage. /// Wird auf Standardwert aktualisiert, wenn die Anfrage ohne http-Body gesendet wird. /// /// Gibt HTTP-Antwort zurück /// /// Sample request: /// PUT /api/EmailTemplate /// { /// "emailTemplateId": 123, /// "newContent": "Updated content" /// } /// /// Wenn die E-Mail-Vorlage erfolgreich aktualisiert oder zurückgesetzt wird. /// Wenn die Abfrage ohne einen String gesendet wird. /// Wenn der Benutzer nicht authentifiziert ist. /// Wenn die gesuchte Abfrage nicht gefunden wird. [HttpPut] public async Task Update([FromQuery] EmailTemplateQuery? 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(); } } }