Skip to content

Commit

Permalink
chore: Add existing ID checks for transmission attachments (#990)
Browse files Browse the repository at this point in the history
Not adding as "fix", there is already a note on a previous fix that is
related in the release notes

Related issue: #981
  • Loading branch information
oskogstad authored Aug 12, 2024
1 parent 05674cc commit 9ef5214
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,13 @@ public async Task<CreateDialogResult> Handle(CreateDialogCommand request, Cancel
_domainContext.AddError(DomainFailure.EntityExists<DialogTransmission>(existingTransmissionIds));
}

var transmissionAttachments = dialog.Transmissions.SelectMany(x => x.Attachments);
var existingTransmissionAttachmentIds = await _db.GetExistingIds(transmissionAttachments, cancellationToken);
if (existingTransmissionAttachmentIds.Count != 0)
{
_domainContext.AddError(DomainFailure.EntityExists<TransmissionAttachment>(existingTransmissionAttachmentIds));
}

await _db.Dialogs.AddAsync(dialog, cancellationToken);

var saveResult = await _unitOfWork.SaveChangesAsync(cancellationToken);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -93,7 +94,7 @@ public async Task<UpdateDialogResult> 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);
Expand Down Expand Up @@ -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<DialogTransmission>(existingIds));
}

var transmissionAttachments = newDialogTransmissions.SelectMany(x => x.Attachments);
var existingTransmissionAttachmentIds = await _db.GetExistingIds(transmissionAttachments, cancellationToken);
if (existingTransmissionAttachmentIds.Count != 0)
{
_domainContext.AddError(DomainFailure.EntityExists<TransmissionAttachment>(existingTransmissionAttachmentIds));
}

if (_domainContext.Errors.Count != 0)
{
return;
}
dialog.Transmissions.AddRange(newDialogTransmissions);

// Tell ef explicitly to add transmissions as new to the database.
Expand Down

0 comments on commit 9ef5214

Please sign in to comment.