diff --git a/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Mappings/SupportTaskMapping.cs b/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Mappings/SupportTaskMapping.cs index 08698709b..8e79dafef 100644 --- a/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Mappings/SupportTaskMapping.cs +++ b/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Mappings/SupportTaskMapping.cs @@ -15,7 +15,7 @@ public void Configure(EntityTypeBuilder builder) builder.HasOne().WithMany().HasForeignKey(p => p.PersonId).HasConstraintName("fk_support_tasks_person"); builder.HasIndex(t => t.OneLoginUserSubject); builder.HasIndex(t => t.PersonId); - builder.Property("_data").HasColumnName("data").IsRequired(); + builder.Property("_data").HasColumnName("data").IsRequired(); builder.Ignore(t => t.Data); } } diff --git a/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Migrations/TrsDbContextModelSnapshot.cs b/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Migrations/TrsDbContextModelSnapshot.cs index 870db519e..57da6e0db 100644 --- a/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Migrations/TrsDbContextModelSnapshot.cs +++ b/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Migrations/TrsDbContextModelSnapshot.cs @@ -2145,8 +2145,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("timestamp with time zone") .HasColumnName("updated_on"); - b.Property("_data") - .IsRequired() + b.Property("_data") .HasColumnType("jsonb") .HasColumnName("data"); diff --git a/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Models/SupportTask.cs b/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Models/SupportTask.cs index 0dc114c53..61c2e757e 100644 --- a/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Models/SupportTask.cs +++ b/TeachingRecordSystem/src/TeachingRecordSystem.Core/DataStore/Postgres/Models/SupportTask.cs @@ -10,7 +10,7 @@ public class SupportTask internal static readonly JsonSerializerOptions SerializerOptions = new(); private static readonly char[] _validReferenceChars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789".ToCharArray(); - private JsonDocument _data = null!; + private JsonElement _data; public required string SupportTaskReference { get; set; } public required DateTime CreatedOn { get; init; } @@ -23,7 +23,7 @@ public class SupportTask public required object Data { get => JsonSerializer.Deserialize(_data, GetDataType(), SerializerOptions)!; - set => _data = JsonSerializer.SerializeToDocument(value, GetDataType(), SerializerOptions); + set => _data = JsonSerializer.SerializeToElement(value, GetDataType(), SerializerOptions); } public static string GenerateSupportTaskReference() diff --git a/TeachingRecordSystem/src/TeachingRecordSystem.Core/Events/Models/SupportTask.cs b/TeachingRecordSystem/src/TeachingRecordSystem.Core/Events/Models/SupportTask.cs index 4cae8e48b..6331c4dc4 100644 --- a/TeachingRecordSystem/src/TeachingRecordSystem.Core/Events/Models/SupportTask.cs +++ b/TeachingRecordSystem/src/TeachingRecordSystem.Core/Events/Models/SupportTask.cs @@ -7,7 +7,7 @@ public record SupportTask { [JsonInclude] [JsonPropertyName("Data")] - private JsonDocument _data = null!; + private JsonElement _data; public required string SupportTaskReference { get; init; } public required SupportTaskType SupportTaskType { get; init; } @@ -19,7 +19,7 @@ public record SupportTask public object Data { get => JsonSerializer.Deserialize(_data, DataStore.Postgres.Models.SupportTask.GetDataType(SupportTaskType), DataStore.Postgres.Models.SupportTask.SerializerOptions)!; - init => _data = JsonSerializer.SerializeToDocument(value, DataStore.Postgres.Models.SupportTask.GetDataType(SupportTaskType), DataStore.Postgres.Models.SupportTask.SerializerOptions); + init => _data = JsonSerializer.SerializeToElement(value, DataStore.Postgres.Models.SupportTask.GetDataType(SupportTaskType), DataStore.Postgres.Models.SupportTask.SerializerOptions); } public static SupportTask FromModel(DataStore.Postgres.Models.SupportTask model) => new() diff --git a/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/PersonMatching/PersonMatchingService.cs b/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/PersonMatching/PersonMatchingService.cs index 0b6c4a02f..f62eb4387 100644 --- a/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/PersonMatching/PersonMatchingService.cs +++ b/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/PersonMatching/PersonMatchingService.cs @@ -55,12 +55,12 @@ FROM matches m return results switch { - [MatchQueryResult r] => new MatchResult(r.person_id, r.trn, MapMatchedAttrs(r.matched_attrs)), + [MatchQueryResult r] => new MatchResult(r.person_id, r.trn, MapMatchedAttrs(r.GetMatchedAttributes())), _ => null }; - static IReadOnlyCollection> MapMatchedAttrs(JsonDocument doc) => - doc.Deserialize()! + static IReadOnlyCollection> MapMatchedAttrs(MatchedAttribute[] matchedAttributes) => + matchedAttributes .Select(a => new KeyValuePair( Enum.Parse(a.attribute_type), a.attribute_value)) @@ -199,7 +199,10 @@ FROM person_search_attributes a NationalInsuranceNumberHelper.Normalize(value); #pragma warning disable IDE1006 // Naming Styles - private record MatchQueryResult(Guid person_id, string trn, JsonDocument matched_attrs); + private record MatchQueryResult(Guid person_id, string trn, JsonElement matched_attrs) + { + public MatchedAttribute[] GetMatchedAttributes() => matched_attrs.Deserialize()!; + } private record MatchedAttribute(string attribute_type, string attribute_value); diff --git a/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/WorkforceData/WorkforceDataExportConfigureOptions.cs b/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/WorkforceData/WorkforceDataExportConfigureOptions.cs index 1df0b19a1..1a3726535 100644 --- a/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/WorkforceData/WorkforceDataExportConfigureOptions.cs +++ b/TeachingRecordSystem/src/TeachingRecordSystem.Core/Services/WorkforceData/WorkforceDataExportConfigureOptions.cs @@ -26,7 +26,7 @@ public void Configure(WorkforceDataExportOptions options) if (!string.IsNullOrEmpty(credentialsJson)) { - var credentialsJsonDoc = JsonDocument.Parse(credentialsJson); + using var credentialsJsonDoc = JsonDocument.Parse(credentialsJson); if (credentialsJsonDoc.RootElement.TryGetProperty("private_key", out _)) { diff --git a/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.EndToEndTests/OneLoginUserInfo.cs b/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.EndToEndTests/OneLoginUserInfo.cs index 51d772076..3076a1517 100644 --- a/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.EndToEndTests/OneLoginUserInfo.cs +++ b/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.EndToEndTests/OneLoginUserInfo.cs @@ -9,7 +9,7 @@ public record OneLoginUserInfo(string sub, string email, string vot, string sid, public static OneLoginUserInfo Create(string sub, string email) => Create(sub, email, (string?)null); - public static OneLoginUserInfo Create(string sub, string email, JsonDocument? coreIdentityVc) + public static OneLoginUserInfo Create(string sub, string email, JsonElement? coreIdentityVc) { string? coretIdentityVcStr = coreIdentityVc is null ? null : JsonSerializer.Serialize(coreIdentityVc); return Create(sub, email, coretIdentityVcStr); diff --git a/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.Tests/TestBase.cs b/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.Tests/TestBase.cs index 30838d429..407b53e8e 100644 --- a/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.Tests/TestBase.cs +++ b/TeachingRecordSystem/tests/TeachingRecordSystem.AuthorizeAccess.Tests/TestBase.cs @@ -135,7 +135,7 @@ public AuthenticationTicket CreateOneLoginAuthenticationTicket( dateOfBirth ??= DateOnly.FromDateTime(Faker.Identification.DateOfBirth()); var vc = TestData.CreateOneLoginCoreIdentityVc(firstName, lastName, dateOfBirth.Value); - claims.Add(new Claim("vc", vc.RootElement.ToString(), "JSON")); + claims.Add(new Claim("vc", vc.ToString(), "JSON")); } var identity = new ClaimsIdentity(claims, authenticationType: "OneLogin", nameType: "sub", roleType: null); diff --git a/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/AssertEx.Http.cs b/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/AssertEx.Http.cs index a8873251c..a1215a654 100644 --- a/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/AssertEx.Http.cs +++ b/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/AssertEx.Http.cs @@ -24,7 +24,7 @@ public static async Task JsonResponseEquals(HttpResponseMessage response, object ArgumentNullException.ThrowIfNull(response); ArgumentNullException.ThrowIfNull(expected); - var jsonDocument = await JsonResponse(response, expectedStatusCode); + using var jsonDocument = await JsonResponse(response, expectedStatusCode); JsonObjectEquals(expected, jsonDocument); } diff --git a/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/TestData.CreateOneLoginUser.cs b/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/TestData.CreateOneLoginUser.cs index 84dfa97e5..04573fd10 100644 --- a/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/TestData.CreateOneLoginUser.cs +++ b/TeachingRecordSystem/tests/TeachingRecordSystem.TestCommon/TestData.CreateOneLoginUser.cs @@ -63,8 +63,8 @@ public Task CreateOneLoginUser( public string CreateOneLoginUserSubject() => Guid.NewGuid().ToString("N"); - public JsonDocument CreateOneLoginCoreIdentityVc(string firstName, string lastName, DateOnly dateOfBirth) => - JsonDocument.Parse( + public JsonElement CreateOneLoginCoreIdentityVc(string firstName, string lastName, DateOnly dateOfBirth) => + JsonSerializer.SerializeToElement( new JsonObject { ["type"] = new JsonArray(