From 261d1b3db9021d4eaf733807f928fdfc4fa55395 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Fri, 4 Apr 2025 15:36:03 +0200 Subject: [PATCH] =?UTF-8?q?Verbesserte=20Funktionen=20zur=20Erstellung=20v?= =?UTF-8?q?on=20Umschl=C3=A4gen=20und=20Aktualisierung=20von=20Projekten?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Neue DTOs und Befehle zur Erstellung von Umschlägen in CreateEnvelope.cs hinzugefügt. Aktualisierte Projektdateien, um net7.0, net8.0 und net9.0 zu unterstützen. Refactored EnvelopeController für bessere Struktur und Fehlerbehandlung. Einführung einer Methode zur Erstellung von Umschlägen in EnvelopeReceiverController unter Verwendung von IMediator. Allgemeine Verbesserungen der Funktionalität und Kompatibilität. --- .../EnvelopeGenerator.Application.csproj | 2 +- .../Commands/CreateEnvelope.cs | 8 +- .../EnvelopeGenerator.Domain.csproj | 2 +- .../Controllers/EnvelopeController.cs | 73 +++++++++---------- .../Controllers/EnvelopeReceiverController.cs | 58 ++++++++++++++- .../EnvelopeGenerator.Infrastructure.csproj | 2 +- 6 files changed, 100 insertions(+), 45 deletions(-) rename EnvelopeGenerator.Application/{Envelope => EnvelopeReceivers}/Commands/CreateEnvelope.cs (88%) diff --git a/EnvelopeGenerator.Application/EnvelopeGenerator.Application.csproj b/EnvelopeGenerator.Application/EnvelopeGenerator.Application.csproj index 072cca40..b53c961c 100644 --- a/EnvelopeGenerator.Application/EnvelopeGenerator.Application.csproj +++ b/EnvelopeGenerator.Application/EnvelopeGenerator.Application.csproj @@ -1,7 +1,7 @@  - net7.0 + net7.0;net8.0;net9.0 enable enable diff --git a/EnvelopeGenerator.Application/Envelope/Commands/CreateEnvelope.cs b/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/CreateEnvelope.cs similarity index 88% rename from EnvelopeGenerator.Application/Envelope/Commands/CreateEnvelope.cs rename to EnvelopeGenerator.Application/EnvelopeReceivers/Commands/CreateEnvelope.cs index 60138a30..ff15f3b6 100644 --- a/EnvelopeGenerator.Application/Envelope/Commands/CreateEnvelope.cs +++ b/EnvelopeGenerator.Application/EnvelopeReceivers/Commands/CreateEnvelope.cs @@ -1,7 +1,7 @@ using MediatR; using System.ComponentModel.DataAnnotations; -namespace EnvelopeGenerator.Application.Envelope.Commands; +namespace EnvelopeGenerator.Application.EnvelopeReceivers.Commands; #region DTOs /// @@ -43,12 +43,12 @@ public record CreateEnvelopeCommand( [Required] string Title, [Required] string Message, [Required] DocumentCreateDto Document, - [Required] IEnumerable Receivers + [Required] IEnumerable Receivers, string Language = "de-DE", DateTime? ExpiresWhen = null, DateTime? ExpiresWarningWhen = null, int ContractType = (int)Common.Constants.ContractType.Contract, - bool TFAEnabled = false, + bool TFAEnabled = false ) : IRequest; /// @@ -56,7 +56,7 @@ public record CreateEnvelopeCommand( /// public class CreateEnvelopeCommandHandler : IRequestHandler { - public Task Handle(CreateEnvelopeCommand request, CancellationToken cancellationToken) + public Task Handle(CreateEnvelopeCommand request, CancellationToken cancellationToken = default) { throw new NotImplementedException(); } diff --git a/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj b/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj index 50561806..7827d6d6 100644 --- a/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj +++ b/EnvelopeGenerator.Domain/EnvelopeGenerator.Domain.csproj @@ -1,7 +1,7 @@ - net7.0 + net7.0;net8.0;net9.0 enable enable diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs index a7835d66..f6e4d17c 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeController.cs @@ -3,50 +3,49 @@ using EnvelopeGenerator.Application.Contracts.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -namespace EnvelopeGenerator.GeneratorAPI.Controllers +namespace EnvelopeGenerator.GeneratorAPI.Controllers; + +[Route("api/[controller]")] +[ApiController] +[Authorize] +public class EnvelopeController : ControllerBase { - [Route("api/[controller]")] - [ApiController] - [Authorize] - public class EnvelopeController : ControllerBase + private readonly ILogger _logger; + private readonly IEnvelopeService _envelopeService; + + public EnvelopeController(ILogger logger, IEnvelopeService envelopeService) { - private readonly ILogger _logger; - private readonly IEnvelopeService _envelopeService; - - public EnvelopeController(ILogger logger, IEnvelopeService envelopeService) - { - _logger = logger; - _envelopeService = envelopeService; - } + _logger = logger; + _envelopeService = envelopeService; + } - [Authorize] - [HttpGet] - public async Task GetCurrentAsync( - [FromQuery] int? min_status = null, - [FromQuery] int? max_status = null, - [FromQuery] params int[] ignore_statuses) + [Authorize] + [HttpGet] + public async Task GetAsync( + [FromQuery] int? min_status = null, + [FromQuery] int? max_status = null, + [FromQuery] params int[] ignore_statuses) + { + try { - try - { - if (User.GetId() is int intId) - return await _envelopeService.ReadByUserAsync(intId, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses).ThenAsync( - Success: Ok, - Fail: IActionResult (msg, ntc) => - { - _logger.LogNotice(ntc); - return StatusCode(StatusCodes.Status500InternalServerError); - }); - else - { - _logger.LogError("Despite successful authorization, the 'api/envelope' route encountered an issue: the user ID is not recognized as an integer. This may be due to the removal of the ID during the creation of the claims list."); - return StatusCode(StatusCodes.Status500InternalServerError); - } - } - catch (Exception ex) + if (User.GetId() is int intId) + return await _envelopeService.ReadByUserAsync(intId, min_status: min_status, max_status: max_status, ignore_statuses: ignore_statuses).ThenAsync( + Success: Ok, + Fail: IActionResult (msg, ntc) => + { + _logger.LogNotice(ntc); + return StatusCode(StatusCodes.Status500InternalServerError); + }); + else { - _logger.LogError(ex, "{Message}", ex.Message); + _logger.LogError("Despite successful authorization, the 'api/envelope' route encountered an issue: the user ID is not recognized as an integer. This may be due to the removal of the ID during the creation of the claims list."); return StatusCode(StatusCodes.Status500InternalServerError); } } + catch (Exception ex) + { + _logger.LogError(ex, "{Message}", ex.Message); + return StatusCode(StatusCodes.Status500InternalServerError); + } } } \ No newline at end of file diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs index 38184e9a..220c34fb 100644 --- a/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/EnvelopeReceiverController.cs @@ -1,6 +1,8 @@ using DigitalData.Core.DTO; using EnvelopeGenerator.Application.Contracts.Services; +using EnvelopeGenerator.Application.EnvelopeReceivers.Commands; using EnvelopeGenerator.Common.My.Resources; +using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -12,12 +14,16 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers public class EnvelopeReceiverController : ControllerBase { private readonly ILogger _logger; + private readonly IEnvelopeReceiverService _erService; - public EnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService envelopeReceiverService) + private readonly IMediator _mediator; + + public EnvelopeReceiverController(ILogger logger, IEnvelopeReceiverService envelopeReceiverService, IMediator mediator) { _logger = logger; _erService = envelopeReceiverService; + _mediator = mediator; } [HttpGet] @@ -94,5 +100,55 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers return StatusCode(StatusCodes.Status500InternalServerError); } } + + /// + /// Datenübertragungsobjekt mit Informationen zu Umschlägen, Empfängern und Unterschriften. + /// + /// + /// Token to cancel the operation + /// HTTP-Antwort + /// + /// Sample request: + /// + /// POST /api/envelope + /// { + /// "title": "Vertragsdokument", + /// "message": "Bitte unterschreiben Sie dieses Dokument.", + /// "document": { + /// "dataAsBase64": "dGVzdC1iYXNlNjQtZGF0YQ==" + /// }, + /// "receivers": [ + /// { + /// "emailAddress": "example@example.com", + /// "signatures": [ + /// { + /// "x": 100, + /// "y": 200, + /// "page": 1 + /// } + /// ], + /// "name": "Max Mustermann", + /// "phoneNumber": "+49123456789" + /// } + /// ], + /// "language": "de-DE", + /// "expiresWhen": "2025-12-31T23:59:59Z", + /// "expiresWarningWhen": "2025-12-24T23:59:59Z", + /// "contractType": 1, + /// "tfaEnabled": false + /// } + /// + /// + /// Envelope-Erstellung und Sendeprozessbefehl erfolgreich + /// Wenn ein Fehler im HTTP-Body auftritt + /// Wenn kein autorisierter Token vorhanden ist + /// Es handelt sich um einen unerwarteten Fehler. Die Protokolle sollten überprüft werden. + [Authorize] + [HttpPost] + public async Task CreateAsync([FromBody] CreateEnvelopeCommand envelope, CancellationToken cancellationToken) + { + await _mediator.Send(envelope, cancellationToken); + return Accepted(); + } } } \ No newline at end of file diff --git a/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj b/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj index 892bbe5a..9f46ea48 100644 --- a/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj +++ b/EnvelopeGenerator.Infrastructure/EnvelopeGenerator.Infrastructure.csproj @@ -1,7 +1,7 @@  - net7.0 + net7.0;net8.0;net9.0 enable enable