public async Task <IActionResult> AddLabOrder([FromBody] AddLabOrderCommand addLabOrderCommand) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } var response = await _mediator.Send(addLabOrderCommand, Request.HttpContext.RequestAborted); if (response.IsValid) { return(Ok(response.Value)); } return(BadRequest(response)); }
public async Task <Result <AddLabOrderResponse> > Handle(AddLabOrderCommand request, CancellationToken cancellationToken) { using (var transaction = _labUnitOfWork.BeginTransaction(IsolationLevel.ReadCommitted)) { try { if (request.LabTests == null) { throw new ArgumentException("LabTests details not found"); } var labOrder = _mapper.Map <LabOrder>(request); await _labUnitOfWork.Repository <LabOrder>().AddAsync(labOrder); await _labUnitOfWork.SaveAsync(); var labOrderTests = request.LabTests .Select(x => new LabOrderTest(labOrder.Id, x.Id, x.Notes, request.UserId, false)) .ToList(); await _labUnitOfWork.Repository <LabOrderTest>().AddRangeAsync(labOrderTests); await _labUnitOfWork.SaveAsync(); var patientLabTrackers = new List <PatientLabTracker>(); foreach (var labOrderTest in labOrderTests) { var labName = request.LabTests.FirstOrDefault(x => x.Id == labOrderTest.LabTestId)?.LabTestName; var parameterCount = _labUnitOfWork.Repository <LabTest>().Get(x => x.Id == labOrderTest.LabTestId) .SingleOrDefault()?.ParameterCount; if (parameterCount == 0) { continue; } var orderReason = request.LabTests.SingleOrDefault(x => x.Id == labOrderTest.LabTestId) ?.OrderReason; var patientLabTacker = new PatientLabTracker(request.PatientId, labName, request.PatientMasterVisitId, labOrderTest.LabTestId, labOrder.Id, labOrderTest.Id, request.LocationId, request.OrderDate, request.UserId, orderReason, null); patientLabTrackers.Add(patientLabTacker); } await _labUnitOfWork.Repository <PatientLabTracker>().AddRangeAsync(patientLabTrackers); await _labUnitOfWork.SaveAsync(); transaction.Commit(); return(Result <AddLabOrderResponse> .Valid(new AddLabOrderResponse { LabOrderId = labOrder.Id })); } catch (Exception ex) { string message = $"An error occured while saving lab order request for patientId {request.PatientId}"; Log.Error(ex, message); transaction.Rollback(); return(Result <AddLabOrderResponse> .Invalid(message)); } } }