From 91679180ecf23c4a3d30fca28a7c6fe58455fad6 Mon Sep 17 00:00:00 2001 From: TekH Date: Sun, 3 Aug 2025 12:25:39 +0200 Subject: [PATCH] feat(UriBuilderResolver): add to be able to dependencies. - add UriBuilderFactory confoguration - inejct UriBuilderResolver as transient --- .../DependencyInjection.cs | 6 +++++ .../{ => Mapping}/MappingProfile.cs | 26 +++++++------------ .../Mapping/UriBuilderResolver.cs | 22 ++++++++++++++++ 3 files changed, 38 insertions(+), 16 deletions(-) rename src/WorkFlow.Application/{ => Mapping}/MappingProfile.cs (69%) create mode 100644 src/WorkFlow.Application/Mapping/UriBuilderResolver.cs diff --git a/src/WorkFlow.Application/DependencyInjection.cs b/src/WorkFlow.Application/DependencyInjection.cs index 4764fca..f45f210 100644 --- a/src/WorkFlow.Application/DependencyInjection.cs +++ b/src/WorkFlow.Application/DependencyInjection.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using WorkFlow.Application.Mapping; namespace WorkFlow.Application; @@ -16,11 +17,16 @@ public static class DependencyInjection cfg.LicenseKey = diOptions.MediatRLicense; }); + services.AddSingleton(diOptions.UriBuilderFactory()); + services.AddTransient(); + return services; } public class WorkFlowServiceOptions { public string MediatRLicense { get; set; } = string.Empty; + + public Func UriBuilderFactory { get; set; } = () => new UriBuilder(); } } \ No newline at end of file diff --git a/src/WorkFlow.Application/MappingProfile.cs b/src/WorkFlow.Application/Mapping/MappingProfile.cs similarity index 69% rename from src/WorkFlow.Application/MappingProfile.cs rename to src/WorkFlow.Application/Mapping/MappingProfile.cs index d1e1e70..d75289c 100644 --- a/src/WorkFlow.Application/MappingProfile.cs +++ b/src/WorkFlow.Application/Mapping/MappingProfile.cs @@ -1,40 +1,34 @@ -using System.Web; -using WorkFlow.Application.Buttons; +using WorkFlow.Application.Buttons; using WorkFlow.Application.Dto; using WorkFlow.Domain.Entities; -namespace WorkFlow.Application; +namespace WorkFlow.Application.Mapping; public class MappingProfile : AutoMapper.Profile { public MappingProfile() { - // Mapping entity to DTO CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap() .ForMember(dest => dest.Headlines, opt => opt.MapFrom(src => new[] { src.Headline1, src.Headline2 })) .ForMember(dest => dest.Sublines, opt => opt.MapFrom(src => new[] { src.Subline1, src.Subline2 })); + CreateMap() .ForMember(dest => dest.Intl, opt => opt.MapFrom(src => src.State1 != null ? src.State1.IntlState : null)) .ForMember(dest => dest.Others, opt => opt.MapFrom(src => new string?[] { src.State2, src.State3, src.State4 })); + CreateMap() .ForMember(dest => dest.Intl, opt => opt.MapFrom(src => src.State1 != null ? src.State1.IntlState : null)) .ForMember(dest => dest.Others, opt => opt.MapFrom(src => new string?[] { src.State2, src.State3, src.State4 })); - CreateMap() - .ForMember(dest => dest.Url, opt => opt.MapFrom(src => UriBuilder.WithPath(src.Path, true))); - } - - public static UriBuilder UriBuilder { get; set; } = new UriBuilder(); -} -internal static class HttpUtilityExtensions -{ - public static UriBuilder WithPath(this UriBuilder builder, string path, bool encode = true) - { - builder.Path = encode ? HttpUtility.UrlEncode(path) : path; - return builder; + CreateMap() + .ForMember(dest => dest.Url, opt => opt.MapFrom()); } } \ No newline at end of file diff --git a/src/WorkFlow.Application/Mapping/UriBuilderResolver.cs b/src/WorkFlow.Application/Mapping/UriBuilderResolver.cs new file mode 100644 index 0000000..9e82724 --- /dev/null +++ b/src/WorkFlow.Application/Mapping/UriBuilderResolver.cs @@ -0,0 +1,22 @@ +using AutoMapper; +using System.Web; +using WorkFlow.Application.Dto; +using WorkFlow.Domain.Entities; + +namespace WorkFlow.Application.Mapping; + +public class UriBuilderResolver : IValueResolver +{ + private readonly UriBuilder _uriBuilder; + + public UriBuilderResolver(UriBuilder uriBuilder) => _uriBuilder = uriBuilder; + + public UriBuilder Resolve(TfFile source, TfFileDto destination, UriBuilder destMember, ResolutionContext context) + { + var builder = new UriBuilder(_uriBuilder.Uri) + { + Path = HttpUtility.UrlEncode(source.Path) + }; + return builder; + } +} \ No newline at end of file