104 lines
4.1 KiB
Plaintext
104 lines
4.1 KiB
Plaintext
package com.healthcare.ohctech.service.impl;
|
|
|
|
import com.healthcare.ohctech.converter.MenuToMenuDtoConverter;
|
|
import com.healthcare.ohctech.dto.AssignAccessDto;
|
|
import com.healthcare.ohctech.dto.MenuDto;
|
|
import com.healthcare.ohctech.entity.Menu;
|
|
import com.healthcare.ohctech.entity.Role;
|
|
import com.healthcare.ohctech.entity.RoleMenuAccess;
|
|
import com.healthcare.ohctech.entity.RoleMenuAccessPk;
|
|
import com.healthcare.ohctech.repository.MenuRepo;
|
|
import com.healthcare.ohctech.repository.RoleMenuAccessRepo;
|
|
import com.healthcare.ohctech.repository.RoleRepo;
|
|
import com.healthcare.ohctech.service.RoleMenuAccessService;
|
|
import jakarta.persistence.EntityNotFoundException;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
@Service
|
|
public class RoleMenuAccessServiceImpl implements RoleMenuAccessService {
|
|
|
|
private final RoleMenuAccessRepo roleMenuAccessRepo;
|
|
private final RoleRepo roleRepo;
|
|
private final MenuRepo menuRepo;
|
|
private final MenuToMenuDtoConverter menuToMenuDtoConverter;
|
|
|
|
public RoleMenuAccessServiceImpl(RoleMenuAccessRepo roleMenuAccessRepo,RoleRepo roleRepo,
|
|
MenuRepo menuRepo,MenuToMenuDtoConverter menuToMenuDtoConverter){
|
|
this.roleMenuAccessRepo = roleMenuAccessRepo;
|
|
this.roleRepo = roleRepo;
|
|
this.menuRepo = menuRepo;
|
|
this.menuToMenuDtoConverter = menuToMenuDtoConverter;
|
|
}
|
|
@Override
|
|
public void assignMenu(AssignAccessDto assignAccessDto) {
|
|
|
|
try {
|
|
if (assignAccessDto.roleId() == null || assignAccessDto.menuId() == null || assignAccessDto.menuAccessLevel() == null) {
|
|
throw new IllegalArgumentException("Role ID, Menu ID, and Access Level are required");
|
|
}
|
|
|
|
RoleMenuAccessPk roleMenuAccessPk = new RoleMenuAccessPk();
|
|
roleMenuAccessPk.setRoleId(assignAccessDto.roleId());
|
|
roleMenuAccessPk.setMenuId(assignAccessDto.menuId());
|
|
|
|
|
|
RoleMenuAccess roleMenuAccess = new RoleMenuAccess();
|
|
roleMenuAccess.setRoleMenuAccessPk(roleMenuAccessPk);
|
|
|
|
roleMenuAccess.setAccessLevel(assignAccessDto.menuAccessLevel());
|
|
|
|
Menu menu = menuRepo.findById(assignAccessDto.menuId())
|
|
.orElseThrow(() -> new EntityNotFoundException("Menu not found with ID " + assignAccessDto.menuId()));
|
|
|
|
Role role = roleRepo.findById(assignAccessDto.roleId())
|
|
.orElseThrow(() -> new EntityNotFoundException("Role not found with ID " + assignAccessDto.roleId()));
|
|
|
|
|
|
roleMenuAccess.setMenu(menu);
|
|
roleMenuAccess.setRole(role);
|
|
|
|
roleMenuAccessRepo.save(roleMenuAccess);
|
|
} catch (IllegalArgumentException | EntityNotFoundException e) {
|
|
throw e;
|
|
} catch (Exception e) {
|
|
throw new RuntimeException("An unexpected error occurred", e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public List<MenuDto> getAssignedMenus(Long roleId) {
|
|
try {
|
|
if (roleId == null || roleId <= 0) {
|
|
throw new IllegalArgumentException("Invalid roleId provided");
|
|
}
|
|
|
|
List<RoleMenuAccess> roleMenuAccessList = roleMenuAccessRepo.findAllByroleId(roleId);
|
|
List<MenuDto> menuDtoList = new ArrayList<>();
|
|
|
|
// System.out.println("Number of RoleMenuAccess entries found: " + roleMenuAccessList.size());
|
|
|
|
if (roleMenuAccessList != null && !roleMenuAccessList.isEmpty()) {
|
|
List<Menu> menus = roleMenuAccessList.stream()
|
|
.map(roleMenuAccess -> roleMenuAccess.getMenu())
|
|
.collect(Collectors.toList());
|
|
|
|
if (!menus.isEmpty()) {
|
|
menuDtoList = menus.stream()
|
|
.map(menu -> menuToMenuDtoConverter.convert(menu))
|
|
.collect(Collectors.toList());
|
|
}
|
|
}
|
|
|
|
return menuDtoList;
|
|
}catch (Exception e){
|
|
throw new RuntimeException("An unexpected error occurred", e);
|
|
}
|
|
}
|
|
|
|
|
|
}
|