Skip to content

Commit e4c4293

Browse files
committed
EES-4993 Move PublicApiDataSet* columns from Files to ReleaseFiles
Signed-off-by: Nicholas Tsim <nicholastsim@gmail.com>
1 parent ed0f7b7 commit e4c4293

File tree

18 files changed

+2581
-179
lines changed

18 files changed

+2581
-179
lines changed

src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Controllers/Api/Public.Data/DataSetCandidatesControllerTests.cs

+3-4
Original file line numberDiff line numberDiff line change
@@ -179,16 +179,15 @@ public async Task ReleaseFileHasAssociatedDataSet_NotReturned()
179179

180180
DataImport dataImport = DataFixture
181181
.DefaultDataImport()
182-
.WithFile(DataFixture.DefaultFile(FileType.Data)
183-
.WithPublicApiDataSetId(Guid.NewGuid())
184-
);
182+
.WithFile(DataFixture.DefaultFile(FileType.Data));
185183

186184
var releaseVersion = release.Versions.Single();
187185

188186
ReleaseFile releaseFile = DataFixture
189187
.DefaultReleaseFile()
190188
.WithFile(dataImport.File)
191-
.WithReleaseVersion(releaseVersion);
189+
.WithReleaseVersion(releaseVersion)
190+
.WithPublicApiDataSetId(Guid.NewGuid());
192191

193192
await TestApp.AddTestData<ContentDbContext>(context =>
194193
{

src/GovUk.Education.ExploreEducationStatistics.Admin.Tests/Services/ReleaseAmendmentServiceTests.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ public async Task CreateReleaseAmendment()
314314
)
315315
],
316316
Published = new DateTime(2020, 1, 1, 0, 0, 0, DateTimeKind.Utc),
317+
PublicApiDataSetId = Guid.NewGuid(),
318+
PublicApiDataSetVersion = "1.0.0",
317319
},
318320
new()
319321
{
@@ -1157,7 +1159,9 @@ private static void AssertAmendedReleaseRoleCorrect(
11571159
Assert.Equal(originalReleaseRole.DeletedById, amendedReleaseRole.DeletedById);
11581160
}
11591161

1160-
private static void AssertAmendedReleaseFileCorrect(ReleaseFile originalFile, ReleaseFile amendmentDataFile,
1162+
private static void AssertAmendedReleaseFileCorrect(
1163+
ReleaseFile originalFile,
1164+
ReleaseFile amendmentDataFile,
11611165
ReleaseVersion amendment)
11621166
{
11631167
// Assert it's a new link table entry between the Release amendment and the data file reference
@@ -1170,6 +1174,9 @@ private static void AssertAmendedReleaseFileCorrect(ReleaseFile originalFile, Re
11701174
originalFile.FilterSequence.AssertDeepEqualTo(amendmentDataFile.FilterSequence);
11711175
originalFile.IndicatorSequence.AssertDeepEqualTo(amendmentDataFile.IndicatorSequence);
11721176

1177+
Assert.Equal(originalFile.PublicApiDataSetId, amendmentDataFile.PublicApiDataSetId);
1178+
Assert.Equal(originalFile.PublicApiDataSetVersion, amendmentDataFile.PublicApiDataSetVersion);
1179+
11731180
// And assert that the file referenced is the SAME file reference as linked from the original Release's
11741181
// link table entry
11751182
Assert.Equal(originalFile.File.Id, amendmentDataFile.File.Id);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
#nullable enable
2+
using System.Linq;
3+
using System.Threading;
4+
using System.Threading.Tasks;
5+
using GovUk.Education.ExploreEducationStatistics.Admin.Models;
6+
using GovUk.Education.ExploreEducationStatistics.Content.Model.Database;
7+
using GovUk.Education.ExploreEducationStatistics.Public.Data.Model;
8+
using GovUk.Education.ExploreEducationStatistics.Public.Data.Model.Database;
9+
using Microsoft.AspNetCore.Authorization;
10+
using Microsoft.AspNetCore.Mvc;
11+
using Microsoft.EntityFrameworkCore;
12+
13+
namespace GovUk.Education.ExploreEducationStatistics.Admin.Controllers.Api.Bau;
14+
15+
[Route("api/bau")]
16+
[ApiController]
17+
[Authorize(Roles = GlobalRoles.RoleNames.BauUser)]
18+
public class BauMigrationController(
19+
ContentDbContext contentDbContext,
20+
PublicDataDbContext publicDataDbContext)
21+
: ControllerBase
22+
{
23+
[HttpPost("migrate-ees-4993")]
24+
public async Task<ActionResult> MigrateEes4993(CancellationToken cancellationToken)
25+
{
26+
var unpublishedDataSetVersions = await publicDataDbContext
27+
.DataSetVersions
28+
.Where(dsv => dsv.Status == DataSetVersionStatus.Draft
29+
|| dsv.Status == DataSetVersionStatus.Failed
30+
|| dsv.Status == DataSetVersionStatus.Processing
31+
|| dsv.Status == DataSetVersionStatus.Cancelled)
32+
.ToListAsync(cancellationToken);
33+
34+
foreach (var draftVersion in unpublishedDataSetVersions)
35+
{
36+
// Update any published release files to no longer incorrectly reference draft data set versions.
37+
//
38+
// This should only apply to draft data set versions for amendments that were created prior
39+
// to the `EES4993_AddPublicApiDataSetIdVersionToReleaseFile` migration.
40+
41+
// The DB migration moves the `PublicApiDataSetId` and `PublicApiDataSetVersion` columns
42+
// from `Files` to `ReleaseFiles`, but can set these incorrectly for published release files.
43+
// We need this additional endpoint migration to fix any incorrect column values.
44+
await contentDbContext.ReleaseFiles
45+
.Where(rf => rf.ReleaseVersion.Published != null)
46+
.Where(rf => rf.PublicApiDataSetId == draftVersion.DataSetId)
47+
.Where(rf => rf.PublicApiDataSetVersion == draftVersion.Version)
48+
.ExecuteUpdateAsync(
49+
s => s
50+
.SetProperty(rf => rf.PublicApiDataSetId, _ => null)
51+
.SetProperty(rf => rf.PublicApiDataSetVersion, _ => null),
52+
cancellationToken
53+
);
54+
}
55+
56+
return Ok();
57+
}
58+
}

0 commit comments

Comments
 (0)