@@ -44,15 +44,50 @@ public T Build(IDataContext context, IList<IQueryResult> queryResults)
4444
4545 foreach ( var queryResult in queryResults )
4646 transformers . Where ( transformer => IsMatch ( ( ( ITransformerQueryResult ) transformer ) . SupportedQueryResult , queryResult . GetType ( ) ) ) . ToList ( )
47- . ForEach ( supportedtransformer => supportedtransformer ? . Transform ( queryResult , entity ) ) ;
47+ . ForEach ( transformer => TransformWithHooks ( new TransformContext ( context , queryResult , transformer , entity ) ) ) ;
4848 }
4949
5050 return entity ;
5151 }
5252
53- private bool IsMatch ( Type transformer , Type queryResult )
53+ /// <summary>
54+ /// Checks if the transformer query result type matches the query result type.
55+ /// </summary>
56+ /// <param name="transformerQueryResult"></param>
57+ /// <param name="queryResult"></param>
58+ /// <returns></returns>
59+ private bool IsMatch ( Type transformerQueryResult , Type queryResult )
60+ {
61+ return transformerQueryResult == queryResult ;
62+ }
63+
64+ /// <summary>
65+ /// Transform method that includes hooks for pre and post transformation.
66+ /// </summary>
67+ /// <param name="context"></param>
68+ private void TransformWithHooks ( TransformContext context )
5469 {
55- return transformer == queryResult ;
70+ // Create a pre-transform context to pass the data before transformation.
71+ var preTransformContext = new PreTransformContext ( context ) ;
72+ // Call the pre-transform method with the context.
73+ if ( context . Transformer is ITransformerHooks transformerPreHook )
74+ transformerPreHook . PreTransform ( preTransformContext ) ;
75+
76+ // If the pre-transform context is cancelled, skip the transformation.
77+ if ( ! preTransformContext . IsCancelled )
78+ context . Transformer . Transform ( context . QueryResult , context . Entity ) ;
79+
80+ // Post-transform hook can be used to perform any post-transformation logic if needed.
81+ if ( context . Transformer is ITransformerHooks transformerPostHook )
82+ {
83+ // Create a post-transform context to pass the data after transformation.
84+ var postTransformContext = new PostTransformContext ( context ) ;
85+ // Call the post-transform method with the context.
86+ transformerPostHook . PostTransform ( postTransformContext ) ;
87+ // If the post-transform context is repeat, transform again.
88+ if ( postTransformContext . IsRepeat )
89+ context . Transformer . Transform ( context . QueryResult , context . Entity ) ;
90+ }
5691 }
5792 }
5893}
0 commit comments