Make Profile.Markings db column jsonb (#7947)

This commit is contained in:
DrSmugleaf
2022-05-05 11:23:48 +02:00
committed by GitHub
parent 0121025d12
commit 0502d3dec4
9 changed files with 2571 additions and 19 deletions

View File

@@ -64,13 +64,21 @@ namespace Content.Server.Database
.HasColumnType("TEXT")
.HasConversion(ipMaskConverter);
var jsonConverter = new ValueConverter<JsonDocument, string>(
var jsonStringConverter = new ValueConverter<JsonDocument, string>(
v => JsonDocumentToString(v),
v => StringToJsonDocument(v));
var jsonByteArrayConverter = new ValueConverter<JsonDocument?, byte[]>(
v => JsonDocumentToByteArray(v),
v => ByteArrayToJsonDocument(v));
modelBuilder.Entity<AdminLog>()
.Property(log => log.Json)
.HasConversion(jsonConverter);
.HasConversion(jsonStringConverter);
modelBuilder.Entity<Profile>()
.Property(log => log.Markings)
.HasConversion(jsonByteArrayConverter);
}
private static string InetToString(IPAddress address, int mask) {
@@ -107,5 +115,26 @@ namespace Content.Server.Database
{
return JsonDocument.Parse(str);
}
private static byte[] JsonDocumentToByteArray(JsonDocument? document)
{
if (document == null)
{
return Array.Empty<byte>();
}
using var stream = new MemoryStream();
using var writer = new Utf8JsonWriter(stream, new JsonWriterOptions {Indented = false});
document.WriteTo(writer);
writer.Flush();
return stream.ToArray();
}
private static JsonDocument ByteArrayToJsonDocument(byte[] str)
{
return JsonDocument.Parse(str);
}
}
}