From 9ef5214f17ee73f16ac44227ffb58e92bccddbc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole=20J=C3=B8rgen=20Skogstad?= Date: Mon, 12 Aug 2024 15:44:55 +0200 Subject: [PATCH] chore: Add existing ID checks for transmission attachments (#990) Not adding as "fix", there is already a note on a previous fix that is related in the release notes Related issue: #981 --- .../Commands/Create/CreateDialogCommand.cs | 7 +++++++ .../Commands/Update/UpdateDialogCommand.cs | 21 +++++++++++++------ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Create/CreateDialogCommand.cs b/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Create/CreateDialogCommand.cs index ee4edf988..588b9e6e7 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Create/CreateDialogCommand.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Create/CreateDialogCommand.cs @@ -128,6 +128,13 @@ public async Task Handle(CreateDialogCommand request, Cancel _domainContext.AddError(DomainFailure.EntityExists(existingTransmissionIds)); } + var transmissionAttachments = dialog.Transmissions.SelectMany(x => x.Attachments); + var existingTransmissionAttachmentIds = await _db.GetExistingIds(transmissionAttachments, cancellationToken); + if (existingTransmissionAttachmentIds.Count != 0) + { + _domainContext.AddError(DomainFailure.EntityExists(existingTransmissionAttachmentIds)); + } + await _db.Dialogs.AddAsync(dialog, cancellationToken); var saveResult = await _unitOfWork.SaveChangesAsync(cancellationToken); diff --git a/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs b/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs index ff6f5ae23..d548a2ab2 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Features/V1/ServiceOwner/Dialogs/Commands/Update/UpdateDialogCommand.cs @@ -1,9 +1,9 @@ using AutoMapper; using Digdir.Domain.Dialogporten.Application.Common; using Digdir.Domain.Dialogporten.Application.Common.Extensions.Enumerables; -using Digdir.Domain.Dialogporten.Application.Common.ResourceRegistry; using Digdir.Domain.Dialogporten.Application.Common.ReturnTypes; using Digdir.Domain.Dialogporten.Application.Externals; +using Digdir.Domain.Dialogporten.Domain.Common; using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities; using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities.Actions; using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities.Activities; @@ -14,6 +14,7 @@ using Microsoft.EntityFrameworkCore; using OneOf; using OneOf.Types; +using ResourceRegistryConstants = Digdir.Domain.Dialogporten.Application.Common.ResourceRegistry.Constants; namespace Digdir.Domain.Dialogporten.Application.Features.V1.ServiceOwner.Dialogs.Commands.Update; @@ -93,7 +94,7 @@ public async Task Handle(UpdateDialogCommand request, Cancel return new Forbidden($"User cannot modify resource type {dialog.ServiceResourceType}."); } - if (dialog.ServiceResourceType == Constants.Correspondence) + if (dialog.ServiceResourceType == ResourceRegistryConstants.Correspondence) { if (request.Dto.Progress is not null) return new ValidationError(_progressValidationFailure); @@ -286,12 +287,20 @@ private async Task AppendTransmission(DialogEntity dialog, UpdateDialogDto dto, var existingIds = await _db.GetExistingIds(newDialogTransmissions, cancellationToken); if (existingIds.Count != 0) { - _domainContext.AddError( - nameof(UpdateDialogDto.Transmissions), - $"Entity '{nameof(DialogTransmission)}' with the following key(s) already exists: ({string.Join(", ", existingIds)})."); - return; + _domainContext.AddError(DomainFailure.EntityExists(existingIds)); } + var transmissionAttachments = newDialogTransmissions.SelectMany(x => x.Attachments); + var existingTransmissionAttachmentIds = await _db.GetExistingIds(transmissionAttachments, cancellationToken); + if (existingTransmissionAttachmentIds.Count != 0) + { + _domainContext.AddError(DomainFailure.EntityExists(existingTransmissionAttachmentIds)); + } + + if (_domainContext.Errors.Count != 0) + { + return; + } dialog.Transmissions.AddRange(newDialogTransmissions); // Tell ef explicitly to add transmissions as new to the database.