|
| 1 | +using api.Configurations; |
1 | 2 | using api.Database.Context; |
2 | 3 | using api.Database.Models; |
3 | 4 | using api.MQTT; |
4 | 5 | using api.Utilities; |
5 | 6 | using Microsoft.EntityFrameworkCore; |
| 7 | +using Microsoft.Extensions.Options; |
6 | 8 |
|
7 | 9 | namespace api.Services; |
8 | 10 |
|
@@ -30,6 +32,8 @@ int pageSize |
30 | 32 | ); |
31 | 33 |
|
32 | 34 | public Task Delete(Guid id); |
| 35 | + |
| 36 | + public Task<InspectionRecord> AddAnalysis(Guid inspectionRecordId, string analysisName); |
33 | 37 | } |
34 | 38 |
|
35 | 39 | public class InspectionRecordParameters |
@@ -65,9 +69,12 @@ public class CreateInspectionRecordAnalysisGroup |
65 | 69 | public class InspectionRecordService( |
66 | 70 | SaraDbContext context, |
67 | 71 | IAnalysisTriggerService analysisTriggerService, |
| 72 | + IOptions<AnalysisOptions> analysisOptions, |
68 | 73 | ILogger<InspectionRecordService> logger |
69 | 74 | ) : IInspectionRecordService |
70 | 75 | { |
| 76 | + private readonly AnalysisOptions _analysisOptions = analysisOptions.Value; |
| 77 | + |
71 | 78 | public async Task<InspectionRecord> CreateFromMqttMessage(IsarInspectionResultMessage message) |
72 | 79 | { |
73 | 80 | var inspectionId = Sanitize.SanitizeUserInput(message.InspectionId); |
@@ -285,4 +292,31 @@ InspectionRecordParameters parameters |
285 | 292 | parameters.PageSize |
286 | 293 | ); |
287 | 294 | } |
| 295 | + |
| 296 | + public async Task<InspectionRecord> AddAnalysis(Guid inspectionRecordId, string analysisName) |
| 297 | + { |
| 298 | + if (!_analysisOptions.Analyses.ContainsKey(analysisName)) |
| 299 | + { |
| 300 | + throw new InvalidOperationException( |
| 301 | + $"Unknown analysis '{analysisName}'. Valid analyses are: " |
| 302 | + + string.Join(", ", _analysisOptions.Analyses.Keys) |
| 303 | + ); |
| 304 | + } |
| 305 | + |
| 306 | + var record = |
| 307 | + await ReadById(inspectionRecordId) |
| 308 | + ?? throw new KeyNotFoundException( |
| 309 | + $"Inspection record with id {inspectionRecordId} not found" |
| 310 | + ); |
| 311 | + |
| 312 | + await analysisTriggerService.OnInspectionRecordCreated( |
| 313 | + new InspectionRecordCreatedEvent |
| 314 | + { |
| 315 | + InspectionRecordId = record.Id, |
| 316 | + RequiredAnalysis = [analysisName], |
| 317 | + } |
| 318 | + ); |
| 319 | + |
| 320 | + return record; |
| 321 | + } |
288 | 322 | } |
0 commit comments