77 lines
4.2 KiB
C#
77 lines
4.2 KiB
C#
namespace DocuMed.Core.EntityServices;
|
|
|
|
public class MedicalHistoryService : IMedicalHistoryService
|
|
{
|
|
private readonly IRepositoryWrapper _repositoryWrapper;
|
|
private readonly ICurrentUserService _currentUserService;
|
|
private readonly IMedicalHistoryRepository _medicalHistoryRepository;
|
|
|
|
public MedicalHistoryService(IRepositoryWrapper repositoryWrapper, ICurrentUserService currentUserService, IMedicalHistoryRepository medicalHistoryRepository)
|
|
{
|
|
_repositoryWrapper = repositoryWrapper;
|
|
_currentUserService = currentUserService;
|
|
_medicalHistoryRepository = medicalHistoryRepository;
|
|
}
|
|
|
|
public async Task<bool> EditAsync(MedicalHistoryLDto template, CancellationToken cancellationToken)
|
|
{
|
|
if (!Guid.TryParse(_currentUserService.UserId, out Guid userId))
|
|
throw new AppException("دسترسی غیرمجاز", ApiResultStatusCode.UnAuthorized);
|
|
if (template.Id == Guid.Empty)
|
|
throw new AppException("شرح حال پیدا نشد", ApiResultStatusCode.NotFound);
|
|
|
|
var ent = MedicalHistory.Create(template.ChiefComplaint, template.SectionId, template.FirstName,
|
|
template.LastName, template.FatherName, template.NationalId, template.Age, template.BirthDate,
|
|
template.PresentIllnessDetail, template.PastDiseasesHistoryDetail, template.PastSurgeryHistoryDetail,
|
|
template.FamilyHistoryDetail, template.AllergyDetail, template.DrugHistoryDetail,
|
|
template.AddictionHistoryDetail, template.SystemReviewDetail, template.VitalSignDetail, template.GeneralAppearanceDetail,
|
|
template.SystolicBloodPressure, template.DiastolicBloodPressure, template.PulseRate, template.SPO2,
|
|
template.Temperature, template.ApplicationUserId, template.MedicalHistoryTemplateId);
|
|
ent.Id = template.Id;
|
|
ent.CreatedAt = template.CreatedAt;
|
|
|
|
|
|
foreach (var answer in template.Answers.Where(a=>a.Id == Guid.Empty))
|
|
ent.AddAnswer(answer.Answer, answer.Question, answer.Part, answer.QuestionType);
|
|
|
|
|
|
foreach (var answer in template.Answers.Where(a => a.Id != Guid.Empty))
|
|
{
|
|
var dbAnswer = await _repositoryWrapper.SetRepository<MedicalHistoryAnswer>().TableNoTracking
|
|
.FirstOrDefaultAsync(a => a.Id == answer.Id, cancellationToken);
|
|
if (dbAnswer != null && dbAnswer.Answer != answer.Answer && answer.Answer != null)
|
|
{
|
|
dbAnswer = MedicalHistoryAnswer.Create(answer.Answer, answer.Question, answer.Part, answer.QuestionType,
|
|
dbAnswer.MedicalHistoryId);
|
|
dbAnswer.Id = answer.Id;
|
|
_repositoryWrapper.SetRepository<MedicalHistoryAnswer>().Update(dbAnswer);
|
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
|
}
|
|
}
|
|
|
|
_medicalHistoryRepository.Update(ent);
|
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
|
|
|
return true;
|
|
}
|
|
|
|
public async Task<bool> AddAsync(MedicalHistoryLDto template, CancellationToken cancellationToken)
|
|
{
|
|
if (!Guid.TryParse(_currentUserService.UserId, out Guid userId))
|
|
throw new AppException("دسترسی غیرمجاز", ApiResultStatusCode.UnAuthorized);
|
|
var ent = MedicalHistory.Create(template.ChiefComplaint, template.SectionId, template.FirstName,
|
|
template.LastName, template.FatherName, template.NationalId, template.Age, template.BirthDate,
|
|
template.PresentIllnessDetail, template.PastDiseasesHistoryDetail, template.PastSurgeryHistoryDetail,
|
|
template.FamilyHistoryDetail, template.AllergyDetail, template.DrugHistoryDetail,
|
|
template.AddictionHistoryDetail, template.SystemReviewDetail, template.VitalSignDetail, template.GeneralAppearanceDetail,
|
|
template.SystolicBloodPressure, template.DiastolicBloodPressure, template.PulseRate, template.SPO2,
|
|
template.Temperature, userId,template.MedicalHistoryTemplateId);
|
|
|
|
foreach (var answer in template.Answers)
|
|
ent.AddAnswer(answer.Answer, answer.Question, answer.Part, answer.QuestionType);
|
|
|
|
_medicalHistoryRepository.Add(ent);
|
|
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
|
return true;
|
|
}
|
|
} |