22using MapperAI . Core . Chains . Interfaces ;
33using MapperAI . Core . Chains . Payloads ;
44using MapperAI . Core . Enums ;
5- using MapperAI . Core . Extensions . Utils ;
65
76namespace MapperAI . Core . Chains
87{
@@ -12,51 +11,42 @@ public static IDictionary<HandlerType, IHandler> GetHandlers()
1211 {
1312 return new Dictionary < HandlerType , IHandler >
1413 {
15- { HandlerType . Filter , GetConfiguredHandlers ( GetFilters ( ) ) } ,
16- { HandlerType . Payload , GetConfiguredHandlers ( GetPayloads ( ) ) }
14+ { HandlerType . Filter , BuildChain ( GetFilters ( ) ) } ,
15+ { HandlerType . Payload , BuildChain ( GetPayloads ( ) ) }
1716 } ;
1817 }
1918
20- private static T GetConfiguredHandlers < T > ( Queue < T > handlers )
19+ private static T BuildChain < T > ( IEnumerable < T > handlers )
2120 where T : class , IHandler
2221 {
23- var firstHandler = handlers . Dequeue ( ) ;
24- if ( handlers . Count > 0 )
22+ var handlerList = handlers . ToList ( ) ;
23+ if ( handlerList . Count == 0 )
24+ throw new InvalidOperationException ( "No handlers provided to build the chain." ) ;
25+
26+ for ( int i = 0 ; i < handlerList . Count - 1 ; i ++ )
2527 {
26- return BuildHandlers ( firstHandler , null , handlers ) ;
28+ handlerList [ i ] . SetNext ( handlerList [ i + 1 ] ) ;
2729 }
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 ) ;
4130
42- lastHandler = handler ;
43- return BuildHandlers ( firstHandler , lastHandler , handlers ) ;
31+ return handlerList [ 0 ] ;
4432 }
45- private static Queue < IFilterHandler > GetFilters ( )
33+
34+ private static IEnumerable < IFilterHandler > GetFilters ( )
4635 {
47- return new Queue < IFilterHandler > (
48- [
36+ return new List < IFilterHandler >
37+ {
4938 new GeminiFilter ( ) ,
5039 new OllamaFilter ( )
51- ] ) ;
40+ } ;
5241 }
53- private static Queue < IPayloadHandler > GetPayloads ( )
42+
43+ private static IEnumerable < IPayloadHandler > GetPayloads ( )
5444 {
55- return new Queue < IPayloadHandler > (
56- [
45+ return new List < IPayloadHandler >
46+ {
5747 new GeminiPayload ( ) ,
5848 new OllamaPayload ( )
59- ] ) ;
49+ } ;
6050 }
61- }
51+ }
6252}
0 commit comments