Skip to content

Commit 181a961

Browse files
committed
refactor: handlers code
1 parent 5214316 commit 181a961

21 files changed

Lines changed: 113 additions & 367 deletions

MapperAI.sln.DotSettings.user

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
22
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AHttpClient_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003FAppData_003FRoaming_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003Fc439425da351c75ac7d966a1cc8324b51a9c471865af79d2f2f3fcb65e392_003FHttpClient_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
33
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003APdfDocument_002Ecs_002Fl_003AC_0021_003FUsers_003FDri_003FAppData_003FRoaming_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fcbf868f2490746fbab2087b4b2ac8198ff600_003F67_003Ff809c9c7_003FPdfDocument_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
4-
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=d39466df_002D95ec_002D4aa7_002D8782_002D2da15a2a8174/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="GeminiFileMapperTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
4+
<s:String x:Key="/Default/Environment/UnitTesting/UnitTestSessionStore/Sessions/=94598645_002Dc58c_002D4f8d_002D8bc3_002Dc3820288f2dd/@EntryIndexedValue">&lt;SessionState ContinuousTestingMode="0" IsActive="True" Name="GeminiClassMapperTests" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"&gt;&#xD;
55
&lt;TestAncestor&gt;&#xD;
6-
&lt;TestId&gt;xUnit::8B3E109D-96CA-4B6D-B379-6AF70646DC25::net8.0::MapperAI.Test.FileMapper.Gemini.GeminiFileMapperTests&lt;/TestId&gt;&#xD;
76
&lt;TestId&gt;xUnit::8B3E109D-96CA-4B6D-B379-6AF70646DC25::net8.0::MapperAI.Test.ClassMapper.Gemini.GeminiClassMapperTests&lt;/TestId&gt;&#xD;
8-
&lt;TestId&gt;xUnit::8B3E109D-96CA-4B6D-B379-6AF70646DC25::net8.0::MapperAI.Test.PdfMapper.Gemini.GeminiPdfMapperTests&lt;/TestId&gt;&#xD;
7+
&lt;TestId&gt;xUnit::8B3E109D-96CA-4B6D-B379-6AF70646DC25::net8.0::MapperAI.Test.FileMapper.Gemini.GeminiFileMapperTests&lt;/TestId&gt;&#xD;
98
&lt;/TestAncestor&gt;&#xD;
109
&lt;/SessionState&gt;</s:String>
1110

1211

12+
1313
</wpf:ResourceDictionary>
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
using MapperAI.Core.Chains.Filters;
2+
using MapperAI.Core.Chains.Interfaces;
3+
using MapperAI.Core.Chains.Payloads;
4+
using MapperAI.Core.Enums;
5+
using MapperAI.Core.Extensions.Utils;
6+
7+
namespace MapperAI.Core.Chains
8+
{
9+
internal static class ChainConfigurator
10+
{
11+
public static IDictionary<HandlerType, IHandler> GetHandlers()
12+
{
13+
return new Dictionary<HandlerType, IHandler>
14+
{
15+
{ HandlerType.Filter, GetConfiguredHandlers(GetFilters()) },
16+
{ HandlerType.Payload, GetConfiguredHandlers(GetPayloads()) }
17+
};
18+
}
19+
20+
private static T GetConfiguredHandlers<T>(Queue<T> handlers)
21+
where T : class, IHandler
22+
{
23+
var firstHandler = handlers.Dequeue();
24+
if (handlers.Count > 0)
25+
{
26+
return BuildHandlers(firstHandler, null, handlers);
27+
}
28+
return firstHandler;
29+
}
30+
private static T BuildHandlers<T>(T firstHandler, T? lastHandler, Queue<T> handlers)
31+
where T : class, IHandler
32+
{
33+
var handler = handlers.DequeueOrDefault();
34+
if (handler == null)
35+
return firstHandler;
36+
37+
if (lastHandler == null)
38+
firstHandler.SetNext(handler);
39+
else
40+
lastHandler.SetNext(handler);
41+
42+
lastHandler = handler;
43+
return BuildHandlers(firstHandler, lastHandler, handlers);
44+
}
45+
private static Queue<IFilterHandler> GetFilters()
46+
{
47+
return new Queue<IFilterHandler>(
48+
[
49+
new GeminiFilter(),
50+
new OllamaFilter()
51+
]);
52+
}
53+
private static Queue<IPayloadHandler> GetPayloads()
54+
{
55+
return new Queue<IPayloadHandler>(
56+
[
57+
new GeminiPayload(),
58+
new OllamaPayload()
59+
]);
60+
}
61+
}
62+
}

src/MapperAI.Core/Clients/GenericMapperClient.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,31 @@
22
using MapperAI.Core.Chains.Interfaces;
33
using MapperAI.Core.Clients.Interfaces;
44
using MapperAI.Core.Clients.Models;
5+
using MapperAI.Core.Enums;
56
using MapperAI.Core.Exceptions;
67
using MapperAI.Core.Serializers.Interfaces;
78

89
namespace MapperAI.Core.Clients;
910

