@page "/doctor/patients_medical_history" @attribute [Authorize(Roles = UserRoles.Doctor)] @layout DoctorLayout @inject IDoctorManagementService DoctorManagementService @inject IAuthenticationService AuthenticationService @inject IJSRuntime JSRuntime

Patient Medical Histories

@if (!string.IsNullOrEmpty(statusMessage)) { }
@foreach (var patient in patients) {
Status: @if (patientHasAccess(patient.Id)) { Granted } else { Revoked }
Patient
@patient.Name
}
@code { private string statusMessage; private bool isSuccess; private List patients = new(); private List grantedAccessPatients = new(); protected override async Task OnInitializedAsync() { await LoadPatientsAndAccessStatus(); } private async Task LoadPatientsAndAccessStatus() { var userInfo = await AuthenticationService.GetUserInformation(); patients = await DoctorManagementService.GetAllPatientsAsync(); await UpdatePatientAccessStatuses(userInfo.Id); } private async Task UpdatePatientAccessStatuses(Guid doctorId) { foreach (var patient in patients) { var medicalHistory = await DoctorManagementService.GetMedicalHistoryAsync(patient.Id); if (medicalHistory == null) continue; if (await DoctorManagementService.CheckForAccessAsync(medicalHistory.Id, doctorId)) { grantedAccessPatients.Add(patient.Id); } } StateHasChanged(); } private bool patientHasAccess(Guid patientId) { return grantedAccessPatients.Contains(patientId); } private async Task DownloadMedicalHistory(Guid patientId) { var medicalHistory = await DoctorManagementService.DownloadMedicalHistoryAsync(patientId); if (medicalHistory != null) { var base64 = Convert.ToBase64String(medicalHistory); var href = $"data:application/octet-stream;base64,{base64}"; await JSRuntime.InvokeVoidAsync("downloadFile", "MedicalHistory.pdf", href); } else { statusMessage = "Failed to download medical history."; isSuccess = false; } } }