public async Task Execute(Generated.WorkOrderComplete workOrderCompleteRequest) { var workOrderId = int.Parse(workOrderCompleteRequest.WorkOrderReference.ID); _logger.LogInformation($"Starting execution of CompleteWorkOrderUseCase for order {workOrderId}"); if (await _workOrderCompletionGateway.IsWorkOrderCompleted(workOrderId)) { throw new NotSupportedException(Resources.CannotCompleteWorkOrderTwice); } var workOrder = await _repairsGateway.GetWorkOrder(workOrderId, true); ValidateRequest(workOrderCompleteRequest); var workOrderComplete = workOrderCompleteRequest.ToDb(workOrder, null); await using var transaction = await _transactionManager.Start(); await UpdateWorkOrderStatus(workOrder, workOrderComplete); await _workOrderCompletionGateway.CreateWorkOrderCompletion(workOrderComplete); await transaction.Commit(); _logger.LogInformation($"Finished execution of CompleteWorkOrderUseCase for order {workOrderId}, publishing result"); await _repairsSnsService.PublishUpdate(workOrder); }
private static void ValidateRequest(Generated.WorkOrderComplete request) { if (!(request.JobStatusUpdates is null)) { if (request.JobStatusUpdates.Any(jsu => jsu.RelatedWorkElementReference != null && jsu.RelatedWorkElementReference.Count > 0)) { throw new NotSupportedException("Related work element references not supported during job completion."); } if (request.JobStatusUpdates.Any(jsu => jsu.AdditionalWork != null)) { throw new NotSupportedException("Additional work not supported during job completion."); } } if (request.FollowOnWorkOrderReference != null && request.FollowOnWorkOrderReference.Count > 0) { throw new NotSupportedException("Follow on work order reference not supported during job completion."); } }