From 84c1d6fd85f7757d558695d3263109b29700101a Mon Sep 17 00:00:00 2001 From: Mark Youngman Date: Fri, 15 Sep 2023 16:06:42 +0100 Subject: [PATCH 1/2] EES-4426 Remove MethodologyVersion.InternalReleaseNote --- .../MethodologyApprovalServiceTests.cs | 92 +- .../Methodologies/MethodologyServiceTests.cs | 22 +- .../Services/ReleaseServiceTests.cs | 16 +- ...oteFromMethodologyVersionTable.Designer.cs | 2016 +++++++++++++++++ ...lReleaseNoteFromMethodologyVersionTable.cs | 25 + .../ContentDbContextModelSnapshot.cs | 5 +- .../MethodologyApprovalService.cs | 1 - .../Methodologies/MethodologyService.cs | 32 +- .../Services/ReleaseService.cs | 1 - .../MethodologyVersionTests.cs | 2 - .../MethodologyVersion.cs | 3 - 11 files changed, 2163 insertions(+), 52 deletions(-) create mode 100644 src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.Designer.cs create mode 100644 src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.cs diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs index 8853fb9168b..344e2d73356 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs @@ -120,7 +120,6 @@ public async Task UpdateApprovalStatus_MethodologyHasImages() VerifyAllMocks(contentService, methodologyVersionRepository); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Id); - Assert.Equal("Test approval", updatedMethodologyVersion.InternalReleaseNote); Assert.Null(updatedMethodologyVersion.Published); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); Assert.Null(updatedMethodologyVersion.ScheduledWithRelease); @@ -139,6 +138,17 @@ public async Task UpdateApprovalStatus_MethodologyHasImages() Assert.Equal(Immediately, updatedMethodology.PublishingStrategy); Assert.True(updatedMethodology.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodology.Updated!.Value).Milliseconds, 0, 1500); + + var statusList = await context + .MethodologyStatus + .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) + .ToListAsync(); + var status = Assert.Single(statusList); + Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); + Assert.Equal("Test approval", status.InternalReleaseNote); + Assert.Equal(Approved, status.ApprovalStatus); + Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); + Assert.Equal(UserId, status.CreatedById); } } @@ -237,7 +247,6 @@ public async Task UpdateApprovalStatus_ApprovingMethodologyWithUnusedImages() VerifyAllMocks(contentService, imageService, methodologyVersionRepository); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Id); - Assert.Equal("Test approval", updatedMethodologyVersion.InternalReleaseNote); Assert.Null(updatedMethodologyVersion.Published); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); Assert.Null(updatedMethodologyVersion.ScheduledWithRelease); @@ -256,6 +265,17 @@ public async Task UpdateApprovalStatus_ApprovingMethodologyWithUnusedImages() Assert.Equal(Immediately, updatedMethodology.PublishingStrategy); Assert.True(updatedMethodology.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodology.Updated!.Value).Milliseconds, 0, 1500); + + var statusList = await context + .MethodologyStatus + .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) + .ToListAsync(); + var status = Assert.Single(statusList); + Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); + Assert.Equal("Test approval", status.InternalReleaseNote); + Assert.Equal(Approved, status.ApprovalStatus); + Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); + Assert.Equal(UserId, status.CreatedById); } } @@ -604,12 +624,10 @@ public async Task UpdateApprovalStatus_ApprovingUsingImmediateStrategy_NotCurren VerifyAllMocks(contentService, methodologyVersionRepository); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Id); - Assert.Equal("Test approval", updatedMethodologyVersion.InternalReleaseNote); Assert.False(updatedMethodologyVersion.Published.HasValue); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); Assert.Null(updatedMethodologyVersion.ScheduledWithRelease); Assert.Equal(request.Status, updatedMethodologyVersion.Status); - Assert.Equal(request.LatestInternalReleaseNote, updatedMethodologyVersion.InternalReleaseNote); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); } @@ -623,10 +641,20 @@ public async Task UpdateApprovalStatus_ApprovingUsingImmediateStrategy_NotCurren Assert.False(updatedMethodologyVersion.Published.HasValue); Assert.Equal(Approved, updatedMethodologyVersion.Status); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); - Assert.Equal(request.LatestInternalReleaseNote, updatedMethodologyVersion.InternalReleaseNote); Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); + + var statusList = await context + .MethodologyStatus + .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) + .ToListAsync(); + var status = Assert.Single(statusList); + Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); + Assert.Equal("Test approval", status.InternalReleaseNote); + Assert.Equal(Approved, status.ApprovalStatus); + Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); + Assert.Equal(UserId, status.CreatedById); } } @@ -702,13 +730,11 @@ public async Task UpdateApprovalStatus_ApprovingUsingImmediateStrategy() methodologyCacheService); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Id); - Assert.Equal("Test approval", updatedMethodologyVersion.InternalReleaseNote); Assert.True(updatedMethodologyVersion.Published.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Published!.Value).Milliseconds, 0, 1500); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); Assert.Null(updatedMethodologyVersion.ScheduledWithRelease); Assert.Equal(request.Status, updatedMethodologyVersion.Status); - Assert.Equal(request.LatestInternalReleaseNote, updatedMethodologyVersion.InternalReleaseNote); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Methodology.LatestPublishedVersionId); } @@ -723,10 +749,20 @@ public async Task UpdateApprovalStatus_ApprovingUsingImmediateStrategy() Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Published!.Value).Milliseconds, 0, 1500); Assert.Equal(Approved, updatedMethodologyVersion.Status); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); - Assert.Equal(request.LatestInternalReleaseNote, updatedMethodologyVersion.InternalReleaseNote); Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Methodology.LatestPublishedVersionId); + + var statusList = await context + .MethodologyStatus + .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) + .ToListAsync(); + var status = Assert.Single(statusList); + Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); + Assert.Equal("Test approval", status.InternalReleaseNote); + Assert.Equal(Approved, status.ApprovalStatus); + Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); + Assert.Equal(UserId, status.CreatedById); } } @@ -886,7 +922,6 @@ public async Task UpdateApprovalStatus_ApprovingUsingWithReleaseStrategy_NonLive VerifyAllMocks(contentService, methodologyVersionRepository); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Id); - Assert.Equal("Test approval", updatedMethodologyVersion.InternalReleaseNote); Assert.Null(updatedMethodologyVersion.Published); Assert.Equal(WithRelease, updatedMethodologyVersion.PublishingStrategy); Assert.Equal(request.Status, updatedMethodologyVersion.Status); @@ -911,6 +946,17 @@ public async Task UpdateApprovalStatus_ApprovingUsingWithReleaseStrategy_NonLive Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); + + var statusList = await context + .MethodologyStatus + .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) + .ToListAsync(); + var status = Assert.Single(statusList); + Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); + Assert.Equal("Test approval", status.InternalReleaseNote); + Assert.Equal(Approved, status.ApprovalStatus); + Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); + Assert.Equal(UserId, status.CreatedById); } } @@ -1133,7 +1179,6 @@ public async Task UpdateApprovalStatus_UnapprovingMethodology() { var methodologyVersion = new MethodologyVersion { - InternalReleaseNote = "Test approval", Published = null, PublishingStrategy = Immediately, Status = Approved, @@ -1189,7 +1234,6 @@ public async Task UpdateApprovalStatus_UnapprovingMethodology() Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Id); - Assert.Equal("A release note", updatedMethodologyVersion.InternalReleaseNote); Assert.Null(updatedMethodologyVersion.Published); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); Assert.Null(updatedMethodologyVersion.ScheduledWithRelease); @@ -1207,10 +1251,20 @@ public async Task UpdateApprovalStatus_UnapprovingMethodology() Assert.Null(updatedMethodologyVersion.Published); Assert.Equal(Draft, updatedMethodologyVersion.Status); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); - Assert.Equal("A release note", updatedMethodologyVersion.InternalReleaseNote); Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); + + var statusList = await context + .MethodologyStatus + .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) + .ToListAsync(); + var status = Assert.Single(statusList); + Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); + Assert.Equal("A release note", status.InternalReleaseNote); + Assert.Equal(Draft, status.ApprovalStatus); + Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); + Assert.Equal(UserId, status.CreatedById); } } @@ -1220,7 +1274,6 @@ public async Task UpdateApprovalStatus_SubmitDraftForHigherReview() var owningPublicationId = Guid.NewGuid(); var methodologyVersion = new MethodologyVersion { - InternalReleaseNote = "Test approval", Published = null, Status = Draft, Methodology = new Methodology @@ -1314,7 +1367,6 @@ public async Task UpdateApprovalStatus_SubmitDraftForHigherReview() Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Id); - Assert.Equal("A release note", updatedMethodologyVersion.InternalReleaseNote); Assert.Null(updatedMethodologyVersion.Published); Assert.Equal(Immediately, updatedMethodologyVersion.PublishingStrategy); Assert.Null(updatedMethodologyVersion.ScheduledWithRelease); @@ -1331,10 +1383,20 @@ public async Task UpdateApprovalStatus_SubmitDraftForHigherReview() Assert.Null(updatedMethodologyVersion.Published); Assert.Equal(HigherLevelReview, updatedMethodologyVersion.Status); - Assert.Equal("A release note", updatedMethodologyVersion.InternalReleaseNote); Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); + + var statusList = await context + .MethodologyStatus + .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) + .ToListAsync(); + var status = Assert.Single(statusList); + Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); + Assert.Equal("A release note", status.InternalReleaseNote); + Assert.Equal(HigherLevelReview, status.ApprovalStatus); + Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); + Assert.Equal(UserId, status.CreatedById); } } diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs index c0bf279e81b..788c0112727 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs @@ -589,13 +589,19 @@ public async Task GetAdoptableMethodologies() var methodologyVersion = new MethodologyVersion { Methodology = methodology, - InternalReleaseNote = "Test approval", Published = null, PublishingStrategy = Immediately, Status = Draft, AlternativeTitle = "Alternative title" }; + var methodologyStatus = new MethodologyStatus + { + MethodologyVersion = methodologyVersion, + InternalReleaseNote = "Test approval", + ApprovalStatus = Approved, + }; + var adoptingPublication = new Publication(); var contentDbContextId = Guid.NewGuid().ToString(); @@ -605,6 +611,7 @@ public async Task GetAdoptableMethodologies() await context.Publications.AddRangeAsync(publication, adoptingPublication); await context.Methodologies.AddAsync(methodology); await context.MethodologyVersions.AddAsync(methodologyVersion); + await context.MethodologyStatus.AddAsync(methodologyStatus); await context.SaveChangesAsync(); } @@ -660,7 +667,6 @@ public async Task GetAdoptableMethodologies_NoUnpublishedMethodologies() { new() { - InternalReleaseNote = "Test approval", Published = null, PublishingStrategy = Immediately, Status = Draft, @@ -794,7 +800,6 @@ public async Task GetMethodology() var methodologyVersion = new MethodologyVersion { Methodology = methodology, - InternalReleaseNote = "Test approval", Published = new DateTime(2020, 5, 25), PublishingStrategy = WithRelease, ScheduledWithRelease = new Release @@ -807,6 +812,12 @@ public async Task GetMethodology() AlternativeTitle = "Alternative title" }; + var methodologyStatus = new MethodologyStatus + { + MethodologyVersion = methodologyVersion, + InternalReleaseNote = "Test approval", + }; + var contentDbContextId = Guid.NewGuid().ToString(); await using (var context = InMemoryApplicationDbContext(contentDbContextId)) @@ -814,6 +825,7 @@ public async Task GetMethodology() await context.Methodologies.AddAsync(methodology); await context.Publications.AddRangeAsync(owningPublication, adoptingPublication1, adoptingPublication2); await context.MethodologyVersions.AddAsync(methodologyVersion); + await context.MethodologyStatus.AddAsync(methodologyStatus); await context.SaveChangesAsync(); } @@ -1127,7 +1139,6 @@ public async Task ListLatestMethodologyVersions() Id = Guid.NewGuid(), Version = 0, AlternativeTitle = "Methodology 1 Version 1", - InternalReleaseNote = "Methodology 1 Version 1 release note", Published = new DateTime(2021, 1, 1), Status = Approved } @@ -1143,7 +1154,6 @@ public async Task ListLatestMethodologyVersions() Id = Guid.NewGuid(), Version = 0, AlternativeTitle = "Methodology 2 Version 1", - InternalReleaseNote = "Methodology 2 Version 1 release note", Published = new DateTime(2021, 1, 1), Status = Approved }, @@ -1167,7 +1177,6 @@ public async Task ListLatestMethodologyVersions() Id = Guid.NewGuid(), Version = 0, AlternativeTitle = "Methodology 3 Version 1", - InternalReleaseNote = "Methodology 3 Version 1 release note", Published = new DateTime(2021, 1, 1), Status = Approved }, @@ -1176,7 +1185,6 @@ public async Task ListLatestMethodologyVersions() Id = Guid.NewGuid(), Version = 1, AlternativeTitle = "Methodology 3 Version 2", - InternalReleaseNote = "Methodology 3 Version 2 release note", Published = new DateTime(2022, 1, 1), Status = Approved } diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/ReleaseServiceTests.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/ReleaseServiceTests.cs index 77811cd6020..a61588d2965 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/ReleaseServiceTests.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/ReleaseServiceTests.cs @@ -1135,7 +1135,6 @@ public async Task DeleteRelease() { OwningPublicationTitle = "Methodology scheduled with this Release" }, - InternalReleaseNote = "A note" }; // This Methodology has nothing to do with the Release being deleted. @@ -1146,8 +1145,8 @@ public async Task DeleteRelease() ScheduledWithReleaseId = Guid.NewGuid(), Methodology = new Methodology { - OwningPublicationTitle = "Methodology scheduled with another Release" - } + OwningPublicationTitle = "Methodology scheduled with another Release", + }, }; var userReleaseRole = new UserReleaseRole @@ -1313,13 +1312,12 @@ public async Task DeleteRelease() // Assert that Methodologies that were scheduled to go out with this Release are no longer scheduled // to do so - var retrievedMethodology = context.MethodologyVersions.Single(m => m.Id == methodologyScheduledWithRelease.Id); - Assert.True(retrievedMethodology.ScheduledForPublishingImmediately); - Assert.Null(retrievedMethodology.ScheduledWithReleaseId); - Assert.Null(retrievedMethodology.InternalReleaseNote); - Assert.Equal(MethodologyApprovalStatus.Draft, retrievedMethodology.Status); + var retrievedMethodologyVersion = context.MethodologyVersions.Single(m => m.Id == methodologyScheduledWithRelease.Id); + Assert.True(retrievedMethodologyVersion.ScheduledForPublishingImmediately); + Assert.Null(retrievedMethodologyVersion.ScheduledWithReleaseId); + Assert.Equal(MethodologyApprovalStatus.Draft, retrievedMethodologyVersion.Status); Assert.InRange(DateTime.UtcNow - .Subtract(retrievedMethodology.Updated!.Value).Milliseconds, 0, 1500); + .Subtract(retrievedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); // Assert that Methodologies that were scheduled to go out with other Releases remain unaffected var unrelatedMethodology = context.MethodologyVersions.Single(m => m.Id == methodologyScheduledWithAnotherRelease.Id); diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.Designer.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.Designer.cs new file mode 100644 index 00000000000..71f118902ab --- /dev/null +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.Designer.cs @@ -0,0 +1,2016 @@ +// +using System; +using GovUk.Education.ExploreEducationStatistics.Content.Model.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace GovUk.Education.ExploreEducationStatistics.Admin.Migrations.ContentMigrations +{ + [DbContext(typeof(ContentDbContext))] + [Migration("20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable")] + partial class EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "6.0.21") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ContentBlockId") + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("LegacyCreatedBy") + .HasColumnType("nvarchar(max)"); + + b.Property("Resolved") + .HasColumnType("datetime2"); + + b.Property("ResolvedById") + .HasColumnType("uniqueidentifier"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("ContentBlockId"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ResolvedById"); + + b.ToTable("Comment"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Contact", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ContactName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ContactTelNo") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TeamEmail") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TeamName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Contacts"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ContentSectionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("Locked") + .HasColumnType("datetime2"); + + b.Property("LockedById") + .IsConcurrencyToken() + .HasColumnType("uniqueidentifier"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("ContentSectionId"); + + b.HasIndex("LockedById"); + + b.HasIndex("Type"); + + b.ToTable("ContentBlock", (string)null); + + b.HasDiscriminator("Type").HasValue("ContentBlock"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentSection", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Caption") + .HasColumnType("nvarchar(max)"); + + b.Property("Heading") + .HasColumnType("nvarchar(max)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.HasKey("Id"); + + b.HasIndex("Type"); + + b.ToTable("ContentSections"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImport", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("ExpectedImportedRows") + .HasColumnType("int"); + + b.Property("FileId") + .HasColumnType("uniqueidentifier"); + + b.Property("GeographicLevels") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ImportedRows") + .HasColumnType("int"); + + b.Property("LastProcessedRowIndex") + .HasColumnType("int"); + + b.Property("MetaFileId") + .HasColumnType("uniqueidentifier"); + + b.Property("StagePercentageComplete") + .HasColumnType("int"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("TotalRows") + .HasColumnType("int"); + + b.Property("ZipFileId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("FileId") + .IsUnique(); + + b.HasIndex("MetaFileId") + .IsUnique(); + + b.HasIndex("ZipFileId") + .IsUnique() + .HasFilter("[ZipFileId] IS NOT NULL"); + + b.ToTable("DataImports"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImportError", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("DataImportId") + .HasColumnType("uniqueidentifier"); + + b.Property("Message") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("DataImportId"); + + b.ToTable("DataImportErrors"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.EmbedBlock", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.Property("Url") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("EmbedBlocks"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.FeaturedTable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("DataBlockId") + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.Property("UpdatedById") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DataBlockId") + .IsUnique(); + + b.HasIndex("ReleaseId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("FeaturedTables"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.File", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ContentLength") + .HasColumnType("bigint"); + + b.Property("ContentType") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("Filename") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReplacedById") + .HasColumnType("uniqueidentifier"); + + b.Property("ReplacingId") + .HasColumnType("uniqueidentifier"); + + b.Property("RootPath") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ReplacedById") + .IsUnique() + .HasFilter("[ReplacedById] IS NOT NULL"); + + b.HasIndex("ReplacingId") + .IsUnique() + .HasFilter("[ReplacingId] IS NOT NULL"); + + b.HasIndex("SourceId"); + + b.HasIndex("Type"); + + b.ToTable("Files"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.FreeTextRank", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Rank") + .HasColumnType("int"); + + b.ToTable((string)null); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.GlossaryEntry", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Body") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.ToTable("GlossaryEntries"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatistic", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("GuidanceText") + .HasColumnType("nvarchar(max)"); + + b.Property("GuidanceTitle") + .HasColumnType("nvarchar(max)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Trend") + .HasColumnType("nvarchar(max)"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.Property("UpdatedById") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ReleaseId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("KeyStatistics"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.LegacyRelease", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("PublicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("Url") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("PublicationId"); + + b.ToTable("LegacyReleases"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Methodology", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("LatestPublishedVersionId") + .HasColumnType("uniqueidentifier"); + + b.Property("OwningPublicationTitle") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("LatestPublishedVersionId") + .IsUnique() + .HasFilter("[LatestPublishedVersionId] IS NOT NULL"); + + b.ToTable("Methodologies"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("FileId") + .HasColumnType("uniqueidentifier"); + + b.Property("MethodologyVersionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("FileId"); + + b.HasIndex("MethodologyVersionId"); + + b.ToTable("MethodologyFiles"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyNote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayDate") + .HasColumnType("datetime2"); + + b.Property("MethodologyVersionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.Property("UpdatedById") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("MethodologyVersionId"); + + b.HasIndex("UpdatedById"); + + b.ToTable("MethodologyNotes"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyStatus", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApprovalStatus") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("InternalReleaseNote") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodologyVersionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("MethodologyVersionId"); + + b.ToTable("MethodologyStatus"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AlternativeTitle") + .HasColumnType("nvarchar(max)"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("MethodologyId") + .HasColumnType("uniqueidentifier"); + + b.Property("PreviousVersionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Published") + .HasColumnType("datetime2"); + + b.Property("PublishingStrategy") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ScheduledWithReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Status") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("MethodologyId"); + + b.HasIndex("PreviousVersionId"); + + b.HasIndex("ScheduledWithReleaseId"); + + b.ToTable("MethodologyVersions"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersionContent", b => + { + b.Property("MethodologyVersionId") + .HasColumnType("uniqueidentifier"); + + b.Property("Annexes") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("MethodologyVersionId"); + + b.ToTable("MethodologyVersions", (string)null); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Permalink", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("DataSetTitle") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("MigratedFromLegacy") + .HasColumnType("bit"); + + b.Property("PublicationTitle") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("SubjectId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ReleaseId"); + + b.HasIndex("SubjectId"); + + b.ToTable("Permalinks"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ContactId") + .HasColumnType("uniqueidentifier"); + + b.Property("LatestPublishedReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Slug") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Summary") + .IsRequired() + .HasMaxLength(160) + .HasColumnType("nvarchar(160)"); + + b.Property("SupersededById") + .HasColumnType("uniqueidentifier"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("TopicId") + .HasColumnType("uniqueidentifier"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("ContactId"); + + b.HasIndex("LatestPublishedReleaseId") + .IsUnique() + .HasFilter("[LatestPublishedReleaseId] IS NOT NULL"); + + b.HasIndex("SupersededById"); + + b.HasIndex("TopicId"); + + b.ToTable("Publications"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.PublicationMethodology", b => + { + b.Property("PublicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("MethodologyId") + .HasColumnType("uniqueidentifier"); + + b.Property("Owner") + .HasColumnType("bit"); + + b.HasKey("PublicationId", "MethodologyId"); + + b.HasIndex("MethodologyId"); + + b.ToTable("PublicationMethodologies"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApprovalStatus") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("DataGuidance") + .HasColumnType("nvarchar(max)"); + + b.Property("NextReleaseDate") + .HasColumnType("nvarchar(max)"); + + b.Property("NotifiedOn") + .HasColumnType("datetime2"); + + b.Property("NotifySubscribers") + .HasColumnType("bit"); + + b.Property("PreReleaseAccessList") + .HasColumnType("nvarchar(max)"); + + b.Property("PreviousVersionId") + .HasColumnType("uniqueidentifier"); + + b.Property("PublicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("PublishScheduled") + .HasColumnType("datetime2"); + + b.Property("Published") + .HasColumnType("datetime2"); + + b.Property("RelatedInformation") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReleaseName") + .HasColumnType("nvarchar(max)"); + + b.Property("Slug") + .HasColumnType("nvarchar(max)"); + + b.Property("SoftDeleted") + .HasColumnType("bit"); + + b.Property("TimePeriodCoverage") + .IsRequired() + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("Type") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.Property("UpdatePublishedDate") + .HasColumnType("bit"); + + b.Property("Version") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("PublicationId"); + + b.HasIndex("Type"); + + b.HasIndex("PreviousVersionId", "Version"); + + b.ToTable("Releases"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseContentBlock", b => + { + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("ContentBlockId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("ReleaseId", "ContentBlockId"); + + b.HasIndex("ContentBlockId"); + + b.ToTable("ReleaseContentBlocks"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseContentSection", b => + { + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("ContentSectionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("ReleaseId", "ContentSectionId"); + + b.HasIndex("ContentSectionId") + .IsUnique(); + + b.ToTable("ReleaseContentSections"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseFile", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("FileId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasColumnType("nvarchar(max)"); + + b.Property("Order") + .HasColumnType("int"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Summary") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("FileId"); + + b.HasIndex("ReleaseId"); + + b.ToTable("ReleaseFiles"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseStatus", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApprovalStatus") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("InternalReleaseNote") + .HasColumnType("nvarchar(max)"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ReleaseId"); + + b.ToTable("ReleaseStatus"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Theme", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Slug") + .HasColumnType("nvarchar(max)"); + + b.Property("Summary") + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Themes"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Topic", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Slug") + .HasColumnType("nvarchar(max)"); + + b.Property("ThemeId") + .HasColumnType("uniqueidentifier"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ThemeId"); + + b.ToTable("Topics"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Update", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("On") + .HasColumnType("datetime2"); + + b.Property("Reason") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ReleaseId"); + + b.ToTable("Update"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Email") + .HasColumnType("nvarchar(max)"); + + b.Property("FirstName") + .HasColumnType("nvarchar(max)"); + + b.Property("LastName") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserPublicationInvite", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PublicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("PublicationId"); + + b.ToTable("UserPublicationInvites"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserPublicationRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("Deleted") + .HasColumnType("datetime2"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier"); + + b.Property("PublicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("PublicationId"); + + b.HasIndex("UserId"); + + b.ToTable("UserPublicationRoles"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserReleaseInvite", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("Email") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("EmailSent") + .HasColumnType("bit"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SoftDeleted") + .HasColumnType("bit"); + + b.Property("Updated") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("ReleaseId"); + + b.ToTable("UserReleaseInvites"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserReleaseRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Created") + .HasColumnType("datetime2"); + + b.Property("CreatedById") + .HasColumnType("uniqueidentifier"); + + b.Property("Deleted") + .HasColumnType("datetime2"); + + b.Property("DeletedById") + .HasColumnType("uniqueidentifier"); + + b.Property("ReleaseId") + .HasColumnType("uniqueidentifier"); + + b.Property("Role") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SoftDeleted") + .HasColumnType("bit"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CreatedById"); + + b.HasIndex("DeletedById"); + + b.HasIndex("ReleaseId"); + + b.HasIndex("UserId"); + + b.ToTable("UserReleaseRoles"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.DataBlock", b => + { + b.HasBaseType("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock"); + + b.Property("Charts") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("DataBlock_Charts"); + + b.Property("Heading") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("DataBlock_Heading"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Query") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("DataBlock_Query"); + + b.Property("Source") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Table") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("DataBlock_Table"); + + b.HasDiscriminator().HasValue("DataBlock"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.EmbedBlockLink", b => + { + b.HasBaseType("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock"); + + b.Property("EmbedBlockId") + .HasColumnType("uniqueidentifier") + .HasColumnName("EmbedBlockId"); + + b.HasIndex("EmbedBlockId") + .IsUnique() + .HasFilter("[EmbedBlockId] IS NOT NULL"); + + b.HasDiscriminator().HasValue("EmbedBlockLink"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.HtmlBlock", b => + { + b.HasBaseType("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock"); + + b.Property("Body") + .IsRequired() + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("nvarchar(max)") + .HasColumnName("Body"); + + b.HasDiscriminator().HasValue("HtmlBlock"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatisticDataBlock", b => + { + b.HasBaseType("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatistic"); + + b.Property("DataBlockId") + .HasColumnType("uniqueidentifier"); + + b.HasIndex("DataBlockId"); + + b.ToTable("KeyStatisticsDataBlock", (string)null); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatisticText", b => + { + b.HasBaseType("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatistic"); + + b.Property("Statistic") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.ToTable("KeyStatisticsText", (string)null); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MarkDownBlock", b => + { + b.HasBaseType("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock"); + + b.Property("Body") + .IsRequired() + .ValueGeneratedOnUpdateSometimes() + .HasColumnType("nvarchar(max)") + .HasColumnName("Body"); + + b.HasDiscriminator().HasValue("MarkDownBlock"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Comment", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock", "ContentBlock") + .WithMany("Comments") + .HasForeignKey("ContentBlockId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "ResolvedBy") + .WithMany() + .HasForeignKey("ResolvedById"); + + b.Navigation("ContentBlock"); + + b.Navigation("CreatedBy"); + + b.Navigation("ResolvedBy"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentSection", "ContentSection") + .WithMany("Content") + .HasForeignKey("ContentSectionId"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "LockedBy") + .WithMany() + .HasForeignKey("LockedById"); + + b.Navigation("ContentSection"); + + b.Navigation("LockedBy"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImport", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "File") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImport", "FileId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "MetaFile") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImport", "MetaFileId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "ZipFile") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImport", "ZipFileId") + .OnDelete(DeleteBehavior.Restrict); + + b.Navigation("File"); + + b.Navigation("MetaFile"); + + b.Navigation("ZipFile"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImportError", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImport", "DataImport") + .WithMany("Errors") + .HasForeignKey("DataImportId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DataImport"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.FeaturedTable", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.DataBlock", "DataBlock") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.FeaturedTable", "DataBlockId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany("FeaturedTables") + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById"); + + b.Navigation("CreatedBy"); + + b.Navigation("DataBlock"); + + b.Navigation("Release"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.File", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "ReplacedBy") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "ReplacedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "Replacing") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "ReplacingId"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "Source") + .WithMany() + .HasForeignKey("SourceId"); + + b.Navigation("CreatedBy"); + + b.Navigation("ReplacedBy"); + + b.Navigation("Replacing"); + + b.Navigation("Source"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.GlossaryEntry", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("CreatedBy"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatistic", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany("KeyStatistics") + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById"); + + b.Navigation("CreatedBy"); + + b.Navigation("Release"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.LegacyRelease", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", "Publication") + .WithMany("LegacyReleases") + .HasForeignKey("PublicationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Publication"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Methodology", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", "LatestPublishedVersion") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.Methodology", "LatestPublishedVersionId"); + + b.Navigation("LatestPublishedVersion"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyFile", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "File") + .WithMany() + .HasForeignKey("FileId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", "MethodologyVersion") + .WithMany() + .HasForeignKey("MethodologyVersionId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("File"); + + b.Navigation("MethodologyVersion"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyNote", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", "MethodologyVersion") + .WithMany("Notes") + .HasForeignKey("MethodologyVersionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "UpdatedBy") + .WithMany() + .HasForeignKey("UpdatedById") + .OnDelete(DeleteBehavior.NoAction); + + b.Navigation("CreatedBy"); + + b.Navigation("MethodologyVersion"); + + b.Navigation("UpdatedBy"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyStatus", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", "MethodologyVersion") + .WithMany() + .HasForeignKey("MethodologyVersionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("MethodologyVersion"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Methodology", "Methodology") + .WithMany("Versions") + .HasForeignKey("MethodologyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", "PreviousVersion") + .WithMany() + .HasForeignKey("PreviousVersionId"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "ScheduledWithRelease") + .WithMany() + .HasForeignKey("ScheduledWithReleaseId"); + + b.Navigation("CreatedBy"); + + b.Navigation("Methodology"); + + b.Navigation("PreviousVersion"); + + b.Navigation("ScheduledWithRelease"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersionContent", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", null) + .WithOne("MethodologyContent") + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersionContent", "MethodologyVersionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Contact", "Contact") + .WithMany() + .HasForeignKey("ContactId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "LatestPublishedRelease") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", "LatestPublishedReleaseId"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", "SupersededBy") + .WithMany() + .HasForeignKey("SupersededById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Topic", "Topic") + .WithMany("Publications") + .HasForeignKey("TopicId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("GovUk.Education.ExploreEducationStatistics.Content.Model.ExternalMethodology", "ExternalMethodology", b1 => + { + b1.Property("PublicationId") + .HasColumnType("uniqueidentifier"); + + b1.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b1.Property("Url") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b1.HasKey("PublicationId"); + + b1.ToTable("ExternalMethodology", (string)null); + + b1.WithOwner() + .HasForeignKey("PublicationId"); + }); + + b.Navigation("Contact"); + + b.Navigation("ExternalMethodology"); + + b.Navigation("LatestPublishedRelease"); + + b.Navigation("SupersededBy"); + + b.Navigation("Topic"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.PublicationMethodology", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Methodology", "Methodology") + .WithMany("Publications") + .HasForeignKey("MethodologyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", "Publication") + .WithMany("Methodologies") + .HasForeignKey("PublicationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Methodology"); + + b.Navigation("Publication"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "PreviousVersion") + .WithMany() + .HasForeignKey("PreviousVersionId") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", "Publication") + .WithMany("Releases") + .HasForeignKey("PublicationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("PreviousVersion"); + + b.Navigation("Publication"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseContentBlock", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock", "ContentBlock") + .WithMany() + .HasForeignKey("ContentBlockId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany("ContentBlocks") + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ContentBlock"); + + b.Navigation("Release"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseContentSection", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentSection", "ContentSection") + .WithOne("Release") + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseContentSection", "ContentSectionId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany("Content") + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ContentSection"); + + b.Navigation("Release"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseFile", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.File", "File") + .WithMany() + .HasForeignKey("FileId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany() + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("File"); + + b.Navigation("Release"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ReleaseStatus", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany("ReleaseStatuses") + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Release"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Topic", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Theme", "Theme") + .WithMany("Topics") + .HasForeignKey("ThemeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Theme"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Update", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany("Updates") + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Release"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserPublicationInvite", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", "Publication") + .WithMany() + .HasForeignKey("PublicationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Publication"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserPublicationRole", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.NoAction); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "DeletedBy") + .WithMany() + .HasForeignKey("DeletedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", "Publication") + .WithMany() + .HasForeignKey("PublicationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("Publication"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserReleaseInvite", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany() + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("Release"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.UserReleaseRole", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "DeletedBy") + .WithMany() + .HasForeignKey("DeletedById"); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", "Release") + .WithMany() + .HasForeignKey("ReleaseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.User", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("CreatedBy"); + + b.Navigation("DeletedBy"); + + b.Navigation("Release"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.EmbedBlockLink", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.EmbedBlock", "EmbedBlock") + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.EmbedBlockLink", "EmbedBlockId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EmbedBlock"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatisticDataBlock", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.DataBlock", "DataBlock") + .WithMany() + .HasForeignKey("DataBlockId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatistic", null) + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatisticDataBlock", "Id") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.Navigation("DataBlock"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatisticText", b => + { + b.HasOne("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatistic", null) + .WithOne() + .HasForeignKey("GovUk.Education.ExploreEducationStatistics.Content.Model.KeyStatisticText", "Id") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentBlock", b => + { + b.Navigation("Comments"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.ContentSection", b => + { + b.Navigation("Content"); + + b.Navigation("Release"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.DataImport", b => + { + b.Navigation("Errors"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Methodology", b => + { + b.Navigation("Publications"); + + b.Navigation("Versions"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.MethodologyVersion", b => + { + b.Navigation("MethodologyContent") + .IsRequired(); + + b.Navigation("Notes"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Publication", b => + { + b.Navigation("LegacyReleases"); + + b.Navigation("Methodologies"); + + b.Navigation("Releases"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Release", b => + { + b.Navigation("Content"); + + b.Navigation("ContentBlocks"); + + b.Navigation("FeaturedTables"); + + b.Navigation("KeyStatistics"); + + b.Navigation("ReleaseStatuses"); + + b.Navigation("Updates"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Theme", b => + { + b.Navigation("Topics"); + }); + + modelBuilder.Entity("GovUk.Education.ExploreEducationStatistics.Content.Model.Topic", b => + { + b.Navigation("Publications"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.cs new file mode 100644 index 00000000000..cfecd418801 --- /dev/null +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/20230915150510_EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable.cs @@ -0,0 +1,25 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace GovUk.Education.ExploreEducationStatistics.Admin.Migrations.ContentMigrations +{ + public partial class EES4426_RemoveInternalReleaseNoteFromMethodologyVersionTable : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "InternalReleaseNote", + table: "MethodologyVersions"); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "InternalReleaseNote", + table: "MethodologyVersions", + type: "nvarchar(max)", + nullable: true); + } + } +} diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/ContentDbContextModelSnapshot.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/ContentDbContextModelSnapshot.cs index fd4dd838a19..74e233d709e 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/ContentDbContextModelSnapshot.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin/Migrations/ContentMigrations/ContentDbContextModelSnapshot.cs @@ -17,7 +17,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "6.0.20") + .HasAnnotation("ProductVersion", "6.0.21") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder, 1L, 1); @@ -623,9 +623,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("CreatedById") .HasColumnType("uniqueidentifier"); - b.Property("InternalReleaseNote") - .HasColumnType("nvarchar(max)"); - b.Property("MethodologyId") .HasColumnType("uniqueidentifier"); diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyApprovalService.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyApprovalService.cs index 0ee7c01fe17..bc4f11eb37a 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyApprovalService.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyApprovalService.cs @@ -95,7 +95,6 @@ private async Task> UpdateStatus( methodologyVersion.ScheduledWithReleaseId = WithRelease == request.PublishingStrategy ? request.WithReleaseId : null; - methodologyVersion.InternalReleaseNote = request.LatestInternalReleaseNote; methodologyVersion.Updated = DateTime.UtcNow; diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs index 1b37f64ff21..6130e5f9b94 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs @@ -232,42 +232,44 @@ public async Task> UpdateMetho public async Task BuildMethodologyVersionViewModel( MethodologyVersion methodologyVersion) { - var loadedMethodology = _context.AssertEntityLoaded(methodologyVersion); - await _context.Entry(loadedMethodology) + var loadedMethodologyVersion = _context.AssertEntityLoaded(methodologyVersion); + await _context.Entry(loadedMethodologyVersion) .Reference(m => m.Methodology) .Query() .Include(m => m.Publications) .ThenInclude(p => p.Publication) .LoadAsync(); - var publicationLinks = loadedMethodology.Methodology.Publications; + var publicationLinks = loadedMethodologyVersion.Methodology.Publications; var owningPublication = BuildPublicationViewModel(publicationLinks.Single(pm => pm.Owner)); var otherPublications = publicationLinks.Where(pm => !pm.Owner) .Select(BuildPublicationViewModel) .OrderBy(model => model.Title) .ToList(); - var viewModel = _mapper.Map(loadedMethodology); + var viewModel = _mapper.Map(loadedMethodologyVersion); + + viewModel.InternalReleaseNote = await GetLatestInternalNote(loadedMethodologyVersion); viewModel.OwningPublication = owningPublication; viewModel.OtherPublications = otherPublications; - if (loadedMethodology.ScheduledForPublishingWithRelease) + if (loadedMethodologyVersion.ScheduledForPublishingWithRelease) { - await _context.Entry(loadedMethodology) + await _context.Entry(loadedMethodologyVersion) .Reference(m => m.ScheduledWithRelease) .LoadAsync(); - if (loadedMethodology.ScheduledWithRelease != null) + if (loadedMethodologyVersion.ScheduledWithRelease != null) { - await _context.Entry(loadedMethodology.ScheduledWithRelease) + await _context.Entry(loadedMethodologyVersion.ScheduledWithRelease) .Reference(r => r!.Publication) .LoadAsync(); var title = - $"{loadedMethodology.ScheduledWithRelease.Publication.Title} - {loadedMethodology.ScheduledWithRelease.Title}"; + $"{loadedMethodologyVersion.ScheduledWithRelease.Publication.Title} - {loadedMethodologyVersion.ScheduledWithRelease.Title}"; viewModel.ScheduledWithRelease = new IdTitleViewModel( - loadedMethodology.ScheduledWithRelease.Id, + loadedMethodologyVersion.ScheduledWithRelease.Id, title); } } @@ -425,6 +427,16 @@ private async Task> DeleteVersion(MethodologyVersion }); } + private async Task GetLatestInternalNote(MethodologyVersion methodologyVersion) + { + // NOTE: Gets latest internal note for this version, not for the entire methodology + return await _context.MethodologyStatus + .Where(ms => methodologyVersion.Id == ms.MethodologyVersionId) + .OrderByDescending(ms => ms.Created) + .Select(ms => ms.InternalReleaseNote) + .FirstOrDefaultAsync(); + } + private async Task DeleteMethodologyIfOrphaned(MethodologyVersion methodologyVersion) { var methodology = await _context diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/ReleaseService.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/ReleaseService.cs index 2aa0bef88cc..f39a329a719 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/ReleaseService.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/ReleaseService.cs @@ -232,7 +232,6 @@ public Task> DeleteRelease(Guid releaseId) m.Status = Draft; m.ScheduledWithRelease = null; m.ScheduledWithReleaseId = null; - m.InternalReleaseNote = null; m.Updated = DateTime.UtcNow; }); diff --git a/src/GovUk.Education.ExploreEducationStatistics.Content.Model.Tests/MethodologyVersionTests.cs b/src/GovUk.Education.ExploreEducationStatistics.Content.Model.Tests/MethodologyVersionTests.cs index edc1532db5b..4744b132e27 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Content.Model.Tests/MethodologyVersionTests.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Content.Model.Tests/MethodologyVersionTests.cs @@ -181,7 +181,6 @@ public void CreateMethodologyAmendment_ClonesBasicFields() // general fields Id = Guid.NewGuid(), AlternativeTitle = "Alternative Title", - InternalReleaseNote = "Internal Release Note", // creation and update fields Created = DateTime.Today.AddDays(-2), @@ -218,7 +217,6 @@ public void CreateMethodologyAmendment_ClonesBasicFields() Assert.NotEqual(Guid.Empty, amendment.Id); Assert.NotEqual(originalVersion.Id, amendment.Id); Assert.Equal(originalVersion.AlternativeTitle, amendment.AlternativeTitle); - Assert.Null(amendment.InternalReleaseNote); // Check creation and update fields. Assert.Equal(creationTime, amendment.Created); diff --git a/src/GovUk.Education.ExploreEducationStatistics.Content.Model/MethodologyVersion.cs b/src/GovUk.Education.ExploreEducationStatistics.Content.Model/MethodologyVersion.cs index 8f7653beaee..eb9b869f70e 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Content.Model/MethodologyVersion.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Content.Model/MethodologyVersion.cs @@ -41,8 +41,6 @@ public class MethodologyVersion public List Notes { get; set; } = new(); - public string? InternalReleaseNote { get; set; } - public Methodology Methodology { get; set; } = null!; public Guid MethodologyId { get; set; } @@ -109,7 +107,6 @@ public MethodologyVersion CreateMethodologyAmendment(DateTime createdDate, Guid copy.ScheduledWithRelease = null; copy.ScheduledWithReleaseId = null; copy.Methodology = null!; - copy.InternalReleaseNote = null; copy.MethodologyContent = MethodologyContent.Clone(createdDate); From 4f8c705350b99e8034b8577329a7cb77b05cb483 Mon Sep 17 00:00:00 2001 From: Mark Youngman Date: Mon, 18 Sep 2023 15:34:19 +0100 Subject: [PATCH 2/2] EES-4426 Changes in response to PR comments --- .../MethodologyApprovalServiceTests.cs | 79 +------------------ .../Methodologies/MethodologyServiceTests.cs | 1 + .../Methodologies/MethodologyService.cs | 6 +- 3 files changed, 5 insertions(+), 81 deletions(-) diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs index 344e2d73356..4619fff844b 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyApprovalServiceTests.cs @@ -138,17 +138,6 @@ public async Task UpdateApprovalStatus_MethodologyHasImages() Assert.Equal(Immediately, updatedMethodology.PublishingStrategy); Assert.True(updatedMethodology.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodology.Updated!.Value).Milliseconds, 0, 1500); - - var statusList = await context - .MethodologyStatus - .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) - .ToListAsync(); - var status = Assert.Single(statusList); - Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); - Assert.Equal("Test approval", status.InternalReleaseNote); - Assert.Equal(Approved, status.ApprovalStatus); - Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); - Assert.Equal(UserId, status.CreatedById); } } @@ -265,17 +254,6 @@ public async Task UpdateApprovalStatus_ApprovingMethodologyWithUnusedImages() Assert.Equal(Immediately, updatedMethodology.PublishingStrategy); Assert.True(updatedMethodology.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodology.Updated!.Value).Milliseconds, 0, 1500); - - var statusList = await context - .MethodologyStatus - .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) - .ToListAsync(); - var status = Assert.Single(statusList); - Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); - Assert.Equal("Test approval", status.InternalReleaseNote); - Assert.Equal(Approved, status.ApprovalStatus); - Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); - Assert.Equal(UserId, status.CreatedById); } } @@ -644,17 +622,6 @@ public async Task UpdateApprovalStatus_ApprovingUsingImmediateStrategy_NotCurren Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); - - var statusList = await context - .MethodologyStatus - .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) - .ToListAsync(); - var status = Assert.Single(statusList); - Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); - Assert.Equal("Test approval", status.InternalReleaseNote); - Assert.Equal(Approved, status.ApprovalStatus); - Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); - Assert.Equal(UserId, status.CreatedById); } } @@ -752,17 +719,6 @@ public async Task UpdateApprovalStatus_ApprovingUsingImmediateStrategy() Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Equal(methodologyVersion.Id, updatedMethodologyVersion.Methodology.LatestPublishedVersionId); - - var statusList = await context - .MethodologyStatus - .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) - .ToListAsync(); - var status = Assert.Single(statusList); - Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); - Assert.Equal("Test approval", status.InternalReleaseNote); - Assert.Equal(Approved, status.ApprovalStatus); - Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); - Assert.Equal(UserId, status.CreatedById); } } @@ -946,17 +902,6 @@ public async Task UpdateApprovalStatus_ApprovingUsingWithReleaseStrategy_NonLive Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); - - var statusList = await context - .MethodologyStatus - .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) - .ToListAsync(); - var status = Assert.Single(statusList); - Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); - Assert.Equal("Test approval", status.InternalReleaseNote); - Assert.Equal(Approved, status.ApprovalStatus); - Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); - Assert.Equal(UserId, status.CreatedById); } } @@ -1175,7 +1120,7 @@ public async Task UpdateApprovalStatus_ApprovingUsingWithReleaseStrategy_Release } [Fact] - public async Task UpdateApprovalStatus_UnapprovingMethodology() + public async Task UpdateApprovalStatus_MovingApprovedMethodologyToDraft() { var methodologyVersion = new MethodologyVersion { @@ -1254,17 +1199,6 @@ public async Task UpdateApprovalStatus_UnapprovingMethodology() Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); - - var statusList = await context - .MethodologyStatus - .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) - .ToListAsync(); - var status = Assert.Single(statusList); - Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); - Assert.Equal("A release note", status.InternalReleaseNote); - Assert.Equal(Draft, status.ApprovalStatus); - Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); - Assert.Equal(UserId, status.CreatedById); } } @@ -1386,17 +1320,6 @@ public async Task UpdateApprovalStatus_SubmitDraftForHigherReview() Assert.True(updatedMethodologyVersion.Updated.HasValue); Assert.InRange(DateTime.UtcNow.Subtract(updatedMethodologyVersion.Updated!.Value).Milliseconds, 0, 1500); Assert.Null(updatedMethodologyVersion.Methodology.LatestPublishedVersionId); - - var statusList = await context - .MethodologyStatus - .Where(ms => ms.MethodologyVersionId == methodologyVersion.Id) - .ToListAsync(); - var status = Assert.Single(statusList); - Assert.Equal(methodologyVersion.Id, status.MethodologyVersionId); - Assert.Equal("A release note", status.InternalReleaseNote); - Assert.Equal(HigherLevelReview, status.ApprovalStatus); - Assert.InRange(DateTime.UtcNow.Subtract(status.Created!.Value).Milliseconds, 0, 1500); - Assert.Equal(UserId, status.CreatedById); } } diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs index 788c0112727..c4faff6a4f9 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/Methodologies/MethodologyServiceTests.cs @@ -816,6 +816,7 @@ public async Task GetMethodology() { MethodologyVersion = methodologyVersion, InternalReleaseNote = "Test approval", + ApprovalStatus = Approved, }; var contentDbContextId = Guid.NewGuid().ToString(); diff --git a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs index 6130e5f9b94..26b39b04d49 100644 --- a/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs +++ b/src/GovUk.Education.ExploreEducationStatistics.Admin/Services/Methodologies/MethodologyService.cs @@ -249,7 +249,7 @@ await _context.Entry(loadedMethodologyVersion) var viewModel = _mapper.Map(loadedMethodologyVersion); - viewModel.InternalReleaseNote = await GetLatestInternalNote(loadedMethodologyVersion); + viewModel.InternalReleaseNote = await GetLatestInternalReleaseNote(loadedMethodologyVersion.Id); viewModel.OwningPublication = owningPublication; viewModel.OtherPublications = otherPublications; @@ -427,11 +427,11 @@ private async Task> DeleteVersion(MethodologyVersion }); } - private async Task GetLatestInternalNote(MethodologyVersion methodologyVersion) + private async Task GetLatestInternalReleaseNote(Guid methodologyVersionId) { // NOTE: Gets latest internal note for this version, not for the entire methodology return await _context.MethodologyStatus - .Where(ms => methodologyVersion.Id == ms.MethodologyVersionId) + .Where(ms => methodologyVersionId == ms.MethodologyVersionId) .OrderByDescending(ms => ms.Created) .Select(ms => ms.InternalReleaseNote) .FirstOrDefaultAsync();