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 getAssignedMenus(Long roleId) { try { if (roleId == null || roleId <= 0) { throw new IllegalArgumentException("Invalid roleId provided"); } List roleMenuAccessList = roleMenuAccessRepo.findAllByroleId(roleId); List menuDtoList = new ArrayList<>(); // System.out.println("Number of RoleMenuAccess entries found: " + roleMenuAccessList.size()); if (roleMenuAccessList != null && !roleMenuAccessList.isEmpty()) { List 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); } } }