88using SqlAnalyzer . Api . Services . LlmClient . Interfaces ;
99using SqlAnalyzer . Api . Services . QueryAnalysis . Interfaces ;
1010using SqlAnalyzerLib . Facade . Interfaces ;
11+ using SqlAnalyzerLib . SqlStaticAnalysis . Constants ;
12+ using SqlAnalyzerLib . SqlStaticAnalysis . Models ;
1113
1214namespace SqlAnalyzer . Api . Services . QueryAnalysis ;
1315
@@ -126,7 +128,6 @@ public async Task<QueryAnalysisResultDto> Analyze(Guid queryId, bool useLlm, IRe
126128 ExplainResult = query . ExplainResult ,
127129 AlgorithmRecommendation = analysis . Recommendations ,
128130 LlmRecommendations = analysis . LlmResult ,
129- FindindCustomRules = analysis . FindindCustomRules ?? [ ] ,
130131 ExplainComparisonDto = _explainer . Compare ( query . ExplainResult , analysis . LlmResult ? . ExplainResult )
131132 } ;
132133 }
@@ -152,6 +153,7 @@ public async Task<QueryAnalysisResultDto> Analyze(Guid queryId, bool useLlm, IRe
152153 _db . QueryAnalysisResults . Add ( result ) ;
153154 await _db . SaveChangesAsync ( ) ;
154155
156+ await AddCustomToAnalysisResult ( customFindings , analysisResult ) ;
155157
156158 return new QueryAnalysisResultDto
157159 {
@@ -161,11 +163,28 @@ public async Task<QueryAnalysisResultDto> Analyze(Guid queryId, bool useLlm, IRe
161163 ExplainResult = query . ExplainResult ,
162164 AlgorithmRecommendation = analysisResult ,
163165 LlmRecommendations = llmAnswer ,
164- FindindCustomRules = customFindings ,
165166 ExplainComparisonDto = _explainer . Compare ( query . ExplainResult , llmAnswer ? . ExplainResult )
166167 } ;
167168 }
168169
170+ private async Task AddCustomToAnalysisResult ( IReadOnlyCollection < Guid > customFindings ,
171+ SqlAlgorithmAnalysisResult analysisResult )
172+ {
173+ // todo! переделать чтобы у всех правил был айдишник
174+ var customRules = await _db . SqlAnalyzeRules . Where ( x => customFindings . Contains ( x . Id ) ) . ToListAsync ( ) ;
175+ foreach ( var customRule in customRules )
176+ {
177+ analysisResult . QueryAnalysisResult . Findings . Add (
178+ new StaticAnalysisPoint (
179+ StaticRules . Custom ,
180+ customRule . Severity ,
181+ customRule . Problem ,
182+ customRule . Recommendation
183+ )
184+ ) ;
185+ }
186+ }
187+
169188 private async Task < SqlLlmAnalysisResult > GetLlmResult ( QueryAnalysis query )
170189 {
171190 var llmAnswer = await _llm . GetRecommendation (
@@ -196,16 +215,17 @@ private async Task UpdateQueryAnalysisResult(bool useLlm, IReadOnlyCollection<Gu
196215 }
197216
198217 var newRules = ruleIds ? . Except ( analysisResult . FindindCustomRules ?? [ ] ) . ToList ( ) ;
218+ IReadOnlyCollection < Guid > customFindings = [ ] ;
199219 if ( newRules ? . Count > 0 )
200220 {
201- var newFindings = await _customRulesService . ApplyForQuery ( analysisResult . Query , newRules ) ;
221+ customFindings = await _customRulesService . ApplyForQuery ( analysisResult . Query , newRules ) ;
202222 if ( analysisResult . FindindCustomRules is null )
203223 {
204- analysisResult . FindindCustomRules = newFindings . ToList ( ) ;
224+ analysisResult . FindindCustomRules = customFindings . ToList ( ) ;
205225 }
206226 else
207227 {
208- analysisResult . FindindCustomRules . AddRange ( newFindings ) ;
228+ analysisResult . FindindCustomRules . AddRange ( customFindings ) ;
209229 }
210230
211231 isUpdated = true ;
@@ -215,5 +235,7 @@ private async Task UpdateQueryAnalysisResult(bool useLlm, IReadOnlyCollection<Gu
215235 {
216236 await _db . SaveChangesAsync ( ) ;
217237 }
238+
239+ await AddCustomToAnalysisResult ( customFindings , analysisResult . Recommendations ) ;
218240 }
219241}
0 commit comments