diff --git a/src/Squidex.Core/Schemas/NamedElementProperties.cs b/src/Squidex.Core/Schemas/NamedElementProperties.cs index 1cf91c138..11a9b52aa 100644 --- a/src/Squidex.Core/Schemas/NamedElementProperties.cs +++ b/src/Squidex.Core/Schemas/NamedElementProperties.cs @@ -15,7 +15,7 @@ namespace Squidex.Core.Schemas private string label; private string hints; - public bool IsFrozen { get; private set; } + protected bool IsFrozen { get; private set; } public string Label { @@ -47,11 +47,6 @@ namespace Squidex.Core.Schemas } } - public bool ShouldSerializeIsFrozen() - { - return false; - } - public void Freeze() { IsFrozen = true; diff --git a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs index e7c489c6c..02043cdd0 100644 --- a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs +++ b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaEntity.cs @@ -32,23 +32,23 @@ namespace Squidex.Store.MongoDb.Schemas [BsonRequired] [BsonElement] - public Guid AppId { get; set; } - + public string Schema { get; set; } + [BsonRequired] [BsonElement] public bool IsDeleted { get; set; } [BsonRequired] [BsonElement] - public RefToken CreatedBy { get; set; } + public Guid AppId { get; set; } [BsonRequired] [BsonElement] - public RefToken LastModifiedBy { get; set; } + public RefToken CreatedBy { get; set; } [BsonRequired] [BsonElement] - public BsonDocument Schema { get; set; } + public RefToken LastModifiedBy { get; set; } [BsonRequired] [BsonElement] @@ -61,7 +61,7 @@ namespace Squidex.Store.MongoDb.Schemas public Lazy DeserializeSchema(SchemaJsonSerializer serializer) { - schema = new Lazy(() => Schema != null ? serializer.Deserialize(Schema.ToJToken()) : null); + schema = new Lazy(() => Schema != null ? serializer.Deserialize(Schema) : null); return schema; } diff --git a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs index e3ee792b0..dec3281d3 100644 --- a/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs +++ b/src/Squidex.Store.MongoDb/Schemas/MongoSchemaRepository.cs @@ -155,7 +155,7 @@ namespace Squidex.Store.MongoDb.Schemas { var schema = Schema.Create(@event.Name, @event.Properties); - return Collection.CreateAsync(headers, s => { Serialize(s, schema); SimpleMapper.Map(@event, s); }); + return Collection.CreateAsync(headers, s => { UpdateSchema(s, schema); SimpleMapper.Map(@event, s); }); } public Task On(Envelope @event) @@ -174,15 +174,20 @@ namespace Squidex.Store.MongoDb.Schemas currentSchema = updater(currentSchema); - Serialize(entity, currentSchema); + UpdateSchema(entity, currentSchema); + UpdateProperties(entity, currentSchema); + } + private static void UpdateProperties(MongoSchemaEntity entity, Schema currentSchema) + { entity.Label = currentSchema.Properties.Label; + entity.IsPublished = currentSchema.IsPublished; } - private void Serialize(MongoSchemaEntity entity, Schema schema) + private void UpdateSchema(MongoSchemaEntity entity, Schema schema) { - entity.Schema = serializer.Serialize(schema).ToBsonDocument(); + entity.Schema = serializer.Serialize(schema).ToString(); } private Schema Deserialize(MongoSchemaEntity entity) diff --git a/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs b/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs index 33b2264ce..882f0bbf3 100644 --- a/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs +++ b/src/Squidex.Store.MongoDb/Utils/EntityMapper.cs @@ -8,9 +8,7 @@ using System; using System.Threading.Tasks; -using MongoDB.Bson; using MongoDB.Driver; -using Newtonsoft.Json.Linq; using Squidex.Events; using Squidex.Infrastructure.CQRS; using Squidex.Infrastructure.MongoDb; @@ -94,20 +92,6 @@ namespace Squidex.Store.MongoDb.Utils } } - public static BsonDocument ToBsonDocument(this JToken value) - { - var json = value.ToString().Replace("$type", "§type"); - - return BsonDocument.Parse(json); - } - - public static JToken ToJToken(this BsonDocument document) - { - var json = document.ToJson().Replace("§type", "$type"); - - return JToken.Parse(json); - } - public static Task CreateAsync(this IMongoCollection collection, EnvelopeHeaders headers, Action updater, bool useAggregateId = true) where T : MongoEntity, new() { var entity = Create(headers, useAggregateId); diff --git a/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs b/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs index 4223576cd..0155d566e 100644 --- a/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs +++ b/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs @@ -36,8 +36,6 @@ namespace Squidex.Core.Schemas Assert.Equal("my-name", schema.Name); Assert.Equal(properties, schema.Properties); - - Assert.True(properties.IsFrozen); } [Fact] @@ -54,8 +52,6 @@ namespace Squidex.Core.Schemas sut = sut.Update(properties); Assert.Equal(properties, sut.Properties); - - Assert.True(properties.IsFrozen); } [Fact]