using AutoMapper; using PowderCoating.Core.Entities; using PowderCoating.Core.Enums; using PowderCoating.Application.DTOs.Maintenance; namespace PowderCoating.Application.Mappings; public class MaintenanceProfile : Profile { public MaintenanceProfile() { // MaintenanceRecord to MaintenanceRecordDto CreateMap() .ForMember(dest => dest.EquipmentName, opt => opt.MapFrom(src => src.Equipment.EquipmentName)) .ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.Status.ToString())) .ForMember(dest => dest.StatusDisplay, opt => opt.MapFrom(src => FormatEnumName(src.Status.ToString()))) .ForMember(dest => dest.Priority, opt => opt.MapFrom(src => src.Priority.ToString())) .ForMember(dest => dest.PriorityDisplay, opt => opt.MapFrom(src => src.Priority.ToString())) .ForMember(dest => dest.PerformedByName, opt => opt.MapFrom(src => src.PerformedBy != null ? src.PerformedBy.FullName : null)) .ForMember(dest => dest.AssignedWorkerName, opt => opt.MapFrom(src => src.AssignedUser != null ? src.AssignedUser.FullName : null)) .ForMember(dest => dest.RecurrenceFrequency, opt => opt.MapFrom(src => src.RecurrenceFrequency.HasValue ? FormatEnumName(src.RecurrenceFrequency.Value.ToString()) : null)); // CreateMaintenanceDto to MaintenanceRecord CreateMap() .ForMember(dest => dest.Status, opt => opt.MapFrom(src => Enum.Parse(src.Status))) .ForMember(dest => dest.Priority, opt => opt.MapFrom(src => Enum.Parse(src.Priority))) .ForMember(dest => dest.TotalCost, opt => opt.MapFrom(src => src.LaborCost + src.PartsCost)); // UpdateMaintenanceDto to MaintenanceRecord CreateMap() .ForMember(dest => dest.Status, opt => opt.MapFrom(src => Enum.Parse(src.Status))) .ForMember(dest => dest.Priority, opt => opt.MapFrom(src => Enum.Parse(src.Priority))) .ForMember(dest => dest.TotalCost, opt => opt.MapFrom(src => src.LaborCost + src.PartsCost)); // MaintenanceRecord to UpdateMaintenanceDto (needed for Edit GET action) CreateMap() .ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.Status.ToString())) .ForMember(dest => dest.Priority, opt => opt.MapFrom(src => src.Priority.ToString())); // RecurrenceFrequency, IsRecurring, RecurrenceEndDate map automatically (same type) // MaintenanceRecord to MaintenanceListDto CreateMap() .ForMember(dest => dest.EquipmentName, opt => opt.MapFrom(src => src.Equipment.EquipmentName)) .ForMember(dest => dest.Status, opt => opt.MapFrom(src => src.Status.ToString())) .ForMember(dest => dest.StatusDisplay, opt => opt.MapFrom(src => FormatEnumName(src.Status.ToString()))) .ForMember(dest => dest.Priority, opt => opt.MapFrom(src => src.Priority.ToString())) .ForMember(dest => dest.PriorityDisplay, opt => opt.MapFrom(src => src.Priority.ToString())); // IsRecurring and RecurrenceGroupId map automatically } private static string FormatEnumName(string enumName) { // Convert "InProgress" to "In Progress" return System.Text.RegularExpressions.Regex.Replace(enumName, "([a-z])([A-Z])", "$1 $2"); } }