Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ public class AccountRegistrationService extends BaseService<AccountRegistrationR

@Override
@Transactional
public Account execute(AccountRegistrationRequest request) {
return super.execute(request);
}

@Override
protected Account doProcess(AccountRegistrationRequest request) {
log.debug("User saved to local database: {}", request.getUsername());

Expand All @@ -45,7 +50,6 @@ protected Account doProcess(AccountRegistrationRequest request) {
accountRepository.save(account);

try {
//3. save to keycloak
String keycloakUserId;
KeyCloakRequest keyCloakRequest = KeyCloakRequest.builder()
.username(request.getUsername())
Expand All @@ -56,7 +60,6 @@ protected Account doProcess(AccountRegistrationRequest request) {
.build();
keycloakUserId = keycloakService.createUser(keyCloakRequest);

// 4. Assign permissions in Keycloak
keycloakService.assignRoleToUser(keycloakUserId, role.getName().toUpperCase());
} catch (Exception e) {
log.error("Keycloak error during account creation - rolling back", e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -21,6 +22,12 @@ public class GetDepartmentService extends BaseService<SearchDepartmentRequest, P

private final DepartmentRepository departmentRepository;

@Override
@Transactional(readOnly = true)
public PaginatedResponse<DepartmentResponse> execute(SearchDepartmentRequest request) {
return super.execute(request);
}

@Override
protected PaginatedResponse<DepartmentResponse> doProcess(SearchDepartmentRequest request) {
log.debug(
Expand Down
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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;

Expand Down Expand Up @@ -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()
);
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -18,7 +18,7 @@
public class GetMedicalRecordDetailService extends BaseService<MedicalRecordIdRequest, MedicalRecordDetailResponse> {

private final MedicalRecordRepository medicalRecordRepository;
private final EmployeeInfoRepository employeeInfoRepository;
private final EmployeeQueryService employeeQueryService;

@Override
@Transactional(readOnly = true)
Expand All @@ -28,22 +28,23 @@ 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())
) {
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);
}
}
Loading