Compare commits

...

2 Commits

Author SHA1 Message Date
Developer 02
9a4931781a Refactor envelope and receiver response models
- Updated `ReadEnvelopeReceiverResponse` to use `ReadEnvelopeResponse` instead of `ReadReceiverResponse`.
- Modified `ReadReceiverResponse` to include additional parameters in its constructor for better detail.
- Introduced a new `ReadEnvelopeResponse` record with comprehensive properties and a computed `StatusName`.
2025-04-07 14:53:31 +02:00
Developer 02
b3a2e1559a Refactor envelope handling and introduce new queries
Restructured the `CreateEnvelope` functionality by moving the `CreateEnvelopeCommand` and related DTOs to a new namespace. Der `EnvelopeReceiverController` wurde aktualisiert, um diese Änderungen widerzuspiegeln, und die Parameter wurden zur besseren Übersichtlichkeit umbenannt. Es wurden neue Abfragesätze für das Lesen von Umschlag-Empfängern und definierte Antwortstrukturen eingeführt, wodurch die Gesamtorganisation und die Wartbarkeit der Codebasis verbessert wurden.

Übersetzt mit DeepL.com (kostenlose Version)
2025-04-07 12:03:34 +02:00
11 changed files with 126 additions and 19 deletions

View File

@@ -1,7 +1,7 @@
using MediatR;
using System.ComponentModel.DataAnnotations;
namespace EnvelopeGenerator.Application.EnvelopeReceivers.Commands;
namespace EnvelopeGenerator.Application.EnvelopeReceivers.Commands.Create;
#region DTOs
/// <summary>
@@ -21,7 +21,7 @@ public record Signature([Required] int X, [Required] int Y, [Required] int Page)
/// <param name="PhoneNumber">Sollte mit Vorwahl geschrieben werden</param>
public record ReceiverGetOrCreateDto([Required] IEnumerable<Signature> Signatures, string? Name = null, string? PhoneNumber = null)
{
private string _emailAddress;
private string _emailAddress = string.Empty;
/// <summary>
/// E-Mail-Adresse des Empfängers.
@@ -49,15 +49,4 @@ public record CreateEnvelopeCommand(
DateTime? ExpiresWarningWhen = null,
int ContractType = (int)Common.Constants.ContractType.Contract,
bool TFAEnabled = false
) : IRequest;
/// <summary>
/// Handler für den CreateEnvelopeCommand.
/// </summary>
public class CreateEnvelopeCommandHandler : IRequestHandler<CreateEnvelopeCommand>
{
public Task<Unit> Handle(CreateEnvelopeCommand request, CancellationToken cancellationToken = default)
{
throw new NotImplementedException();
}
}
) : IRequest;

View File

@@ -0,0 +1,16 @@
using EnvelopeGenerator.Application.Envelopes.Queries.Read;
using EnvelopeGenerator.Application.Receivers.Queries.Read;
namespace EnvelopeGenerator.Application.EnvelopeReceivers;
/// <summary>
/// Stellt eine Abfrage zum Lesen eines Envelope-Empfängers dar.
/// </summary>
/// <param name="MinStatus"></param>
/// <param name="MaxStatus"></param>
/// <param name="IgnoreStatus"></param>
/// <param name="Receiver"></param>
public record EnvelopeReceiverQuery(
int? MinStatus = null,
int? MaxStatus = null,
int[]? IgnoreStatus = null);

View File

@@ -0,0 +1,15 @@
using EnvelopeGenerator.Application.Envelopes.Queries.Read;
using EnvelopeGenerator.Application.Receivers.Queries.Read;
using MediatR;
namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries.Read;
/// <summary>
/// Stellt eine Abfrage zum Lesen eines Envelope-Empfängers dar.
/// </summary>
public record ReadEnvelopeReceiverQuery : EnvelopeReceiverQuery, IRequest<ReadEnvelopeReceiverResponse>
{
public ReadEnvelopeQuery? Envelope { get; init; }
public ReadReceiverQuery? Receiver { get; init; }
};

View File

