Skip to content

Commit 0bcd9c7

Browse files
committed
fix: repair BU position larger than 1cm GAWR-5443
1 parent 19821c9 commit 0bcd9c7

File tree

3 files changed

+49
-5
lines changed

3 files changed

+49
-5
lines changed

src/BuildingRegistry/Building/BuildingUnit.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -499,11 +499,17 @@ public void RepairPosition(BuildingGeometry buildingGeometry)
499499

500500
if (correctedGeometry is not null)
501501
{
502-
Apply(new BuildingUnitPositionWasCorrected(
503-
_buildingPersistentLocalId,
504-
BuildingUnitPersistentLocalId,
505-
BuildingUnitPositionGeometryMethod.DerivedFromObject,
506-
correctedGeometry));
502+
var currentPosition = buildingGeometry.GetGeometry(BuildingUnitPosition.Geometry);
503+
var newPosition = buildingGeometry.GetGeometry(correctedGeometry);
504+
505+
if (currentPosition.Distance(newPosition) > 0.01)
506+
{
507+
Apply(new BuildingUnitPositionWasCorrected(
508+
_buildingPersistentLocalId,
509+
BuildingUnitPersistentLocalId,
510+
BuildingUnitPositionGeometryMethod.DerivedFromObject,
511+
correctedGeometry));
512+
}
507513
}
508514
}
509515

src/BuildingRegistry/Building/ValueObjects/BuildingGeometry.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ private ExtendedWkbGeometry CleanUpGeometryCollection(ExtendedWkbGeometry geomet
4343
public ExtendedWkbGeometry Center =>
4444
ExtendedWkbGeometry.CreateEWkb(_wkbReader.Read(Geometry).CentroidWithinArea().AsBinary())!;
4545

46+
public Geometry GetGeometry() => _wkbReader.Read(Geometry);
47+
public Geometry GetGeometry(ExtendedWkbGeometry geometry) => _wkbReader.Read(geometry);
48+
4649
protected override IEnumerable<object> Reflect()
4750
{
4851
yield return Geometry;

test/BuildingRegistry.Tests/AggregateTests/WhenRepairingBuilding/GivenBuildingExists.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ namespace BuildingRegistry.Tests.AggregateTests.WhenRepairingBuilding
1111
using BuildingRegistry.Legacy;
1212
using Extensions;
1313
using Fixtures;
14+
using NetTopologySuite.Geometries;
1415
using Xunit;
1516
using Xunit.Abstractions;
1617
using BuildingGeometry = BuildingRegistry.Legacy.BuildingGeometry;
@@ -23,6 +24,7 @@ namespace BuildingRegistry.Tests.AggregateTests.WhenRepairingBuilding
2324
using BuildingUnitPositionGeometryMethod = BuildingRegistry.Legacy.BuildingUnitPositionGeometryMethod;
2425
using BuildingUnitStatus = BuildingRegistry.Legacy.BuildingUnitStatus;
2526
using ExtendedWkbGeometry = BuildingRegistry.Legacy.ExtendedWkbGeometry;
27+
using GeometryFactory = BuildingRegistry.GeometryFactory;
2628

2729
public class GivenBuildingExists : BuildingRegistryTest
2830
{
@@ -63,5 +65,38 @@ public void WithUnitsDerivedButNotInCenter_ThenBuildingAndUnitsWereRepaired()
6365
BuildingRegistry.Building.BuildingUnitPositionGeometryMethod.DerivedFromObject,
6466
new BuildingRegistry.Building.BuildingGeometry(BuildingRegistry.Building.ExtendedWkbGeometry.CreateEWkb(migrated.ExtendedWkbGeometry.ToByteArray()), BuildingGeometryMethod.MeasuredByGrb).Center))));
6567
}
68+
69+
[Fact]
70+
public void WithUnitsDerivedButCloseToCenter_ThenBuildingAndUnitsWereRepaired()
71+
{
72+
var command = Fixture.Create<RepairBuilding>();
73+
74+
var migrated = new BuildingWasMigratedBuilder(Fixture)
75+
.WithBuildingStatus(BuildingStatus.Realized)
76+
.Build();
77+
78+
var reader = WKBReaderFactory.Create();
79+
reader.HandleSRID = true;
80+
81+
var centroid = reader.Read(migrated.ExtendedWkbGeometry.ToByteArray()).Centroid;
82+
var closePosition = new Point(centroid.X - 0.001, centroid.Y + 0.001) { SRID = GeometryFactory.CreateGeometryFactory().SRID };
83+
84+
migrated.BuildingUnits.Add(new BuildingWasMigrated.BuildingUnit(new BuildingUnit(
85+
new BuildingUnitId(Fixture.Create<Guid>()),
86+
new PersistentLocalId(Fixture.Create<int>()),
87+
BuildingUnitFunction.Unknown,
88+
BuildingUnitStatus.Realized,
89+
[],
90+
new BuildingUnitPosition(ExtendedWkbGeometry.CreateEWkb(closePosition.AsBinary()), BuildingUnitPositionGeometryMethod.DerivedFromObject),
91+
new BuildingGeometry(new ExtendedWkbGeometry(migrated.ExtendedWkbGeometry.ToByteArray()), BuildingRegistry.Legacy.BuildingGeometryMethod.MeasuredByGrb),
92+
false)));
93+
94+
Assert(new Scenario()
95+
.Given(
96+
new BuildingStreamId(Fixture.Create<BuildingPersistentLocalId>())!,
97+
migrated)
98+
.When(command)
99+
.ThenNone());
100+
}
66101
}
67102
}

0 commit comments

Comments
 (0)