From 17b5cda79e316ad938add1c405ea113cd060b43a Mon Sep 17 00:00:00 2001 From: Arne Dumarey Date: Mon, 20 Jan 2025 12:49:02 +0100 Subject: [PATCH] feat(wms): switch views to V3 --- ...20250120114301_SwitchViewsToV3.Designer.cs | 225 ++++++++++++++ .../20250120114301_SwitchViewsToV3.cs | 284 ++++++++++++++++++ 2 files changed, 509 insertions(+) create mode 100644 src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.Designer.cs create mode 100644 src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.cs diff --git a/src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.Designer.cs b/src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.Designer.cs new file mode 100644 index 000000000..75fcecbaa --- /dev/null +++ b/src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.Designer.cs @@ -0,0 +1,225 @@ +// +using System; +using AddressRegistry.Projections.Wms; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using NetTopologySuite.Geometries; + +#nullable disable + +namespace AddressRegistry.Projections.Wms.Migrations +{ + [DbContext(typeof(WmsContext))] + [Migration("20250120114301_SwitchViewsToV3")] + partial class SwitchViewsToV3 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("AddressRegistry.Projections.Wms.AddressWmsItemV2.AddressWmsItemV2", b => + { + b.Property("AddressPersistentLocalId") + .HasColumnType("int"); + + b.Property("BoxNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("HouseNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HouseNumberLabel") + .HasColumnType("nvarchar(max)"); + + b.Property("HouseNumberLabelLength") + .HasColumnType("int"); + + b.Property("LabelType") + .HasColumnType("int"); + + b.Property("OfficiallyAssigned") + .HasColumnType("bit"); + + b.Property("ParentAddressPersistentLocalId") + .HasColumnType("int"); + + b.Property("Position") + .IsRequired() + .HasColumnType("sys.geometry"); + + b.Property("PositionMethod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PositionSpecification") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("Removed") + .HasColumnType("bit"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("StreetNamePersistentLocalId") + .HasColumnType("int"); + + b.Property("VersionAsString") + .HasColumnType("nvarchar(max)"); + + b.Property("VersionTimestampAsDateTimeOffset") + .HasColumnType("datetimeoffset") + .HasColumnName("VersionTimestamp"); + + b.HasKey("AddressPersistentLocalId"); + + SqlServerKeyBuilderExtensions.IsClustered(b.HasKey("AddressPersistentLocalId")); + + b.HasIndex("ParentAddressPersistentLocalId"); + + b.HasIndex("Status"); + + b.HasIndex("StreetNamePersistentLocalId"); + + b.HasIndex("Removed", "Status"); + + SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("Removed", "Status"), new[] { "StreetNamePersistentLocalId", "Position" }); + + b.HasIndex("PositionX", "PositionY", "Removed", "Status"); + + SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("PositionX", "PositionY", "Removed", "Status"), new[] { "StreetNamePersistentLocalId" }); + + b.ToTable("AddressWmsV2", "wms.address"); + }); + + modelBuilder.Entity("AddressRegistry.Projections.Wms.AddressWmsItemV3.AddressWmsItemV3", b => + { + b.Property("AddressPersistentLocalId") + .HasColumnType("int"); + + b.Property("BoxNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("HouseNumber") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("HouseNumberLabel") + .HasColumnType("nvarchar(max)"); + + b.Property("HouseNumberLabelLength") + .HasColumnType("int"); + + b.Property("LabelType") + .HasColumnType("int"); + + b.Property("OfficiallyAssigned") + .HasColumnType("bit"); + + b.Property("ParentAddressPersistentLocalId") + .HasColumnType("int"); + + b.Property("Position") + .IsRequired() + .HasColumnType("sys.geometry"); + + b.Property("PositionMethod") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PositionSpecification") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PositionX") + .HasColumnType("float"); + + b.Property("PositionY") + .HasColumnType("float"); + + b.Property("PostalCode") + .HasColumnType("nvarchar(max)"); + + b.Property("Removed") + .HasColumnType("bit"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("StreetNamePersistentLocalId") + .HasColumnType("int"); + + b.Property("VersionAsString") + .HasColumnType("nvarchar(max)"); + + b.Property("VersionTimestampAsDateTimeOffset") + .HasColumnType("datetimeoffset") + .HasColumnName("VersionTimestamp"); + + b.HasKey("AddressPersistentLocalId"); + + SqlServerKeyBuilderExtensions.IsClustered(b.HasKey("AddressPersistentLocalId")); + + b.HasIndex("ParentAddressPersistentLocalId"); + + b.HasIndex("Status"); + + b.HasIndex("StreetNamePersistentLocalId"); + + b.HasIndex("Removed", "Status"); + + SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("Removed", "Status"), new[] { "StreetNamePersistentLocalId", "Position" }); + + b.HasIndex("PositionX", "PositionY", "Removed", "Status"); + + SqlServerIndexBuilderExtensions.IncludeProperties(b.HasIndex("PositionX", "PositionY", "Removed", "Status"), new[] { "StreetNamePersistentLocalId" }); + + b.ToTable("AddressWmsV3", "wms.address"); + }); + + modelBuilder.Entity("Be.Vlaanderen.Basisregisters.ProjectionHandling.Runner.ProjectionStates.ProjectionStateItem", b => + { + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("DesiredState") + .HasColumnType("nvarchar(max)"); + + b.Property("DesiredStateChangedAt") + .HasColumnType("datetimeoffset"); + + b.Property("ErrorMessage") + .HasColumnType("nvarchar(max)"); + + b.Property("Position") + .HasColumnType("bigint"); + + b.HasKey("Name"); + + b.ToTable("ProjectionStates", "wms.address"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.cs b/src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.cs new file mode 100644 index 000000000..99f220310 --- /dev/null +++ b/src/AddressRegistry.Projections.Wms/Migrations/20250120114301_SwitchViewsToV3.cs @@ -0,0 +1,284 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace AddressRegistry.Projections.Wms.Migrations +{ + /// + public partial class SwitchViewsToV3 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql("DROP VIEW [wms].[AdresAfgekeurd]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresVoorgesteld]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresInGebruik]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresGehistoreerd]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresView]"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresView] WITH SCHEMABINDING AS +SELECT a.[AddressPersistentLocalId] as ObjectId + ,CONCAT('https://data.vlaanderen.be/id/adres/', a.[AddressPersistentLocalId]) as Id + ,a.[VersionAsString] as VersieId + ,s.[PersistentLocalId] as StraatnaamObjectId + ,s.[NameDutch] as Straatnaam + ,a.[HouseNumberLabel] as HuisnummerLabel + ,a.[LabelType] + ,a.[HouseNumberLabelLength] as LabelLengte + ,s.[NisCode] as GemeenteObjectId + ,m.[NameDutch] as Gemeentenaam + ,a.[PostalCode] as PostinfoObjectId + ,[wms].[GetFullAddress](s.[NameDutch], a.[HouseNumber], a.[BoxNumber], a.[PostalCode], m.[NameDutch]) as VolledigAdres + ,a.[HouseNumber] as Huisnummer + ,a.[BoxNumber] as Busnummer + ,a.[Status] as AdresStatus + ,a.[Position] as AdresPositie + ,a.[PositionMethod] as PositieGeometrieMethode + ,a.[PositionSpecification] as PositieSpecificatie + ,a.[OfficiallyAssigned] as OfficieelToegekend +FROM [wms.address].AddressWmsV3 as a +JOIN [wms.streetname].[StreetNameHelperV2] s ON a.[StreetNamePersistentLocalId] = s.[PersistentLocalId] AND a.[Removed] = 0 +JOIN [wms.municipality].[MunicipalityHelper] m ON s.[NisCode] = m.[NisCode] AND s.[Removed] = 0"); + + migrationBuilder.Sql("CREATE UNIQUE CLUSTERED INDEX IX_AdresView_ObjectId ON [wms].[AdresView] ([ObjectId])"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresVoorgesteld] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'Voorgesteld';"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresInGebruik] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'InGebruik'"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresGehistoreerd] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'Gehistoreerd'"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresAfgekeurd] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'Afgekeurd'"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql("DROP VIEW [wms].[AdresAfgekeurd]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresVoorgesteld]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresInGebruik]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresGehistoreerd]"); + migrationBuilder.Sql("DROP VIEW [wms].[AdresView]"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresView] WITH SCHEMABINDING AS +SELECT a.[AddressPersistentLocalId] as ObjectId + ,CONCAT('https://data.vlaanderen.be/id/adres/', a.[AddressPersistentLocalId]) as Id + ,a.[VersionAsString] as VersieId + ,s.[PersistentLocalId] as StraatnaamObjectId + ,s.[NameDutch] as Straatnaam + ,a.[HouseNumberLabel] as HuisnummerLabel + ,a.[LabelType] + ,a.[HouseNumberLabelLength] as LabelLengte + ,s.[NisCode] as GemeenteObjectId + ,m.[NameDutch] as Gemeentenaam + ,a.[PostalCode] as PostinfoObjectId + ,[wms].[GetFullAddress](s.[NameDutch], a.[HouseNumber], a.[BoxNumber], a.[PostalCode], m.[NameDutch]) as VolledigAdres + ,a.[HouseNumber] as Huisnummer + ,a.[BoxNumber] as Busnummer + ,a.[Status] as AdresStatus + ,a.[Position] as AdresPositie + ,a.[PositionMethod] as PositieGeometrieMethode + ,a.[PositionSpecification] as PositieSpecificatie + ,a.[OfficiallyAssigned] as OfficieelToegekend +FROM [wms.address].AddressWmsV2 as a +JOIN [wms.streetname].[StreetNameHelperV2] s ON a.[StreetNamePersistentLocalId] = s.[PersistentLocalId] AND a.[Removed] = 0 +JOIN [wms.municipality].[MunicipalityHelper] m ON s.[NisCode] = m.[NisCode] AND s.[Removed] = 0"); + + migrationBuilder.Sql("CREATE UNIQUE CLUSTERED INDEX IX_AdresView_ObjectId ON [wms].[AdresView] ([ObjectId])"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresVoorgesteld] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'Voorgesteld';"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresInGebruik] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'InGebruik'"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresGehistoreerd] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'Gehistoreerd'"); + + migrationBuilder.Sql(@" +CREATE VIEW [wms].[AdresAfgekeurd] WITH SCHEMABINDING AS +SELECT + [ObjectId] + ,[Id] + ,[VersieId] + ,[StraatnaamObjectId] + ,[Straatnaam] + ,[HuisnummerLabel] + ,[LabelType] + ,[LabelLengte] + ,[GemeenteObjectId] + ,[Gemeentenaam] + ,[PostinfoObjectId] + ,[VolledigAdres] + ,[Huisnummer] + ,[Busnummer] + ,[AdresStatus] + ,[AdresPositie] + ,[PositieGeometrieMethode] + ,[PositieSpecificatie] + ,[OfficieelToegekend] +FROM [wms].[AdresView] +WHERE [AdresStatus] = 'Afgekeurd'"); + } + } +}