Skip to content

Commit

Permalink
chore: check if address link exists before adding in projections
Browse files Browse the repository at this point in the history
  • Loading branch information
rikdepeuter committed Jul 23, 2024
1 parent e4a914b commit c6e0afb
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -99,24 +99,13 @@ await context.FindAndUpdateParcel(

When<Envelope<ParcelAddressWasAttachedV2>>(async (context, message, ct) =>
{
await context
.ParcelLatestItemAddresses
.AddAsync(new ParcelLatestItemAddress(
message.Message.ParcelId,
message.Message.AddressPersistentLocalId,
message.Message.CaPaKey), ct);
await AddParcelAddress(context, message.Message.ParcelId, message.Message.CaPaKey, message.Message.AddressPersistentLocalId, ct);
});

When<Envelope<ParcelAddressWasReplacedBecauseOfMunicipalityMerger>>(async (context, message, ct) =>
{
await RemoveParcelAddress(context, message.Message.ParcelId, message.Message.PreviousAddressPersistentLocalId, ct);

await context
.ParcelLatestItemAddresses
.AddAsync(new ParcelLatestItemAddress(
message.Message.ParcelId,
message.Message.NewAddressPersistentLocalId,
message.Message.CaPaKey), ct);
await AddParcelAddress(context, message.Message.ParcelId, message.Message.CaPaKey, message.Message.NewAddressPersistentLocalId, ct);
});

When<Envelope<ParcelAddressWasReplacedBecauseAddressWasReaddressed>>(async (context, message, ct) =>
Expand Down Expand Up @@ -162,19 +151,7 @@ await context

foreach (var addressPersistentLocalId in message.Message.AttachedAddressPersistentLocalIds)
{
var relation = await context
.ParcelLatestItemAddresses
.FindAsync([message.Message.ParcelId, addressPersistentLocalId], ct);

if (relation is null)
{
await context.ParcelLatestItemAddresses.AddAsync(
new ParcelLatestItemAddress(
message.Message.ParcelId,
addressPersistentLocalId,
message.Message.CaPaKey),
ct);
}
await AddParcelAddress(context, message.Message.ParcelId, message.Message.CaPaKey, addressPersistentLocalId, ct);
}
});

Expand Down Expand Up @@ -215,6 +192,28 @@ private static async Task RemoveParcelAddress(
}
}

private static async Task AddParcelAddress(
IntegrationContext context,
Guid parcelId,
string caPaKey,
int addressPersistentLocalId,
CancellationToken ct)
{
var newAddress = await context
.ParcelLatestItemAddresses
.FindAsync([parcelId, addressPersistentLocalId], cancellationToken: ct);

if (newAddress is null || context.Entry(newAddress).State == EntityState.Deleted)
{
await context
.ParcelLatestItemAddresses
.AddAsync(new ParcelLatestItemAddress(
parcelId,
addressPersistentLocalId,
caPaKey), ct);
}
}

private static void UpdateVersionTimestamp(ParcelLatestItem parcel, Instant versionTimestamp)
=> parcel.VersionTimestamp = versionTimestamp;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using Converters;
using Infrastructure;
using Legacy.Events;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
using Parcel;
using Parcel.Events;
Expand Down Expand Up @@ -114,13 +115,12 @@ await context.CreateNewParcelVersion(
message,
_ => { }, ct);

await context
.ParcelVersionAddresses
.AddAsync(new ParcelVersionAddress(
message.Position,
message.Message.ParcelId,
message.Message.AddressPersistentLocalId,
message.Message.CaPaKey), ct);
await AddParcelAddress(context,
message.Position,
message.Message.ParcelId,
message.Message.CaPaKey,
message.Message.AddressPersistentLocalId,
ct);
});

When<Envelope<ParcelAddressWasReplacedBecauseOfMunicipalityMerger>>(async (context, message, ct) =>
Expand All @@ -136,13 +136,12 @@ await RemoveParcelAddress(context,
message.Message.PreviousAddressPersistentLocalId,
ct);

await context
.ParcelVersionAddresses
.AddAsync(new ParcelVersionAddress(
message.Position,
message.Message.ParcelId,
message.Message.NewAddressPersistentLocalId,
message.Message.CaPaKey), ct);
await AddParcelAddress(context,
message.Position,
message.Message.ParcelId,
message.Message.CaPaKey,
message.Message.NewAddressPersistentLocalId,
ct);
});

When<Envelope<ParcelAddressWasReplacedBecauseAddressWasReaddressed>>(async (context, message, ct) =>
Expand All @@ -169,7 +168,7 @@ await context.CreateNewParcelVersion(
.ParcelVersionAddresses
.FindAsync([message.Position, message.Message.ParcelId, message.Message.NewAddressPersistentLocalId], cancellationToken: ct);

if (newAddress is null)
if (newAddress is null || context.Entry(newAddress).State == EntityState.Deleted)
{
await context
.ParcelVersionAddresses
Expand All @@ -194,32 +193,21 @@ await context.CreateNewParcelVersion(

foreach (var addressPersistentLocalId in message.Message.DetachedAddressPersistentLocalIds)
{
var relation = await context
.ParcelVersionAddresses
.FindAsync([message.Position, message.Message.ParcelId, addressPersistentLocalId], ct);

if (relation is not null)
{
context.ParcelVersionAddresses.Remove(relation);
}
await RemoveParcelAddress(context,
message.Position,
message.Message.ParcelId,
addressPersistentLocalId,
ct);
}

foreach (var addressPersistentLocalId in message.Message.AttachedAddressPersistentLocalIds)
{
var relation = await context
.ParcelVersionAddresses
.FindAsync([message.Position, message.Message.ParcelId, addressPersistentLocalId], ct);

if (relation is null)
{
await context.ParcelVersionAddresses.AddAsync(
new ParcelVersionAddress(
message.Position,
message.Message.ParcelId,
addressPersistentLocalId,
message.Message.CaPaKey),
ct);
}
await AddParcelAddress(context,
message.Position,
message.Message.ParcelId,
message.Message.CaPaKey,
addressPersistentLocalId,
ct);
}
});

Expand Down Expand Up @@ -455,6 +443,30 @@ await context.CreateNewParcelVersion(

#endregion

private static async Task AddParcelAddress(
IntegrationContext context,
long position,
Guid parcelId,
string caPaKey,
int addressPersistentLocalId,
CancellationToken ct)
{
var newAddress = await context
.ParcelVersionAddresses
.FindAsync([position, parcelId, addressPersistentLocalId], cancellationToken: ct);

if (newAddress is null || context.Entry(newAddress).State == EntityState.Deleted)
{
await context
.ParcelVersionAddresses
.AddAsync(new ParcelVersionAddress(
position,
parcelId,
addressPersistentLocalId,
caPaKey), ct);
}
}

private static async Task RemoveParcelAddress(
IntegrationContext context,
long position,
Expand All @@ -467,7 +479,10 @@ private static async Task RemoveParcelAddress(
.FindAsync(new object?[] { position, parcelId, addressPersistentLocalId },
cancellationToken: ct);

context.ParcelVersionAddresses.Remove(versionAddress);
if (versionAddress is not null)
{
context.ParcelVersionAddresses.Remove(versionAddress);
}
}
}
}

0 comments on commit c6e0afb

Please sign in to comment.