Compare commits

...

2 Commits

Author SHA1 Message Date
b4c8096c41 🐛 Trying to fix sync API of messages 2025-07-23 13:03:56 +08:00
c316a099f8 🐛 Trying to fix cloud file meta serialization issue 2025-07-23 12:43:20 +08:00
4 changed files with 13 additions and 18 deletions

View File

@@ -119,11 +119,11 @@ public class CloudFile : ModelBase, ICloudFile, IIdentifiedResource
UploadedAt = UploadedAt?.ToTimestamp(), UploadedAt = UploadedAt?.ToTimestamp(),
// Convert file metadata // Convert file metadata
FileMeta = ByteString.CopyFromUtf8( FileMeta = ByteString.CopyFromUtf8(
System.Text.Json.JsonSerializer.Serialize(FileMeta, GrpcTypeHelper.SystemTextSerializerOptions) JsonConvert.SerializeObject(FileMeta, GrpcTypeHelper.SerializerSettings)
), ),
// Convert user metadata // Convert user metadata
UserMeta = ByteString.CopyFromUtf8( UserMeta = ByteString.CopyFromUtf8(
System.Text.Json.JsonSerializer.Serialize(UserMeta, GrpcTypeHelper.SystemTextSerializerOptions) JsonConvert.SerializeObject(UserMeta, GrpcTypeHelper.SerializerSettings)
) )
}; };

View File

@@ -1,5 +1,6 @@
using DysonNetwork.Shared.Proto; using DysonNetwork.Shared.Proto;
using Google.Protobuf; using Google.Protobuf;
using Newtonsoft.Json;
namespace DysonNetwork.Shared.Data; namespace DysonNetwork.Shared.Data;
@@ -41,13 +42,13 @@ public class CloudFileReferenceObject : ModelBase, ICloudFile
{ {
Id = proto.Id, Id = proto.Id,
Name = proto.Name, Name = proto.Name,
FileMeta = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object?>>( FileMeta = JsonConvert.DeserializeObject<Dictionary<string, object?>>(
proto.FileMeta.ToStringUtf8(), proto.FileMeta.ToStringUtf8(),
GrpcTypeHelper.SystemTextSerializerOptions GrpcTypeHelper.SerializerSettings
) ?? [], ) ?? [],
UserMeta = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object?>>( UserMeta = JsonConvert.DeserializeObject<Dictionary<string, object?>>(
proto.UserMeta.ToStringUtf8(), proto.UserMeta.ToStringUtf8(),
GrpcTypeHelper.SystemTextSerializerOptions GrpcTypeHelper.SerializerSettings
) ?? [], ) ?? [],
MimeType = proto.MimeType, MimeType = proto.MimeType,
Hash = proto.Hash, Hash = proto.Hash,
@@ -75,12 +76,12 @@ public class CloudFileReferenceObject : ModelBase, ICloudFile
// Convert file metadata // Convert file metadata
proto.FileMeta = ByteString.CopyFromUtf8( proto.FileMeta = ByteString.CopyFromUtf8(
System.Text.Json.JsonSerializer.Serialize(FileMeta, GrpcTypeHelper.SystemTextSerializerOptions) JsonConvert.SerializeObject(FileMeta, GrpcTypeHelper.SerializerSettings)
); );
// Convert user metadata // Convert user metadata
proto.UserMeta = ByteString.CopyFromUtf8( proto.UserMeta = ByteString.CopyFromUtf8(
System.Text.Json.JsonSerializer.Serialize(UserMeta, GrpcTypeHelper.SystemTextSerializerOptions) JsonConvert.SerializeObject(UserMeta, GrpcTypeHelper.SerializerSettings)
); );
return proto; return proto;

View File

@@ -9,13 +9,6 @@ namespace DysonNetwork.Shared.Proto;
public abstract class GrpcTypeHelper public abstract class GrpcTypeHelper
{ {
public static readonly JsonSerializerOptions SystemTextSerializerOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.SnakeCaseLower,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
Converters = { new JsonStringEnumConverter() }
};
public static readonly JsonSerializerSettings SerializerSettings = new() public static readonly JsonSerializerSettings SerializerSettings = new()
{ {
ContractResolver = new DefaultContractResolver { NamingStrategy = new SnakeCaseNamingStrategy() }, ContractResolver = new DefaultContractResolver { NamingStrategy = new SnakeCaseNamingStrategy() },

View File

@@ -341,13 +341,13 @@ public partial class ChatService(
m => m!.ChatRoomId, m => m!.ChatRoomId,
m => m m => m
); );
var messageSenders = messages var messageSenders = messages
.Select(m => m.Value!.Sender) .Select(m => m.Value!.Sender)
.DistinctBy(x => x.Id) .DistinctBy(x => x.Id)
.ToList(); .ToList();
messageSenders = await crs.LoadMemberAccounts(messageSenders); messageSenders = await crs.LoadMemberAccounts(messageSenders);
foreach (var message in messages) foreach (var message in messages)
message.Value!.Sender = messageSenders.First(x => x.Id == message.Value.SenderId); message.Value!.Sender = messageSenders.First(x => x.Id == message.Value.SenderId);
@@ -470,6 +470,7 @@ public partial class ChatService(
.ToListAsync(); .ToListAsync();
var changesMembers = changes var changesMembers = changes
.Where(c => c.Message != null)
.Select(c => c.Message!.Sender) .Select(c => c.Message!.Sender)
.DistinctBy(x => x.Id) .DistinctBy(x => x.Id)
.ToList(); .ToList();
@@ -595,4 +596,4 @@ public class SyncResponse
{ {
public List<MessageChange> Changes { get; set; } = []; public List<MessageChange> Changes { get; set; } = [];
public Instant CurrentTimestamp { get; set; } public Instant CurrentTimestamp { get; set; }
} }