using AutoMapper; using LittleShop.Models; using LittleShop.DTOs; namespace LittleShop.Mapping; public class MappingProfile : Profile { public MappingProfile() { CreateMap(); CreateMap() .ForMember(dest => dest.Id, opt => opt.Ignore()) .ForMember(dest => dest.PasswordHash, opt => opt.Ignore()) .ForMember(dest => dest.CreatedAt, opt => opt.Ignore()) .ForMember(dest => dest.IsActive, opt => opt.MapFrom(src => true)); CreateMap() .ForMember(dest => dest.ProductCount, opt => opt.MapFrom(src => src.Products.Count(p => p.IsActive))); CreateMap() .ForMember(dest => dest.Id, opt => opt.Ignore()) .ForMember(dest => dest.CreatedAt, opt => opt.Ignore()) .ForMember(dest => dest.IsActive, opt => opt.MapFrom(src => true)); CreateMap() .ForMember(dest => dest.CategoryName, opt => opt.MapFrom(src => src.Category.Name)); CreateMap() .ForMember(dest => dest.Id, opt => opt.Ignore()) .ForMember(dest => dest.CreatedAt, opt => opt.Ignore()) .ForMember(dest => dest.IsActive, opt => opt.MapFrom(src => true)); CreateMap(); CreateMap(); CreateMap() .ForMember(dest => dest.Id, opt => opt.Ignore()) .ForMember(dest => dest.Status, opt => opt.MapFrom(src => LittleShop.Enums.OrderStatus.PendingPayment)) .ForMember(dest => dest.TotalAmount, opt => opt.Ignore()) .ForMember(dest => dest.Currency, opt => opt.MapFrom(src => "GBP")) .ForMember(dest => dest.CreatedAt, opt => opt.Ignore()); CreateMap() .ForMember(dest => dest.ProductName, opt => opt.MapFrom(src => src.Product.Name)); CreateMap(); // Customer mappings CreateMap() .ForMember(dest => dest.DisplayName, opt => opt.Ignore()) .ForMember(dest => dest.CustomerType, opt => opt.Ignore()); CreateMap(); CreateMap() .ForAllMembers(opt => opt.Condition((src, dest, srcMember) => srcMember != null)); CreateMap() .ForMember(dest => dest.DisplayName, opt => opt.MapFrom(src => src.DisplayName)) .ForMember(dest => dest.CustomerType, opt => opt.MapFrom(src => src.CustomerType)); // CustomerMessage mappings CreateMap() .ForMember(dest => dest.Customer, opt => opt.MapFrom(src => src.Customer)) .ForMember(dest => dest.AdminUsername, opt => opt.MapFrom(src => src.AdminUser != null ? src.AdminUser.Username : null)) .ForMember(dest => dest.OrderReference, opt => opt.MapFrom(src => src.Order != null ? src.Order.Id.ToString().Substring(0, 8) : null)) .ForMember(dest => dest.TelegramUserId, opt => opt.MapFrom(src => src.Customer != null ? src.Customer.TelegramUserId : 0)) .ForMember(dest => dest.DisplayTitle, opt => opt.MapFrom(src => src.GetDisplayTitle())) .ForMember(dest => dest.StatusDisplay, opt => opt.MapFrom(src => src.Status.ToString())) .ForMember(dest => dest.DirectionDisplay, opt => opt.MapFrom(src => src.Direction == MessageDirection.AdminToCustomer ? "Outbound" : "Inbound")) .ForMember(dest => dest.TypeDisplay, opt => opt.MapFrom(src => src.Type.ToString())); CreateMap() .ForMember(dest => dest.Id, opt => opt.MapFrom(src => Guid.NewGuid())) .ForMember(dest => dest.Direction, opt => opt.MapFrom(src => MessageDirection.AdminToCustomer)) .ForMember(dest => dest.CreatedAt, opt => opt.MapFrom(src => DateTime.UtcNow)) .ForMember(dest => dest.Status, opt => opt.MapFrom(src => MessageStatus.Pending)) .ForMember(dest => dest.Platform, opt => opt.MapFrom(src => "Telegram")); } }