From afedfdd596dc25c827cc9d6c05113631885fd2d6 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Wed, 21 Aug 2024 14:37:45 +0200 Subject: [PATCH] refactor: Receiver-Service in CRUD-Service umgewandelt und DTOs aktualisiert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Receiver-Service von einfachem CRUD zu generischem CRUD-Service umgewandelt. - `ReceiverDto` in `ReceiverReadDto` umbenannt. - Neues `ReceiverCreateDto` mit automatischer SHA-256-Signaturerstellung und aktuellem Zeitstempel erstellt. - Leeres `ReceiverUpdateDto` für zukünftige Updates hinzugefügt. --- .../Contracts/IEnvelopeHistoryService.cs | 4 ++-- .../Contracts/IReceiverService.cs | 4 ++-- .../EnvelopeHistory/EnvelopeHistoryDto.cs | 3 ++- .../DTOs/EnvelopeReceiverDto.cs | 3 ++- .../DTOs/Receiver/ReceiverCreateDto.cs | 20 +++++++++++++++++++ .../ReceiverReadDto.cs} | 4 ++-- .../DTOs/Receiver/ReceiverUpdateDto.cs | 4 ++++ .../MappingProfiles/BasicDtoMappingProfile.cs | 9 +++++++-- .../Services/EnvelopeHistoryService.cs | 6 +++--- .../Services/ReceiverService.cs | 4 ++-- EnvelopeGenerator.Domain/Entities/Receiver.cs | 2 +- .../Controllers/ReceiverController.cs | 17 ++++++++++++++++ .../Test/TestReceiverController.cs | 4 ++-- 13 files changed, 66 insertions(+), 18 deletions(-) create mode 100644 EnvelopeGenerator.Application/DTOs/Receiver/ReceiverCreateDto.cs rename EnvelopeGenerator.Application/DTOs/{ReceiverDto.cs => Receiver/ReceiverReadDto.cs} (64%) create mode 100644 EnvelopeGenerator.Application/DTOs/Receiver/ReceiverUpdateDto.cs create mode 100644 EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs diff --git a/EnvelopeGenerator.Application/Contracts/IEnvelopeHistoryService.cs b/EnvelopeGenerator.Application/Contracts/IEnvelopeHistoryService.cs index 2e8fa8b4..d6c5e671 100644 --- a/EnvelopeGenerator.Application/Contracts/IEnvelopeHistoryService.cs +++ b/EnvelopeGenerator.Application/Contracts/IEnvelopeHistoryService.cs @@ -1,7 +1,7 @@ using DigitalData.Core.Abstractions.Application; using DigitalData.Core.DTO; -using EnvelopeGenerator.Application.DTOs; using EnvelopeGenerator.Application.DTOs.EnvelopeHistory; +using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; using static EnvelopeGenerator.Common.Constants; @@ -22,7 +22,7 @@ namespace EnvelopeGenerator.Application.Contracts Task> ReadRejectedAsync(int envelopeId, string? userReference = null); - Task> ReadRejectingReceivers(int envelopeId); + Task> ReadRejectingReceivers(int envelopeId); Task> RecordAsync(int envelopeId, string userReference, EnvelopeStatus status, string? comment = null); } diff --git a/EnvelopeGenerator.Application/Contracts/IReceiverService.cs b/EnvelopeGenerator.Application/Contracts/IReceiverService.cs index 09cdb36a..bde7b25c 100644 --- a/EnvelopeGenerator.Application/Contracts/IReceiverService.cs +++ b/EnvelopeGenerator.Application/Contracts/IReceiverService.cs @@ -1,10 +1,10 @@ using DigitalData.Core.Abstractions.Application; -using EnvelopeGenerator.Application.DTOs; +using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Domain.Entities; namespace EnvelopeGenerator.Application.Contracts { - public interface IReceiverService : IBasicCRUDService + public interface IReceiverService : ICRUDService { } } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs b/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs index c70e6b30..7967ac3c 100644 --- a/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs +++ b/EnvelopeGenerator.Application/DTOs/EnvelopeHistory/EnvelopeHistoryDto.cs @@ -1,5 +1,6 @@ using DigitalData.Core.DTO; using DigitalData.UserManager.Application.DTOs.User; +using EnvelopeGenerator.Application.DTOs.Receiver; using static EnvelopeGenerator.Common.Constants; namespace EnvelopeGenerator.Application.DTOs.EnvelopeHistory @@ -12,7 +13,7 @@ namespace EnvelopeGenerator.Application.DTOs.EnvelopeHistory DateTime AddedWhen, DateTime? ActionDate, UserCreateDto? Sender, - ReceiverDto? Receiver, + ReceiverReadDto? Receiver, ReferenceType ReferenceType, string? Comment = null) : BaseDTO(Id); } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs b/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs index 7a62f280..e2fbcdca 100644 --- a/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs +++ b/EnvelopeGenerator.Application/DTOs/EnvelopeReceiverDto.cs @@ -1,4 +1,5 @@ using DigitalData.EmailProfilerDispatcher.Abstraction.Attributes; +using EnvelopeGenerator.Application.DTOs.Receiver; namespace EnvelopeGenerator.Application.DTOs { @@ -25,6 +26,6 @@ namespace EnvelopeGenerator.Application.DTOs public EnvelopeDto? Envelope { get; set; } - public ReceiverDto? Receiver { get; set; } + public ReceiverReadDto? Receiver { get; set; } } } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverCreateDto.cs b/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverCreateDto.cs new file mode 100644 index 00000000..017c5d50 --- /dev/null +++ b/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverCreateDto.cs @@ -0,0 +1,20 @@ +using System.Security.Cryptography; +using System.Text; + +namespace EnvelopeGenerator.Application.DTOs.Receiver +{ + public record ReceiverCreateDto(string EmailAddress) + { + public string Signature => sha256HexOfMail.Value; + + private readonly Lazy sha256HexOfMail = new(() => + { + var bytes_arr = Encoding.UTF8.GetBytes(EmailAddress.ToUpper()); + var hash_arr = SHA256.HashData(bytes_arr); + var hexa_str = BitConverter.ToString(hash_arr); + return hexa_str.Replace("-", string.Empty); + }); + + public DateTime AddedWhen { get; } = DateTime.Now; + }; +} \ No newline at end of file diff --git a/EnvelopeGenerator.Application/DTOs/ReceiverDto.cs b/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverReadDto.cs similarity index 64% rename from EnvelopeGenerator.Application/DTOs/ReceiverDto.cs rename to EnvelopeGenerator.Application/DTOs/Receiver/ReceiverReadDto.cs index be0fee90..4c5d5c69 100644 --- a/EnvelopeGenerator.Application/DTOs/ReceiverDto.cs +++ b/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverReadDto.cs @@ -1,8 +1,8 @@ using DigitalData.Core.DTO; -namespace EnvelopeGenerator.Application.DTOs +namespace EnvelopeGenerator.Application.DTOs.Receiver { - public record ReceiverDto( + public record ReceiverReadDto( int Id, string EmailAddress, string Signature, diff --git a/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverUpdateDto.cs b/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverUpdateDto.cs new file mode 100644 index 00000000..a6818b3a --- /dev/null +++ b/EnvelopeGenerator.Application/DTOs/Receiver/ReceiverUpdateDto.cs @@ -0,0 +1,4 @@ +namespace EnvelopeGenerator.Application.DTOs.Receiver +{ + public record ReceiverUpdateDto(); +} \ No newline at end of file diff --git a/EnvelopeGenerator.Application/MappingProfiles/BasicDtoMappingProfile.cs b/EnvelopeGenerator.Application/MappingProfiles/BasicDtoMappingProfile.cs index 3102576d..df3637da 100644 --- a/EnvelopeGenerator.Application/MappingProfiles/BasicDtoMappingProfile.cs +++ b/EnvelopeGenerator.Application/MappingProfiles/BasicDtoMappingProfile.cs @@ -1,6 +1,7 @@ using AutoMapper; using EnvelopeGenerator.Application.DTOs; using EnvelopeGenerator.Application.DTOs.EnvelopeHistory; +using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Domain.Entities; namespace EnvelopeGenerator.Application.MappingProfiles @@ -21,7 +22,9 @@ namespace EnvelopeGenerator.Application.MappingProfiles CreateMap(); CreateMap(); CreateMap(); - CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); CreateMap(); // DTO to Entity mappings @@ -36,7 +39,9 @@ namespace EnvelopeGenerator.Application.MappingProfiles CreateMap(); CreateMap(); CreateMap(); - CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); CreateMap(); } } diff --git a/EnvelopeGenerator.Application/Services/EnvelopeHistoryService.cs b/EnvelopeGenerator.Application/Services/EnvelopeHistoryService.cs index ab9431cc..d7a4a26a 100644 --- a/EnvelopeGenerator.Application/Services/EnvelopeHistoryService.cs +++ b/EnvelopeGenerator.Application/Services/EnvelopeHistoryService.cs @@ -8,7 +8,7 @@ using static EnvelopeGenerator.Common.Constants; using EnvelopeGenerator.Application.Resources; using DigitalData.Core.DTO; using EnvelopeGenerator.Application.DTOs.EnvelopeHistory; -using EnvelopeGenerator.Application.DTOs; +using EnvelopeGenerator.Application.DTOs.Receiver; namespace EnvelopeGenerator.Application.Services { @@ -67,11 +67,11 @@ namespace EnvelopeGenerator.Application.Services await ReadAsync(envelopeId: envelopeId, userReference: userReference, status: (int)EnvelopeStatus.DocumentRejected, withReceiver:true); //TODO: use IQueryable in repository to incerease the performance - public async Task> ReadRejectingReceivers(int envelopeId) + public async Task> ReadRejectingReceivers(int envelopeId) { var envelopes = await ReadRejectedAsync(envelopeId); return envelopes is null - ? Enumerable.Empty() + ? Enumerable.Empty() : envelopes .Where(eh => eh?.Receiver != null) .Select(eh => eh.Receiver!); diff --git a/EnvelopeGenerator.Application/Services/ReceiverService.cs b/EnvelopeGenerator.Application/Services/ReceiverService.cs index 5c9d19a7..2aa4818e 100644 --- a/EnvelopeGenerator.Application/Services/ReceiverService.cs +++ b/EnvelopeGenerator.Application/Services/ReceiverService.cs @@ -2,14 +2,14 @@ using DigitalData.Core.Application; using Microsoft.Extensions.Localization; using EnvelopeGenerator.Application.Contracts; -using EnvelopeGenerator.Application.DTOs; using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Infrastructure.Contracts; using EnvelopeGenerator.Application.Resources; +using EnvelopeGenerator.Application.DTOs.Receiver; namespace EnvelopeGenerator.Application.Services { - public class ReceiverService : BasicCRUDService, IReceiverService + public class ReceiverService : CRUDService, IReceiverService { public ReceiverService(IReceiverRepository repository, IStringLocalizer localizer, IMapper mapper) : base(repository, mapper) diff --git a/EnvelopeGenerator.Domain/Entities/Receiver.cs b/EnvelopeGenerator.Domain/Entities/Receiver.cs index 9e960b64..026a2f1d 100644 --- a/EnvelopeGenerator.Domain/Entities/Receiver.cs +++ b/EnvelopeGenerator.Domain/Entities/Receiver.cs @@ -10,7 +10,7 @@ namespace EnvelopeGenerator.Domain.Entities [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Column("GUID")] public int Id { get; set; } - + [Required] [Column("EMAIL_ADDRESS", TypeName = "nvarchar(128)")] public required string EmailAddress { get; set; } diff --git a/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs b/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs new file mode 100644 index 00000000..5656b947 --- /dev/null +++ b/EnvelopeGenerator.GeneratorAPI/Controllers/ReceiverController.cs @@ -0,0 +1,17 @@ +using DigitalData.Core.API; +using EnvelopeGenerator.Application.Contracts; +using EnvelopeGenerator.Application.DTOs.Receiver; +using EnvelopeGenerator.Domain.Entities; +using Microsoft.AspNetCore.Mvc; + +namespace EnvelopeGenerator.GeneratorAPI.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class ReceiverController : CRUDControllerBaseWithErrorHandling + { + public ReceiverController(ILogger logger, IReceiverService service) : base(logger, service) + { + } + } +} \ No newline at end of file diff --git a/EnvelopeGenerator.Web/Controllers/Test/TestReceiverController.cs b/EnvelopeGenerator.Web/Controllers/Test/TestReceiverController.cs index 8b214c59..20bddb42 100644 --- a/EnvelopeGenerator.Web/Controllers/Test/TestReceiverController.cs +++ b/EnvelopeGenerator.Web/Controllers/Test/TestReceiverController.cs @@ -1,10 +1,10 @@ using EnvelopeGenerator.Application.Contracts; -using EnvelopeGenerator.Application.DTOs; +using EnvelopeGenerator.Application.DTOs.Receiver; using EnvelopeGenerator.Domain.Entities; namespace EnvelopeGenerator.Web.Controllers.Test { - public class TestReceiverController : TestControllerBase + public class TestReceiverController : TestControllerBase { public TestReceiverController(ILogger logger, IReceiverService service) : base(logger, service) {