왼쪽 주매뉴 API 적용

This commit is contained in:
2024-11-17 08:48:39 +09:00
parent 8503ef4f3c
commit 2635c22f27
9 changed files with 253 additions and 30 deletions

View File

@@ -3,6 +3,7 @@ package com.leejk0523.javavue.login.controller;
import com.leejk0523.javavue.login.service.UserLoginService;
import com.leejk0523.javavue.login.vo.In;
import com.leejk0523.javavue.login.vo.Member;
import com.leejk0523.javavue.login.vo.Out;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@@ -16,7 +17,7 @@ public class UserLoginController {
private final UserLoginService userLoginService;
@PostMapping("/api/login")
private ResponseEntity<Member> login(@RequestBody In in) {
private ResponseEntity<Out> login(@RequestBody In in) {
final var authorization = userLoginService.login(in);
if (Objects.isNull(authorization)) {

View File

@@ -3,13 +3,17 @@ package com.leejk0523.javavue.login.dao;
import com.leejk0523.javavue.login.vo.AdminMember;
import com.leejk0523.javavue.login.vo.In;
import com.leejk0523.javavue.login.vo.Member;
import com.leejk0523.javavue.model.AsaAdminMember;
import com.leejk0523.javavue.model.QAsaAdminMember;
import com.leejk0523.javavue.login.vo.Out;
import com.leejk0523.javavue.model.*;
import com.querydsl.core.types.Projections;
import org.springframework.data.jpa.repository.support.QuerydslRepositorySupport;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Component
public class UserLoginDao extends QuerydslRepositorySupport {
@@ -34,4 +38,80 @@ public class UserLoginDao extends QuerydslRepositorySupport {
.where(asaAdminMember.adminId.eq(in.getMemberId()))
.fetchOne();
}
public List<Out.Menu> findAllMenuByAdminId(String adminId) {
final var menu = QAsaMenu.asaMenu;
final var permission = QAsaPermission.asaPermission;
final var adminSiteRoleRel = QAsaAdminSiteRoleRel.asaAdminSiteRoleRel;
return from(menu)
.innerJoin(adminSiteRoleRel).on(
menu.siteId.eq(adminSiteRoleRel.siteId)
)
.innerJoin(permission).on(
adminSiteRoleRel.siteId.eq(permission.siteId)
.and(adminSiteRoleRel.roleCode.eq(permission.roleCode))
.and(menu.menuId.eq(permission.menuId))
)
.distinct()
.select(Projections.bean(
Out.Menu.class,
menu.menuId,
menu.upMenuId,
menu.menuName,
menu.menuType,
menu.menuDepth,
menu.menuOrder,
menu.menuUrl
))
.where(
adminSiteRoleRel.adminId.eq(adminId)
.and(adminSiteRoleRel.siteId.eq("admin"))
.and(menu.menuType.ne(AsaMenu.Type.API))
.and(menu.menuStatus.eq(AsaMenu.Status.ENABLED))
)
.orderBy(menu.menuDepth.asc(), menu.menuOrder.asc())
.fetch();
}
public List<Out.PermitApi> findAllPermitApiByAdminId(String adminId) {
final var menu = QAsaMenu.asaMenu;
final var permission = QAsaPermission.asaPermission;
final var adminSiteRoleRel = QAsaAdminSiteRoleRel.asaAdminSiteRoleRel;
return from(menu)
.innerJoin(adminSiteRoleRel).on(
menu.siteId.eq(adminSiteRoleRel.siteId)
)
.innerJoin(permission).on(
adminSiteRoleRel.siteId.eq(permission.siteId)
.and(adminSiteRoleRel.roleCode.eq(permission.roleCode))
.and(menu.menuId.eq(permission.menuId))
)
.distinct()
.select(Projections.bean(
Out.PermitApi.class,
menu.menuUrl
))
.where(
adminSiteRoleRel.adminId.eq(adminId)
.and(adminSiteRoleRel.siteId.eq("admin"))
.and(menu.menuType.eq(AsaMenu.Type.API))
)
.fetch();
}
public List<AsaRole> findRoleCodeByAdminId(String adminId) {
final var adminSiteRole = QAsaAdminSiteRoleRel.asaAdminSiteRoleRel;
final var role = QAsaRole.asaRole;
return from(adminSiteRole)
.innerJoin(role).on(adminSiteRole.roleCode.eq(role.roleCode)
.and(adminSiteRole.siteId.eq(role.siteId))
)
.select(role)
.where(adminSiteRole.adminId.eq(adminId))
.fetch();
}
}

View File

@@ -7,5 +7,5 @@ import com.leejk0523.javavue.login.vo.Member;
import com.leejk0523.javavue.login.vo.Out;
public interface UserLoginService {
Member login(In in);
Out login(In in);
}

View File

@@ -3,16 +3,57 @@ package com.leejk0523.javavue.login.service;
import com.leejk0523.javavue.login.dao.UserLoginDao;
import com.leejk0523.javavue.login.vo.In;
import com.leejk0523.javavue.login.vo.Member;
import com.leejk0523.javavue.login.vo.Out;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class UserLoginServiceImpl implements UserLoginService {
private final UserLoginDao userLoginDAO;
@Override
public Member login(In in) {
return userLoginDAO.findByMemberId(in);
public Out login(In in) {
var member = userLoginDAO.findByMemberId(in);
var menuList = getMenuList(member.getMemberId());
var permitApiList = userLoginDAO.findAllPermitApiByAdminId(member.getMemberId());
return Out.builder()
.memberNo(member.getMemberNo())
.memberName(member.getMemberName())
.menuList(menuList)
.permitApiList(permitApiList)
.authenticated(true)
.build();
}
private List<Out.Menu> getMenuList(String adminId) {
final var menuList = userLoginDAO.findAllMenuByAdminId(adminId);
final var root = menuList.stream()
.filter(menu -> menu.getMenuDepth().equals(1))
.collect(Collectors.toList());
for (var parent : root) {
nestedMenuList(menuList, parent);
}
return root;
}
private void nestedMenuList(List<Out.Menu> list, Out.Menu parent) {
final var children = list.stream()
.filter(child -> Objects.nonNull(child.getUpMenuId())
&& child.getUpMenuId().equals(parent.getMenuId()))
.collect(Collectors.toList());
parent.setChildren(children.isEmpty() ? null : children);
for (var child : children) {
nestedMenuList(list, child);
}
}
}

View File

@@ -0,0 +1,46 @@
package com.leejk0523.javavue.model;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.persistence.*;
import java.io.Serializable;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "asa_admin_site_role_rel")
@IdClass(AsaAdminSiteRoleRel.Key.class)
public class AsaAdminSiteRoleRel {
@Id
@Size(max = 50)
@NotNull
@Column(name = "ADMIN_ID", nullable = false, length = 50)
private String adminId;
@Id
@Size(max = 20)
@NotNull
@Column(name = "SITE_ID", nullable = false, length = 20)
private String siteId;
@Id
@Size(max = 500)
@Column(name = "ROLE_CODE", length = 100)
private String roleCode;
@Data
public static class Key implements Serializable {
private String adminId;
private String siteId;
private String roleCode;
}
}

View File

@@ -0,0 +1,45 @@
package com.leejk0523.javavue.model;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import jakarta.persistence.*;
import java.io.Serializable;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "ASA_PERMISSION")
@IdClass(AsaPermission.Key.class)
public class AsaPermission {
@Id
@Size(max = 100)
@NotNull
@Column(name = "ROLE_CODE", nullable = false, length = 100)
private String roleCode;
@Id
@Size(max = 100)
@Column(name = "MENU_ID", length = 100, nullable = false)
private String menuId;
@Id
@Size(max = 20)
@NotNull
@Column(name = "SITE_ID", nullable = false, length = 20)
private String siteId;
@Data
public static class Key implements Serializable {
private String roleCode;
private String menuId;
private String siteId;
}
}