erp-platform/api/src/Kurs.Platform.Application/Reports/ReportAutoMapperProfile.cs
2025-08-15 12:19:20 +03:00

91 lines
3.8 KiB
C#

using AutoMapper;
using Kurs.Platform.Entities;
using System.Text.Json;
using System.Collections.Generic;
namespace Kurs.Platform.Reports
{
public class ReportAutoMapperProfile : Profile
{
public ReportAutoMapperProfile()
{
CreateMap<ReportTemplate, ReportTemplateDto>()
.ForMember(dest => dest.Tags, opt => opt.MapFrom(src =>
ConvertTagsFromJson(src.Tags)))
.ForMember(dest => dest.Parameters, opt => opt.MapFrom(src => src.Parameters));
CreateMap<CreateReportTemplateDto, ReportTemplate>()
.ForMember(dest => dest.Tags, opt => opt.MapFrom(src => ConvertTagsToJson(src.Tags)))
.ForMember(dest => dest.Parameters, opt => opt.Ignore());
CreateMap<UpdateReportTemplateDto, ReportTemplate>()
.ForMember(dest => dest.Tags, opt => opt.MapFrom(src => ConvertTagsToJson(src.Tags)))
.ForMember(dest => dest.Parameters, opt => opt.Ignore());
CreateMap<ReportParameter, ReportParameterDto>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => (ReportParameterType)src.Type));
CreateMap<CreateReportParameterDto, ReportParameter>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => (Entities.ReportParameterType)src.Type))
.ForMember(dest => dest.Id, opt => opt.Ignore())
.ForMember(dest => dest.ReportTemplateId, opt => opt.Ignore());
CreateMap<UpdateReportParameterDto, ReportParameter>()
.ForMember(dest => dest.Type, opt => opt.MapFrom(src => (Entities.ReportParameterType)src.Type))
.ForMember(dest => dest.ReportTemplateId, opt => opt.Ignore());
CreateMap<GeneratedReport, GeneratedReportDto>()
.ForMember(dest => dest.Parameters, opt => opt.MapFrom(src =>
ConvertParametersFromJson(src.Parameters)))
.ForMember(dest => dest.Template, opt => opt.MapFrom(src => src.Template));
CreateMap<GenerateReportDto, GeneratedReport>()
.ForMember(dest => dest.Parameters, opt => opt.MapFrom(src => ConvertParametersToJson(src.Parameters)))
.ForMember(dest => dest.Id, opt => opt.Ignore())
.ForMember(dest => dest.TemplateId, opt => opt.MapFrom(src => src.TemplateId))
.ForMember(dest => dest.TemplateName, opt => opt.Ignore())
.ForMember(dest => dest.GeneratedContent, opt => opt.Ignore())
.ForMember(dest => dest.GeneratedAt, opt => opt.Ignore());
}
private static List<string> ConvertTagsFromJson(string tags)
{
if (string.IsNullOrEmpty(tags))
return new List<string>();
try
{
return JsonSerializer.Deserialize<List<string>>(tags) ?? new List<string>();
}
catch
{
return new List<string>();
}
}
private static string ConvertTagsToJson(List<string> tags)
{
return JsonSerializer.Serialize(tags ?? new List<string>());
}
private static Dictionary<string, string> ConvertParametersFromJson(string parameters)
{
if (string.IsNullOrEmpty(parameters))
return new Dictionary<string, string>();
try
{
return JsonSerializer.Deserialize<Dictionary<string, string>>(parameters) ?? new Dictionary<string, string>();
}
catch
{
return new Dictionary<string, string>();
}
}
private static string ConvertParametersToJson(Dictionary<string, string> parameters)
{
return JsonSerializer.Serialize(parameters ?? new Dictionary<string, string>());
}
}
}