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);
});
}
}