메뉴 추가 및 spotless 적용

This commit is contained in:
2025-12-24 11:04:50 +09:00
parent e0b717ad1b
commit f85d6c07b7
14 changed files with 285 additions and 350 deletions

View File

@@ -1,8 +1,10 @@
package com.kamco.cd.kamcoback.postgres.core;
import com.kamco.cd.kamcoback.menu.dto.MenuDto;
import com.kamco.cd.kamcoback.menu.dto.MyMenuDto;
import com.kamco.cd.kamcoback.postgres.entity.MenuEntity;
import com.kamco.cd.kamcoback.postgres.repository.menu.MenuRepository;
import java.util.Comparator;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -23,16 +25,50 @@ public class MenuCoreService {
* @param role
* @return
*/
public List<MenuDto.Basic> getFindByRole(String role) {
return menuRepository.getFindByRole(role).stream().map(MenuEntity::toDto).toList();
public List<MyMenuDto.Basic> getFindByRole(String role) {
List<MenuEntity> entities = menuRepository.getFindByRole(role);
return entities.stream()
.map(
parent -> {
MyMenuDto.Basic p =
new MyMenuDto.Basic(
parent.getMenuUid(),
parent.getMenuNm(),
parent.getMenuUrl(),
parent.getMenuOrder());
parent.getChildren().stream()
.filter(
c ->
Boolean.TRUE.equals(c.getIsUse()) && Boolean.FALSE.equals(c.getDeleted()))
.sorted(
Comparator.comparing(
MenuEntity::getMenuOrder, Comparator.nullsLast(Long::compareTo)))
.map(
c ->
new MyMenuDto.Basic(
c.getMenuUid(), c.getMenuNm(), c.getMenuUrl(), c.getMenuOrder()))
.forEach(childDto -> p.getChildren().add(childDto));
return p;
})
.sorted(
Comparator.comparing(MyMenuDto.Basic::getOrder, Comparator.nullsLast(Long::compareTo)))
.toList();
}
/**
* 메뉴별 권한 조회
* 사용자 role 기준으로 접근 가능한 메뉴 URL 목록 조회
*
* @param role
* @return
*/
public List<MenuDto.MenuWithRolesDto> getMenuWithRoles() {
return menuRepository.getFindByMenuWithRoles();
public List<String> findAllowedMenuUrlsByRole(String role) {
return menuRepository.findAllowedMenuUrlsByRole(role).stream()
.map(MenuEntity::getMenuUrl)
.filter(url -> url != null && !url.isBlank())
.distinct()
.toList();
}
}

View File

@@ -1,6 +1,5 @@
package com.kamco.cd.kamcoback.postgres.repository.menu;
import com.kamco.cd.kamcoback.menu.dto.MenuDto.MenuWithRolesDto;
import com.kamco.cd.kamcoback.postgres.entity.MenuEntity;
import java.util.List;
@@ -17,9 +16,10 @@ public interface MenuRepositoryCustom {
List<MenuEntity> getFindByRole(String role);
/**
* 메뉴별 권한 조회
* 사용자 role 기준으로 접근 가능한 메뉴 URL 목록 조회
*
* @param role
* @return
*/
List<MenuWithRolesDto> getFindByMenuWithRoles();
List<MenuEntity> findAllowedMenuUrlsByRole(String role);
}

View File

@@ -3,13 +3,8 @@ package com.kamco.cd.kamcoback.postgres.repository.menu;
import static com.kamco.cd.kamcoback.postgres.entity.QMenuEntity.menuEntity;
import static com.kamco.cd.kamcoback.postgres.entity.QMenuMappEntity.menuMappEntity;
import com.kamco.cd.kamcoback.menu.dto.MenuDto.MenuWithRolesDto;
import com.kamco.cd.kamcoback.postgres.entity.MenuEntity;
import com.kamco.cd.kamcoback.postgres.entity.QMenuEntity;
import com.kamco.cd.kamcoback.postgres.entity.QMenuMappEntity;
import com.querydsl.core.types.Expression;
import com.querydsl.core.types.Projections;
import com.querydsl.core.types.dsl.Expressions;
import com.querydsl.jpa.impl.JPAQueryFactory;
import java.util.List;
import lombok.RequiredArgsConstructor;
@@ -34,12 +29,14 @@ public class MenuRepositoryImpl implements MenuRepositoryCustom {
@Override
public List<MenuEntity> getFindByRole(String role) {
QMenuEntity parent = QMenuEntity.menuEntity;
QMenuEntity child = new QMenuEntity("child");
List<MenuEntity> content =
queryFactory
.selectDistinct(menuEntity)
.from(menuEntity)
.leftJoin(menuEntity.children, child)
.selectDistinct(parent)
.from(parent)
.leftJoin(parent.children, child)
.fetchJoin()
.leftJoin(menuMappEntity)
.on(
@@ -47,38 +44,39 @@ public class MenuRepositoryImpl implements MenuRepositoryCustom {
.roleCode
.eq(role)
.and(menuMappEntity.deleted.isFalse())
.and(
menuMappEntity.menuUid.eq(menuEntity).or(menuMappEntity.menuUid.eq(child))))
.and(menuMappEntity.menuUid.eq(child)))
.where(
menuEntity.parent.isNull(),
menuEntity.deleted.isFalse(),
menuEntity.isUse.isTrue(),
parent.parent.isNull(),
parent.deleted.isFalse(),
parent.isUse.isTrue(),
menuMappEntity.id.isNotNull())
.orderBy(menuEntity.menuOrder.asc().nullsLast(), child.menuOrder.asc().nullsLast())
.orderBy(parent.menuOrder.asc().nullsLast(), child.menuOrder.asc().nullsLast())
.fetch();
return content;
}
/**
* 사용자 role 기준으로 접근 가능한 메뉴 URL 목록 조회
*
* @param role
* @return
*/
@Override
public List<MenuWithRolesDto> getFindByMenuWithRoles() {
QMenuEntity tm = menuEntity;
QMenuMappEntity tmm = menuMappEntity;
public List<MenuEntity> findAllowedMenuUrlsByRole(String role) {
Expression<String> roleAgg =
Expressions.stringTemplate("string_agg({0}, {1})", tmm.roleCode, Expressions.constant(","));
List<MenuWithRolesDto> content =
queryFactory
.select(
Projections.constructor(
MenuWithRolesDto.class, tm.menuUid, tm.menuNm, tm.menuUrl, roleAgg))
.from(tm)
.leftJoin(tmm)
.on(tmm.menuUid.eq(tm).and(tmm.deleted.isFalse()))
.where(tm.deleted.isFalse())
.groupBy(tm.menuUid, tm.menuNm, tm.menuUrl)
.fetch();
return content;
return queryFactory
.selectDistinct(menuEntity)
.from(menuMappEntity)
.join(menuMappEntity.menuUid, menuEntity)
.where(
menuMappEntity.roleCode.eq(role),
menuMappEntity.deleted.isFalse(),
menuEntity.deleted.isFalse(),
menuEntity.isUse.isTrue(),
menuEntity.menuUrl.isNotNull(),
menuEntity.menuUrl.isNotEmpty())
.orderBy(menuEntity.menuOrder.asc().nullsLast())
.fetch();
}
}