using adas_core.Domain.Enums; using adas_core.Domain.Models.MongoModels; using adas_core.Infrastructure.Utils.MongoMaps.Interfaz; using MongoDB.Bson; using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization.Serializers; namespace adas_core.Infrastructure.Utils.MongoMaps; /// /// Provides mapping contributions for the BannerConfig entity by implementing the contract. /// /// /// Used as a contributor that participates in entity map configuration for banner-related data. /// public class BannerConfigMapContributor : IEntityMapContributor { /// /// Registers BSON class maps for banner-related configuration types, including , , , and . Each map is only registered when no existing registration is found, and applies custom serialization (enum values stored as strings), null-ignoring behavior for optional members, and default values where appropriate. /// public void RegisterMaps() { if (!BsonClassMap.IsClassMapRegistered(typeof(BannerItem))) BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapMember(c => c.Type) .SetIgnoreIfNull(true) .SetSerializer( new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.GrowPriority).SetDefaultValue(1); cm.MapMember(c => c.Config).SetIgnoreIfNull(true); }); if (!BsonClassMap.IsClassMapRegistered(typeof(BannerItemConfig))) BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapMember(c => c.BannerItemDialogTableConfig).SetIgnoreIfNull(true); cm.MapMember(c => c.BannerItemTableConfig).SetIgnoreIfNull(true); cm.MapMember(c => c.MedicalStaffConfig).SetIgnoreIfNull(true); }); if (!BsonClassMap.IsClassMapRegistered(typeof(BannerItemTableConfig))) BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapMember(c => c.Config).SetIgnoreIfNull(true); cm.MapMember(c => c.BgColor).SetIgnoreIfNull(true); cm.MapMember(c => c.TextColor).SetIgnoreIfNull(true); }); if (!BsonClassMap.IsClassMapRegistered(typeof(HeaderBannerItemTableConfig))) BsonClassMap.RegisterClassMap(cm => { cm.MapMember(c => c.Type) .SetIgnoreIfNull(true) .SetSerializer( new NullableSerializer( new EnumSerializer(BsonType.String))); cm.MapMember(c => c.SubType).SetIgnoreIfNull(true); cm.MapMember(c => c.Field).SetIgnoreIfNull(true); cm.MapMember(c => c.GrowPriority).SetIgnoreIfNull(true); cm.MapMember(c => c.Icon).SetIgnoreIfNull(true); cm.MapMember(c => c.BgColor).SetIgnoreIfNull(true); cm.MapMember(c => c.TextColor).SetIgnoreIfNull(true); cm.MapMember(c => c.Title).SetIgnoreIfNull(true); }); } }