From d74443c79c9086315e4f8e82127cdc234abfe115 Mon Sep 17 00:00:00 2001 From: RedAvocado Date: Wed, 25 Mar 2026 03:36:03 +0700 Subject: [PATCH 1/3] fix: move @Transactional to execute() in AccountRegistrationService --- .../hms/auth/service/AccountRegistrationService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hms-api/src/main/java/com/hospital/hms/auth/service/AccountRegistrationService.java b/hms-api/src/main/java/com/hospital/hms/auth/service/AccountRegistrationService.java index c835936..3637cff 100644 --- a/hms-api/src/main/java/com/hospital/hms/auth/service/AccountRegistrationService.java +++ b/hms-api/src/main/java/com/hospital/hms/auth/service/AccountRegistrationService.java @@ -27,6 +27,11 @@ public class AccountRegistrationService extends BaseService Date: Wed, 25 Mar 2026 04:07:34 +0700 Subject: [PATCH 2/3] fix: move @Transactional to execute() in GetDepartmentService --- .../hms/department/service/GetDepartmentService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hms-api/src/main/java/com/hospital/hms/department/service/GetDepartmentService.java b/hms-api/src/main/java/com/hospital/hms/department/service/GetDepartmentService.java index 62a268c..45d7019 100644 --- a/hms-api/src/main/java/com/hospital/hms/department/service/GetDepartmentService.java +++ b/hms-api/src/main/java/com/hospital/hms/department/service/GetDepartmentService.java @@ -13,6 +13,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Slf4j @Service @@ -21,6 +22,12 @@ public class GetDepartmentService extends BaseService execute(SearchDepartmentRequest request) { + return super.execute(request); + } + @Override protected PaginatedResponse doProcess(SearchDepartmentRequest request) { log.debug( From 6156a1450fc47069741a6361bc7d100033d4620c Mon Sep 17 00:00:00 2001 From: RedAvocado Date: Wed, 25 Mar 2026 04:10:25 +0700 Subject: [PATCH 3/3] fix: replace direct EmployeeInfo import with EmployeeQueryService in medical domain --- .../service/EmployeeQueryService.java | 28 +++++++++++++++++++ .../response/MedicalRecordDetailResponse.java | 14 +++++----- .../GetMedicalRecordDetailService.java | 17 +++++------ 3 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 hms-api/src/main/java/com/hospital/hms/employee/service/EmployeeQueryService.java diff --git a/hms-api/src/main/java/com/hospital/hms/employee/service/EmployeeQueryService.java b/hms-api/src/main/java/com/hospital/hms/employee/service/EmployeeQueryService.java new file mode 100644 index 0000000..1faf9f1 --- /dev/null +++ b/hms-api/src/main/java/com/hospital/hms/employee/service/EmployeeQueryService.java @@ -0,0 +1,28 @@ +package com.hospital.hms.employee.service; + +import com.hospital.hms.employee.entity.EmployeeInfo; +import com.hospital.hms.employee.repository.EmployeeInfoRepository; +import com.hospital.hms.employee.response.EmployeeResponse; +import com.hospital.hms.exception.NotFoundException; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.UUID; + +@Service +@RequiredArgsConstructor +public class EmployeeQueryService { + + private final EmployeeInfoRepository employeeInfoRepository; + + @Transactional(readOnly = true) + public EmployeeResponse getByAccountId(UUID id) { + EmployeeInfo ei = employeeInfoRepository.findByAccount_Id(id).orElseThrow( + () -> new NotFoundException("Employee info with id: " + id + " not found") + ); + + return EmployeeResponse.from(ei); + } + +} diff --git a/hms-api/src/main/java/com/hospital/hms/medical/response/MedicalRecordDetailResponse.java b/hms-api/src/main/java/com/hospital/hms/medical/response/MedicalRecordDetailResponse.java index 110054c..955974a 100644 --- a/hms-api/src/main/java/com/hospital/hms/medical/response/MedicalRecordDetailResponse.java +++ b/hms-api/src/main/java/com/hospital/hms/medical/response/MedicalRecordDetailResponse.java @@ -1,7 +1,7 @@ package com.hospital.hms.medical.response; import com.hospital.hms.common.enums.Gender; -import com.hospital.hms.employee.entity.EmployeeInfo; +import com.hospital.hms.employee.response.EmployeeResponse; import com.hospital.hms.medical.entity.MedicalRecord; import com.hospital.hms.patient.entity.PatientInfo; @@ -43,19 +43,19 @@ public record DoctorSummary( String departmentName, String code ) { - public static DoctorSummary from(EmployeeInfo employeeInfo) { + public static DoctorSummary from(EmployeeResponse employeeResponse) { return new DoctorSummary( - employeeInfo.getAccount().getFullName(), - employeeInfo.getDepartment().getName(), - employeeInfo.getCode() + employeeResponse.fullName(), + employeeResponse.department().name(), + employeeResponse.code() ); } } - public static MedicalRecordDetailResponse from(MedicalRecord medicalRecord, EmployeeInfo employeeInfo) { + public static MedicalRecordDetailResponse from(MedicalRecord medicalRecord, EmployeeResponse employeeResponse) { return new MedicalRecordDetailResponse( PatientInfoResponse.from(medicalRecord.getPatient()), - DoctorSummary.from(employeeInfo), + DoctorSummary.from(employeeResponse), medicalRecord.getDescription(), medicalRecord.getDoctorAdvice() ); diff --git a/hms-api/src/main/java/com/hospital/hms/medical/service/GetMedicalRecordDetailService.java b/hms-api/src/main/java/com/hospital/hms/medical/service/GetMedicalRecordDetailService.java index 7383b3d..5438281 100644 --- a/hms-api/src/main/java/com/hospital/hms/medical/service/GetMedicalRecordDetailService.java +++ b/hms-api/src/main/java/com/hospital/hms/medical/service/GetMedicalRecordDetailService.java @@ -1,8 +1,8 @@ package com.hospital.hms.medical.service; import com.hospital.hms.base.service.BaseService; -import com.hospital.hms.employee.entity.EmployeeInfo; -import com.hospital.hms.employee.repository.EmployeeInfoRepository; +import com.hospital.hms.employee.response.EmployeeResponse; +import com.hospital.hms.employee.service.EmployeeQueryService; import com.hospital.hms.exception.NotFoundException; import com.hospital.hms.medical.entity.MedicalRecord; import com.hospital.hms.medical.repository.MedicalRecordRepository; @@ -18,7 +18,7 @@ public class GetMedicalRecordDetailService extends BaseService { private final MedicalRecordRepository medicalRecordRepository; - private final EmployeeInfoRepository employeeInfoRepository; + private final EmployeeQueryService employeeQueryService; @Override @Transactional(readOnly = true) @@ -28,14 +28,14 @@ public MedicalRecordDetailResponse execute(MedicalRecordIdRequest request) { @Override protected MedicalRecordDetailResponse doProcess(MedicalRecordIdRequest request) { + if (request.getUserContext() == null) { + throw new AccessDeniedException("You do not have permission to access this resource"); + } + MedicalRecord md = medicalRecordRepository.findById(request.getId()).orElseThrow( () -> new NotFoundException("Medical record with id: " + request.getId() + " not found") ); - EmployeeInfo ei = employeeInfoRepository.findByAccount_Id(md.getDoctor().getId()).orElseThrow( - () -> new NotFoundException("Employee info with id: " + md.getDoctor().getId() + " not found") - ); - if ( request.getUserContext().hasRole("DOCTOR") && !request.getUserContext().getUserId().equals(md.getDoctor().getId()) @@ -43,7 +43,8 @@ protected MedicalRecordDetailResponse doProcess(MedicalRecordIdRequest request) throw new AccessDeniedException("You are not allow to view this medical record"); } + EmployeeResponse employeeResponse = employeeQueryService.getByAccountId(md.getDoctor().getId()); - return MedicalRecordDetailResponse.from(md, ei); + return MedicalRecordDetailResponse.from(md, employeeResponse); } }