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 4ccb7fd14..ee4edf988 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 @@ -7,6 +7,7 @@ using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities; using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities.Activities; using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities.Attachments; +using Digdir.Domain.Dialogporten.Domain.Dialogs.Entities.Transmissions; using FluentValidation.Results; using MediatR; using OneOf; @@ -121,6 +122,12 @@ public async Task Handle(CreateDialogCommand request, Cancel _domainContext.AddError(DomainFailure.EntityExists(existingAttachmentIds)); } + var existingTransmissionIds = await _db.GetExistingIds(dialog.Transmissions, cancellationToken); + if (existingTransmissionIds.Count != 0) + { + _domainContext.AddError(DomainFailure.EntityExists(existingTransmissionIds)); + } + 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 9f8764a33..f9d8020a9 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 @@ -110,13 +110,14 @@ public async Task Handle(UpdateDialogCommand request, Cancel _mapper.Map(request.Dto, dialog); ValidateTimeFields(dialog); - AppendActivity(dialog, request.Dto); + await AppendActivity(dialog, request.Dto, cancellationToken); VerifyActivityRelations(dialog); - AppendTransmission(dialog, request.Dto); - VerifyActivityTransmissionRelations(dialog); + await AppendTransmission(dialog, request.Dto, cancellationToken); VerifyTransmissionRelations(dialog); + VerifyActivityTransmissionRelations(dialog); + dialog.SearchTags .Merge(request.Dto.SearchTags, destinationKeySelector: x => x.Value, @@ -205,19 +206,16 @@ private void ValidateTimeFields(DialogEntity dialog) } } - private void AppendActivity(DialogEntity dialog, UpdateDialogDto dto) + private async Task AppendActivity(DialogEntity dialog, UpdateDialogDto dto, CancellationToken cancellationToken) { var newDialogActivities = _mapper.Map>(dto.Activities); - var existingIds = dialog.Activities.Select(x => x.Id).ToList(); - - existingIds = existingIds.Intersect(newDialogActivities.Select(x => x.Id)).ToList(); + var existingIds = await _db.GetExistingIds(newDialogActivities, cancellationToken); if (existingIds.Count != 0) { _domainContext.AddError( nameof(UpdateDialogDto.Activities), $"Entity '{nameof(DialogActivity)}' with the following key(s) already exists: ({string.Join(", ", existingIds)})."); - return; } dialog.Activities.AddRange(newDialogActivities); @@ -280,19 +278,16 @@ private void VerifyActivityRelations(DialogEntity dialog) } } - private void AppendTransmission(DialogEntity dialog, UpdateDialogDto dto) + private async Task AppendTransmission(DialogEntity dialog, UpdateDialogDto dto, CancellationToken cancellationToken) { var newDialogTransmissions = _mapper.Map>(dto.Transmissions); - var existingIds = dialog.Transmissions.Select(x => x.Id).ToList(); - - existingIds = existingIds.Intersect(newDialogTransmissions.Select(x => x.Id)).ToList(); + 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; } dialog.Transmissions.AddRange(newDialogTransmissions); @@ -303,7 +298,11 @@ private void AppendTransmission(DialogEntity dialog, UpdateDialogDto dto) private void VerifyTransmissionRelations(DialogEntity dialog) { - var relatedTransmissionIds = dialog.Transmissions.Where(x => x.RelatedTransmissionId is not null).Select(x => x.RelatedTransmissionId).ToList(); + var relatedTransmissionIds = dialog.Transmissions + .Where(x => x.RelatedTransmissionId is not null) + .Select(x => x.RelatedTransmissionId) + .ToList(); + if (relatedTransmissionIds.Count == 0) { return;