Make Profile.Markings db column jsonb (#7947)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user