From 655270d1a03481557194c934d799c209fe9a27bc Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Sun, 22 Oct 2017 18:08:06 +0200 Subject: [PATCH] Serializer fixed. --- .../Apps/Utils/AppEventDispatcher.cs | 14 ++++++++++++-- .../MongoDb/BsonJsonAttribute.cs | 1 + .../MongoDb/BsonJsonConvention.cs | 13 +++++++++---- .../MongoDb/JsonBsonSerializer.cs | 8 ++++---- .../CQRS/Events/CompoundEventConsumer.cs | 6 +++++- src/Squidex/Config/Domain/Serializers.cs | 4 ++-- src/Squidex/Pipeline/ActionContextLogAppender.cs | 5 +++++ 7 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs b/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs index 54f09a5ef..e6b4a9998 100644 --- a/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs +++ b/src/Squidex.Domain.Apps.Events/Apps/Utils/AppEventDispatcher.cs @@ -1,11 +1,12 @@ // ========================================================================== -// MongoAppRepository_EventHandling.cs +// AppEventDispatcher.cs // Squidex Headless CMS // ========================================================================== // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== +using System.Linq; using Squidex.Domain.Apps.Core.Apps; namespace Squidex.Domain.Apps.Events.Apps.Utils @@ -60,7 +61,16 @@ namespace Squidex.Domain.Apps.Events.Apps.Utils public static void Apply(this LanguagesConfig languagesConfig, AppLanguageUpdated @event) { - languagesConfig.Set(new LanguageConfig(@event.Language, @event.IsOptional, @event.Fallback)); + var fallback = @event.Fallback; + + if (fallback != null && fallback.Count > 0) + { + var existingLangauges = languagesConfig.OfType().Select(x => x.Language); + + fallback = fallback.Intersect(existingLangauges).ToList(); + } + + languagesConfig.Set(new LanguageConfig(@event.Language, @event.IsOptional, fallback)); if (@event.IsMaster) { diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonAttribute.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonAttribute.cs index 807a46627..738835e47 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonAttribute.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonAttribute.cs @@ -10,6 +10,7 @@ using System; namespace Squidex.Infrastructure.MongoDb { + [AttributeUsage(AttributeTargets.Property)] public sealed class BsonJsonAttribute : Attribute { } diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs index e6b485f82..62f163f47 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/BsonJsonConvention.cs @@ -6,8 +6,10 @@ // All rights reserved. // ========================================================================== +using System; using System.Linq; using System.Reflection; +using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Conventions; using Newtonsoft.Json; @@ -19,13 +21,16 @@ namespace Squidex.Infrastructure.MongoDb { var pack = new ConventionPack(); - var bsonSerializer = new JsonBsonSerializer(serializer); - pack.AddMemberMapConvention("JsonBson", memberMap => { - if (memberMap.MemberType.GetCustomAttributes().OfType().Any()) + var attributes = memberMap.MemberInfo.GetCustomAttributes(); + + if (attributes.OfType().Any()) { - memberMap.SetSerializer(bsonSerializer); + var bsonSerializerType = typeof(JsonBsonSerializer<>).MakeGenericType(memberMap.MemberType); + var bsonSerializer = Activator.CreateInstance(bsonSerializerType, serializer); + + memberMap.SetSerializer((IBsonSerializer)bsonSerializer); } }); diff --git a/src/Squidex.Infrastructure.MongoDb/MongoDb/JsonBsonSerializer.cs b/src/Squidex.Infrastructure.MongoDb/MongoDb/JsonBsonSerializer.cs index a2385e726..996317c7b 100644 --- a/src/Squidex.Infrastructure.MongoDb/MongoDb/JsonBsonSerializer.cs +++ b/src/Squidex.Infrastructure.MongoDb/MongoDb/JsonBsonSerializer.cs @@ -14,7 +14,7 @@ using Newtonsoft.Json.Linq; namespace Squidex.Infrastructure.MongoDb { - public class JsonBsonSerializer : ClassSerializerBase + public class JsonBsonSerializer : ClassSerializerBase where T : class { private readonly JsonSerializer serializer; @@ -25,12 +25,12 @@ namespace Squidex.Infrastructure.MongoDb this.serializer = serializer; } - protected override object DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) + protected override T DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { - return BsonSerializer.Deserialize(context.Reader).ToJson().ToObject(args.NominalType, serializer); + return BsonSerializer.Deserialize(context.Reader).ToJson().ToObject(serializer); } - protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, object value) + protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, T value) { BsonSerializer.Serialize(context.Writer, JObject.FromObject(value, serializer).ToBson()); } diff --git a/src/Squidex.Infrastructure/CQRS/Events/CompoundEventConsumer.cs b/src/Squidex.Infrastructure/CQRS/Events/CompoundEventConsumer.cs index 93be936c1..ae167f3a5 100644 --- a/src/Squidex.Infrastructure/CQRS/Events/CompoundEventConsumer.cs +++ b/src/Squidex.Infrastructure/CQRS/Events/CompoundEventConsumer.cs @@ -34,7 +34,11 @@ namespace Squidex.Infrastructure.CQRS.Events Name = name; - EventsFilter = string.Join("|", this.inners.Where(x => !string.IsNullOrWhiteSpace(x.EventsFilter)).Select(x => $"({x.EventsFilter})")); + var innerFilters = + this.inners.Where(x => !string.IsNullOrWhiteSpace(x.EventsFilter)) + .Select(x => $"({x.EventsFilter})"); + + EventsFilter = string.Join("|", innerFilters); } public Task ClearAsync() diff --git a/src/Squidex/Config/Domain/Serializers.cs b/src/Squidex/Config/Domain/Serializers.cs index 9ab3b0040..dd1495265 100644 --- a/src/Squidex/Config/Domain/Serializers.cs +++ b/src/Squidex/Config/Domain/Serializers.cs @@ -64,9 +64,9 @@ namespace Squidex.Config.Domain TypeNameRegistry.Map(typeof(SquidexEvent).GetTypeInfo().Assembly); TypeNameRegistry.Map(typeof(NoopEvent).GetTypeInfo().Assembly); - BsonJsonConvention.Register(JsonSerializer.Create(SerializerSettings)); - ConfigureJson(SerializerSettings, TypeNameHandling.Auto); + + BsonJsonConvention.Register(JsonSerializer.Create(SerializerSettings)); } public static IServiceCollection AddMyEventFormatter(this IServiceCollection services) diff --git a/src/Squidex/Pipeline/ActionContextLogAppender.cs b/src/Squidex/Pipeline/ActionContextLogAppender.cs index bfe97e06b..a56837143 100644 --- a/src/Squidex/Pipeline/ActionContextLogAppender.cs +++ b/src/Squidex/Pipeline/ActionContextLogAppender.cs @@ -32,6 +32,11 @@ namespace Squidex.Pipeline var httpContext = actionContext.HttpContext; + if (string.IsNullOrEmpty(httpContext.Request.Method)) + { + return; + } + Guid requestId; if (httpContext.Items.TryGetValue(nameof(requestId), out var value) && value is Guid requestIdValue)