왼쪽 주매뉴 API 적용
This commit is contained in:
@@ -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)) {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user