diff --git a/Notesnook.API/Interfaces/ISyncItem.cs b/Notesnook.API/Interfaces/ISyncItem.cs
deleted file mode 100644
index 2858555..0000000
--- a/Notesnook.API/Interfaces/ISyncItem.cs
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-This file is part of the Notesnook Sync Server project (https://notesnook.com/)
-
-Copyright (C) 2023 Streetwriters (Private) Limited
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the Affero GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-Affero GNU General Public License for more details.
-
-You should have received a copy of the Affero GNU General Public License
-along with this program. If not, see .
-*/
-
-using System.Text.Json.Serialization;
-using MongoDB.Bson.Serialization.Attributes;
-using MongoDB.Bson.Serialization.Serializers;
-using Notesnook.API.Models;
-using Streetwriters.Common.Attributes;
-using Streetwriters.Common.Converters;
-using Streetwriters.Common.Interfaces;
-
-namespace Notesnook.API.Interfaces
-{
- [BsonSerializer(typeof(ImpliedImplementationInterfaceSerializer))]
- [JsonInterfaceConverter(typeof(InterfaceConverter))]
- public interface ISyncItem
- {
- long DateSynced
- {
- get; set;
- }
-
- string UserId { get; set; }
- string Algorithm { get; set; }
- string IV { get; set; }
- }
-}
diff --git a/Notesnook.API/Models/SyncItem.cs b/Notesnook.API/Models/SyncItem.cs
index 1416f22..fac0d1e 100644
--- a/Notesnook.API/Models/SyncItem.cs
+++ b/Notesnook.API/Models/SyncItem.cs
@@ -17,17 +17,21 @@ You should have received a copy of the Affero GNU General Public License
along with this program. If not, see .
*/
+using System;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;
using System.Text.Json.Serialization;
using MongoDB.Bson;
+using MongoDB.Bson.IO;
+using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Attributes;
+using MongoDB.Bson.Serialization.Serializers;
using Notesnook.API.Interfaces;
namespace Notesnook.API.Models
{
[MessagePack.MessagePackObject]
- public class SyncItem : ISyncItem
+ public class SyncItem
{
[IgnoreDataMember]
[MessagePack.IgnoreMember]
@@ -110,6 +114,103 @@ namespace Notesnook.API.Models
} = Algorithms.Default;
}
+ public class SyncItemBsonSerializer : SerializerBase
+ {
+ public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, SyncItem value)
+ {
+ var writer = context.Writer;
+ writer.WriteStartDocument();
+
+ if (value.Id != ObjectId.Empty)
+ {
+ writer.WriteName("_id");
+ writer.WriteObjectId(value.Id);
+ }
+
+ writer.WriteName("DateSynced");
+ writer.WriteInt64(value.DateSynced);
+
+ writer.WriteName("UserId");
+ writer.WriteString(value.UserId);
+
+ writer.WriteName("IV");
+ writer.WriteString(value.IV);
+
+ writer.WriteName("Cipher");
+ writer.WriteString(value.Cipher);
+
+ writer.WriteName("ItemId");
+ writer.WriteString(value.ItemId);
+
+ writer.WriteName("Length");
+ writer.WriteInt64(value.Length);
+
+ writer.WriteName("Version");
+ writer.WriteDouble(value.Version);
+
+ writer.WriteName("Algorithm");
+ writer.WriteString(value.Algorithm);
+
+ writer.WriteEndDocument();
+ }
+
+ public override SyncItem Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
+ {
+ var bsonReader = context.Reader;
+ bsonReader.ReadStartDocument();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var id = bsonReader.ReadObjectId();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var dateSynced = bsonReader.ReadInt64();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var userId = bsonReader.ReadString();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var iv = bsonReader.ReadString();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var cipher = bsonReader.ReadString();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var itemId = bsonReader.ReadString();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var length = bsonReader.ReadInt64();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var version = bsonReader.ReadDouble();
+
+ bsonReader.ReadBsonType();
+ bsonReader.SkipName();
+ var algorithm = bsonReader.ReadString();
+
+ bsonReader.ReadEndDocument();
+ return new SyncItem
+ {
+ Id = id,
+ DateSynced = dateSynced,
+ UserId = userId,
+ IV = iv,
+ Cipher = cipher,
+ ItemId = itemId,
+ Length = length,
+ Version = version,
+ Algorithm = algorithm
+ };
+ }
+ }
+
[MessagePack.MessagePackObject]
public class SettingItem : SyncItem { }
diff --git a/Notesnook.API/Startup.cs b/Notesnook.API/Startup.cs
index fe1cfd6..8932f4b 100644
--- a/Notesnook.API/Startup.cs
+++ b/Notesnook.API/Startup.cs
@@ -159,6 +159,7 @@ namespace Notesnook.API
options.CacheDuration = TimeSpan.FromMinutes(30);
});
+ BsonSerializer.RegisterSerializer(new SyncItemBsonSerializer());
if (!BsonClassMap.IsClassMapRegistered(typeof(UserSettings)))
BsonClassMap.RegisterClassMap();