public async Task <Result <AddEncounterResponse> > Handle(AddEncounterCommand request, CancellationToken cancellationToken) { // TODO: use automapper using (var trans = _unitOfWork.Context.Database.BeginTransaction()) { try { // create HtsEncounter instance var htsEncounter = new HtsEncounter { EncounterRemarks = request.Encounter.EncounterRemarks, EverSelfTested = request.Encounter.EverSelfTested, EverTested = request.Encounter.EverTested, GeoLocation = request.Encounter.GeoLocation, MonthSinceSelfTest = request.Encounter.MonthSinceSelfTest, MonthsSinceLastTest = request.Encounter.MonthsSinceLastTest, PatientEncounterID = request.Encounter.PatientEncounterID, PersonId = request.Encounter.PersonId, ProviderId = request.Encounter.ProviderId, TestedAs = request.Encounter.TestedAs, TestEntryPoint = request.Encounter.TestEntryPoint, TestingStrategy = request.Encounter.TestingStrategy, EncounterType = request.Encounter.EncounterType, HivCounsellingDone = request.Encounter.HivCounsellingDone, OtherDisability = request.Encounter.OtherDisability }; await _unitOfWork.Repository <HtsEncounter>().AddAsync(htsEncounter); await _unitOfWork.SaveAsync(); if (request.Encounter.Disabilities.Any()) { List <ClientDisability> clientDisabilities = new List <ClientDisability>(); request.Encounter.Disabilities.ForEach(x => clientDisabilities.Add(new ClientDisability { DisabilityId = x, PatientEncounterId = request.Encounter.PatientEncounterID, PersonId = request.Encounter.PersonId, CreateDate = DateTime.Now, CreatedBy = request.Encounter.ProviderId, DeleteFlag = false })); await _unitOfWork.Repository <ClientDisability>().AddRangeAsync(clientDisabilities); await _unitOfWork.SaveAsync(); } trans.Commit(); _unitOfWork.Dispose(); return(Result <AddEncounterResponse> .Valid(new AddEncounterResponse { HtsEncounterId = htsEncounter.Id })); } catch (Exception ex) { trans.Rollback(); Log.Error(ex.Message); // TODO: log error return(Result <AddEncounterResponse> .Invalid(ex.Message)); } } }
public async Task <IActionResult> Post([FromBody] AddEncounterCommand addEncounterCommand) { var encounter = await _mediator.Send(new AddEncounterVisitCommand { PatientId = addEncounterCommand.Encounter.PatientId, ServiceAreaId = addEncounterCommand.Encounter.ServiceAreaId, EncounterType = addEncounterCommand.Encounter.EncounterTypeId, UserId = addEncounterCommand.Encounter.ProviderId, EncounterDate = addEncounterCommand.Encounter.EncounterDate }, Request.HttpContext.RequestAborted); if (encounter.IsValid) { addEncounterCommand.Encounter.PatientEncounterID = encounter.Value.PatientEncounterId; } else { return(BadRequest(encounter)); } var consentList = new List <KeyValuePair <string, int> >(); consentList.Add(new KeyValuePair <string, int>("ConsentToBeTested", addEncounterCommand.Encounter.Consent)); var consent = await _mediator.Send(new AddConsentCommand() { PatientID = addEncounterCommand.Encounter.PatientId, PatientMasterVisitId = encounter.Value.PatientMasterVisitId, ConsentDate = addEncounterCommand.Encounter.EncounterDate, ConsentType = consentList, ServiceAreaId = addEncounterCommand.Encounter.ServiceAreaId, UserId = addEncounterCommand.Encounter.ProviderId }, Request.HttpContext.RequestAborted); if (consent.IsValid) { } else { return(BadRequest(encounter)); } var screeningList = new List <KeyValuePair <string, int> >(); screeningList.Add(new KeyValuePair <string, int>("TbScreening", addEncounterCommand.Encounter.TbScreening)); var tbScreening = await _mediator.Send(new AddPatientScreeningCommand() { PatientId = addEncounterCommand.Encounter.PatientId, PatientMasterVisitId = encounter.Value.PatientMasterVisitId, ScreeningDate = addEncounterCommand.Encounter.EncounterDate, UserId = addEncounterCommand.Encounter.ProviderId, PersonId = addEncounterCommand.Encounter.PersonId, ScreeningType = screeningList }, Request.HttpContext.RequestAborted); if (tbScreening.IsValid) { } else { return(BadRequest(tbScreening)); } var response = await _mediator.Send(addEncounterCommand, Request.HttpContext.RequestAborted); if (response.IsValid) { response.Value.PatientMasterVisitId = encounter.Value.PatientMasterVisitId; return(Ok(response.Value)); } return(BadRequest(response)); }