@@ -0,0 +1,46 @@
using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes;
using EnvelopeGenerator.Application.Envelopes.Queries.Read;
using EnvelopeGenerator.Application.Receivers.Queries.Read;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace EnvelopeGenerator.Application.EnvelopeReceivers.Queries.Read;
/// <summary>
/// Stellt eine Antwort auf die Abfrage zum Lesen eines Envelope-Empfängers dar.
/// </summary>
/// <param name="Receiver">Der angeforderte Empfänger.</param>
public record ReadEnvelopeReceiverResponse(int UserId, int Status)
{
[NotMapped]
public (int Envelope, int Receiver) Id => (Envelope: EnvelopeId, Receiver: ReceiverId);
[Required]
public int EnvelopeId { get; init; }
[Required]
public int ReceiverId { get; init; }
public int Sequence { get; init; }
[TemplatePlaceholder("[NAME_RECEIVER]")]
public string? Name { get; init; }
public string? JobTitle { get; init; }
public string? CompanyName { get; init; }
public string? PrivateMessage { get; init; }
public DateTime AddedWhen { get; init; }
public DateTime? ChangedWhen { get; init; }
public bool HasPhoneNumber { get; init; }
[Required]
public required ReadEnvelopeResponse Envelope { get; init; }
[Required]
public required ReadReceiverResponse Receiver { get; init; }
}

View File

@@ -0,0 +1,16 @@
using MediatR;
namespace EnvelopeGenerator.Application.Envelopes;
/// <summary>
/// Repräsentiert eine Abfrage für Umschläge.
/// </summary>
/// <param name="Id">Die eindeutige Kennung des Umschlags.</param>
/// <param name="UserId">Die Kennung des Benutzers, der den Umschlag erstellt hat.</param>
/// <param name="Status">Der Status des Umschlags.</param>
/// <param name="Uuid">Die universell eindeutige Kennung des Umschlags.</param>
public record EnvelopeQuery(
int? Id = null,
int? UserId = null,
int? Status = null,
string? Uuid = null) : IRequest;

View File

@@ -0,0 +1,5 @@
namespace EnvelopeGenerator.Application.Envelopes.Queries.Read;
public record ReadEnvelopeQuery : EnvelopeQuery
{
}

View File

@@ -0,0 +1,8 @@
using EnvelopeGenerator.Common;
namespace EnvelopeGenerator.Application.Envelopes.Queries.Read;
public record ReadEnvelopeResponse(int Id, int UserId, int Status, string Uuid, string? Message, DateTime AddedWhen, DateTime? ChangedWhen, string? Title, string Language, bool TFAEnabled, DigitalData.UserManager.Domain.Entities.User User)
{
public string StatusName => ((Constants.EnvelopeStatus)Status).ToString();
}

View File

@@ -0,0 +1,5 @@
namespace EnvelopeGenerator.Application.Receivers.Queries.Read;
public record ReadReceiverQuery : ReceiverQuery
{
}

View File

@@ -0,0 +1,5 @@
namespace EnvelopeGenerator.Application.Receivers.Queries.Read;
public record ReadReceiverResponse(int Id, string EmailAddress, DateTime AddedWhen, string Signature)
{
}

View File

@@ -0,0 +1,3 @@
namespace EnvelopeGenerator.Application.Receivers;
public record ReceiverQuery(int? Id = null, string? EmailAddress = null, string? Signature = null);

View File

@@ -1,7 +1,6 @@
using DigitalData.Core.DTO;
using EnvelopeGenerator.Application.Contracts.Services;
using EnvelopeGenerator.Application.EnvelopeReceivers.Commands;
using EnvelopeGenerator.Common.My.Resources;
using EnvelopeGenerator.Application.EnvelopeReceivers.Commands.Create;
using MediatR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
@@ -104,7 +103,7 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers
/// <summary>
/// Datenübertragungsobjekt mit Informationen zu Umschlägen, Empfängern und Unterschriften.
/// </summary>
/// <param name="envelope"></param>
/// <param name="createEnvelopeQuery"></param>
/// <param name="cancellationToken">Token to cancel the operation</param>
/// <returns>HTTP-Antwort</returns>
/// <remarks>
@@ -145,9 +144,9 @@ namespace EnvelopeGenerator.GeneratorAPI.Controllers
/// <response code="500">Es handelt sich um einen unerwarteten Fehler. Die Protokolle sollten überprüft werden.</response>
[Authorize]
[HttpPost]
public async Task<IActionResult> CreateAsync([FromBody] CreateEnvelopeCommand envelope, CancellationToken cancellationToken)
public async Task<IActionResult> CreateAsync([FromBody] CreateEnvelopeCommand createEnvelopeQuery, CancellationToken cancellationToken)
{
await _mediator.Send(envelope, cancellationToken);
await _mediator.Send(createEnvelopeQuery, cancellationToken);
return Accepted();
}
}