1011
internal class GenericMapperClient : MapperClientBase, IMapperClient
1112
{
12-
private readonly IFilterHandler _filterHandler;
13-
private readonly IPayloadHandler _payloadHandler;
13+
private readonly IDictionary<HandlerType, IHandler> _handlers;
1414

15-
public GenericMapperClient(MapperClientConfiguration mapperClientConfiguration, IMapperSerializer serializer, HttpClient httpClient, IFilterHandler filterHandler, IPayloadHandler payloadHandler) : base(mapperClientConfiguration, serializer, httpClient)
15+
public GenericMapperClient(MapperClientConfiguration mapperClientConfiguration, IMapperSerializer serializer, HttpClient httpClient, IDictionary<HandlerType, IHandler> handlers) : base(mapperClientConfiguration, serializer, httpClient)
1616
{
17-
_filterHandler = filterHandler;
18-
_payloadHandler = payloadHandler;
17+
_handlers = handlers;
1918
}
2019

21-
2220
public async Task<MapperClientResponse> SendAsync(string prompt, CancellationToken cancellationToken)
2321
{
22+
if (!_handlers.TryGetValue(HandlerType.Payload, out IHandler? payloadHandler) || payloadHandler is not IPayloadHandler _payloadHandler)
23+
{
24+
throw new MapperException("Payload handler not found.");
25+
}
26+
if (!_handlers.TryGetValue(HandlerType.Filter, out IHandler? filterHandler) || filterHandler is not IFilterHandler _filterHandler)
27+
{
28+
throw new MapperException("Filter handler not found.");
29+
}
2430
dynamic? payload = _payloadHandler.CreatePayload(prompt, MapperClientConfiguration.ModelType);
2531
if (payload == null) throw new MapperException("");
2632
using JsonDocument result = await GetAsync(MapperClientConfiguration.Endpoint, payload, cancellationToken);
Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,17 @@
1-
using MapperAI.Core.Chains.Filters;
2-
using MapperAI.Core.Chains.Interfaces;
3-
using MapperAI.Core.Chains.Payloads;
1+
using MapperAI.Core.Chains;
42
using MapperAI.Core.Clients.Interfaces;
53
using MapperAI.Core.Clients.Models;
64
using MapperAI.Core.Enums;
7-
using MapperAI.Core.Extensions.Utils;
85
using MapperAI.Core.Serializers.Interfaces;
96

107
namespace MapperAI.Core.Clients;
118

129
public class MapperClientFactory(IMapperSerializer serializer, HttpClient httpClient) : IMapperClientFactory
1310
{
14-
private readonly Queue<IFilterHandler> _queueFiltersHandlers = new([new GeminiFilter(), new OllamaFilter()]);
15-
private readonly Queue<IPayloadHandler> _queuePayloadHandlers = new([new GeminiPayload(), new OllamaPayload()]);
16-
1711
public IMapperClient CreateClient(MapperClientConfiguration configuration)
1812
{
19-
var firstFilterHandler = _queueFiltersHandlers.Dequeue();
20-
var firstPayloadHandler = _queuePayloadHandlers.Dequeue();
21-
firstFilterHandler = SetNextHandlers(firstFilterHandler, null, _queueFiltersHandlers);
22-
firstPayloadHandler = SetNextHandlers(firstPayloadHandler, null, _queuePayloadHandlers);
2313
configuration.Endpoint = GetEndpoint(configuration);
24-
return new GenericMapperClient(configuration, serializer, httpClient, firstFilterHandler, firstPayloadHandler);
14+
return new GenericMapperClient(configuration, serializer, httpClient, ChainConfigurator.GetHandlers());
2515
}
2616

2717
private static string GetEndpoint(MapperClientConfiguration configuration)
@@ -35,19 +25,4 @@ private static string GetEndpoint(MapperClientConfiguration configuration)
3525
};
3626
}
3727

38-
private static T SetNextHandlers<T>(T firstHandler, T? lastHandler, Queue<T> handlers)
39-
where T : class, IHandler
40-
{
41-
var handler = handlers.DequeueOrDefault();
42-
if (handler == null)
43-
return firstHandler;
44-
45-
if (lastHandler == null)
46-
firstHandler.SetNext(handler);
47-
else
48-
lastHandler.SetNext(handler);
49-
50-
lastHandler = handler;
51-
return SetNextHandlers(firstHandler, lastHandler, handlers);
52-
}
5328
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace MapperAI.Core.Enums
8+
{
9+
internal enum HandlerType
10+
{
11+
Payload,
12+
Filter
13+
}
14+
}

test/MapperAI.Test/ClassMapper/Gemini/GeminiClassMapperTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
using MapperAI.Core.Enums;
3-
using MapperAI.Core.Mappers;
43
using MapperAI.Core.Mappers.Interfaces;
54
using MapperAI.Test.Utils.Mocks;
65

test/MapperAI.Test/FileMapper/Gemini/GeminiFileMapperTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11

22
using MapperAI.Core.Enums;
3-
using MapperAI.Core.Mappers;
43
using MapperAI.Core.Mappers.Interfaces;
54
using MapperAI.Core.Mappers.Models;
65
using MapperAI.Test.Utils.Helpers;

test/MapperAI.Test/MappedClasses/Carro.go

Lines changed: 0 additions & 36 deletions
This file was deleted.

test/MapperAI.Test/MappedClasses/Carro.php

Lines changed: 0 additions & 44 deletions
This file was deleted.

test/MapperAI.Test/MappedClasses/CarroGo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,4 @@ func (c *Carro) ExibirInformacoes() {
3737
func (c *Carro) IsAntigo() bool {
3838
anoAtual := time.Now().Year()
3939
return (anoAtual - c.Ano) > 20
40-
}
40+
}

0 commit comments

Comments
 (0)