admin: domain 관심사 분리

This commit is contained in:
geonhos 2024-05-17 10:58:00 +09:00
parent f66c5afe0a
commit bc853e023e
28 changed files with 175 additions and 186 deletions

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity; package com.bpgroup.poc.admin.domain.base;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners; import jakarta.persistence.EntityListeners;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.admin.entity; package com.bpgroup.poc.admin.domain.base.admin.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.base.BaseEntity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
@ -30,12 +30,13 @@ public class Admin extends BaseEntity {
private AdminRole adminRole; private AdminRole adminRole;
@Builder @Builder
public static Admin of(String loginId, String password, String email, String name) { public static Admin of(String loginId, String password, String email, String name, AdminRole adminRole) {
Admin admin = new Admin(); Admin admin = new Admin();
admin.loginId = loginId; admin.loginId = loginId;
admin.password = password; admin.password = password;
admin.email = email; admin.email = email;
admin.name = name; admin.name = name;
admin.adminRole = adminRole;
return admin; return admin;
} }
@ -46,7 +47,4 @@ public class Admin extends BaseEntity {
this.adminRole = admin.adminRole; this.adminRole = admin.adminRole;
} }
public void setAdminRole(AdminRole adminRole) {
this.adminRole = adminRole;
}
} }

View File

@ -1,6 +1,7 @@
package com.bpgroup.poc.admin.domain.base.admin.service; package com.bpgroup.poc.admin.domain.base.admin.service;
import com.bpgroup.poc.admin.domain.base.admin.entity.Admin; import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRole;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;
@ -19,16 +20,16 @@ public class AdminCreateCommand {
@NotBlank @NotBlank
private String name; private String name;
@NotNull @NotNull
private Long roleId; private AdminRole adminRole;
@Builder @Builder
public static AdminCreateCommand of(String loginId, String password, String email, String name, Long roleId) { public static AdminCreateCommand of(String loginId, String password, String email, String name, AdminRole adminRole) {
AdminCreateCommand command = new AdminCreateCommand(); AdminCreateCommand command = new AdminCreateCommand();
command.loginId = loginId; command.loginId = loginId;
command.password = password; command.password = password;
command.email = email; command.email = email;
command.name = name; command.name = name;
command.roleId = roleId; command.adminRole = adminRole;
return command; return command;
} }
@ -38,6 +39,7 @@ public class AdminCreateCommand {
.password(password) .password(password)
.email(email) .email(email)
.name(name) .name(name)
.adminRole(adminRole)
.build(); .build();
} }

View File

@ -1,18 +0,0 @@
package com.bpgroup.poc.admin.domain.base.admin.service;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@Getter
@ToString
public class AdminCreateResult {
private Long id;
@Builder
public static AdminCreateResult of(Long id) {
AdminCreateResult result = new AdminCreateResult();
result.id = id;
return result;
}
}

View File

@ -2,9 +2,6 @@ package com.bpgroup.poc.admin.domain.base.admin.service;
import com.bpgroup.poc.admin.domain.base.admin.entity.Admin; import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRepository; import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRepository;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRole;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -21,28 +18,11 @@ import java.util.Optional;
public class AdminService { public class AdminService {
private final AdminRepository adminRepository; private final AdminRepository adminRepository;
private final RoleRepository roleRepository;
public AdminCreateResult create( public Admin create(
@NotNull @Valid AdminCreateCommand command @NotNull @Valid AdminCreateCommand command
) { ) {
Optional<Role> findRole = roleRepository.findById(command.getRoleId()); return adminRepository.save(command.toEntity());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Not found role");
}
Role role = findRole.get();
Admin admin = command.toEntity();
admin.setAdminRole(
AdminRole.builder()
.role(role)
.build()
);
Admin savedAdmin = adminRepository.save(admin);
return AdminCreateResult.builder()
.id(savedAdmin.getId())
.build();
} }
public void update( public void update(
@ -53,19 +33,8 @@ public class AdminService {
throw new IllegalArgumentException("Not found admin"); throw new IllegalArgumentException("Not found admin");
} }
Optional<Role> findRole = roleRepository.findById(command.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Not found role");
}
Role role = findRole.get();
Admin admin = findAdmin.get(); Admin admin = findAdmin.get();
admin.setAdminRole( admin.update(command.toEntity());
AdminRole.builder()
.role(role)
.build()
);
admin.update(admin);
} }
public void delete(@NotNull Long id) { public void delete(@NotNull Long id) {

View File

@ -1,6 +1,7 @@
package com.bpgroup.poc.admin.domain.base.admin.service; package com.bpgroup.poc.admin.domain.base.admin.service;
import com.bpgroup.poc.admin.domain.base.admin.entity.Admin; import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRole;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;
@ -19,16 +20,16 @@ public class AdminUpdateCommand {
@NotBlank @NotBlank
private String name; private String name;
@NotNull @NotNull
private Long roleId; private AdminRole adminRole;
@Builder @Builder
public static AdminUpdateCommand of(Long id, String password, String email, String name, Long roleId) { public static AdminUpdateCommand of(Long id, String password, String email, String name, AdminRole adminRole) {
AdminUpdateCommand command = new AdminUpdateCommand(); AdminUpdateCommand command = new AdminUpdateCommand();
command.id = id; command.id = id;
command.password = password; command.password = password;
command.email = email; command.email = email;
command.name = name; command.name = name;
command.roleId = roleId; command.adminRole = adminRole;
return command; return command;
} }
@ -37,6 +38,7 @@ public class AdminUpdateCommand {
.password(password) .password(password)
.email(email) .email(email)
.name(name) .name(name)
.adminRole(adminRole)
.build(); .build();
} }

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.role.entity; package com.bpgroup.poc.admin.domain.base.menu.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.base.BaseEntity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
@ -27,7 +27,7 @@ public class Menu extends BaseEntity {
@JoinColumn(name = "menu_group_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) @JoinColumn(name = "menu_group_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private MenuGroup menuGroup; private MenuGroup menuGroup;
public void setMenuGroup(MenuGroup menuGroup) { public void addMenuGroup(MenuGroup menuGroup) {
this.menuGroup = menuGroup; this.menuGroup = menuGroup;
menuGroup.getMenus().add(this); menuGroup.getMenus().add(this);
} }

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.role.entity; package com.bpgroup.poc.admin.domain.base.menu.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.base.BaseEntity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
@ -38,11 +38,6 @@ public class MenuGroup extends BaseEntity {
return menuGroup; return menuGroup;
} }
public void addMenu(Menu entity) {
this.menus.add(entity);
entity.setMenuGroup(this);
}
public void update(MenuGroup entity) { public void update(MenuGroup entity) {
this.uri = entity.uri; this.uri = entity.uri;
this.name = entity.name; this.name = entity.name;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.base.role.entity; package com.bpgroup.poc.admin.domain.base.menu.entity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.base.role.entity; package com.bpgroup.poc.admin.domain.base.menu.entity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.role.service; package com.bpgroup.poc.admin.domain.base.menu.service;
import com.bpgroup.poc.admin.domain.base.role.entity.Menu; import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.role.service; package com.bpgroup.poc.admin.domain.base.menu.service;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroup;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.role.service; package com.bpgroup.poc.admin.domain.base.menu.service;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroup;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,9 +1,9 @@
package com.bpgroup.poc.admin.domain.base.role.service; package com.bpgroup.poc.admin.domain.base.menu.service;
import com.bpgroup.poc.admin.domain.base.role.entity.Menu; import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroup;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroupRepository; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroupRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuRepository;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -58,7 +58,7 @@ public class MenuService {
MenuGroup menuGroup = findMenuGroup.get(); MenuGroup menuGroup = findMenuGroup.get();
Menu menu = command.toEntity(); Menu menu = command.toEntity();
menu.setMenuGroup(menuGroup); menu.addMenuGroup(menuGroup);
menuRepository.save(menu); menuRepository.save(menu);
} }
@ -86,4 +86,8 @@ public class MenuService {
public Optional<Menu> findById(Long menuId) { public Optional<Menu> findById(Long menuId) {
return menuRepository.findById(menuId); return menuRepository.findById(menuId);
} }
public Optional<Menu> find(Long menuId) {
return menuRepository.findById(menuId);
}
} }

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.role.service; package com.bpgroup.poc.admin.domain.base.menu.service;
import com.bpgroup.poc.admin.domain.base.role.entity.Menu; import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.domain.base.role.entity; package com.bpgroup.poc.admin.domain.base.role.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.base.BaseEntity;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;

View File

@ -1,6 +1,7 @@
package com.bpgroup.poc.admin.domain.base.role.entity; package com.bpgroup.poc.admin.domain.base.role.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.base.BaseEntity;
import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
@ -27,6 +28,8 @@ public class RoleMenu extends BaseEntity {
RoleMenu roleMenu = new RoleMenu(); RoleMenu roleMenu = new RoleMenu();
roleMenu.role = role; roleMenu.role = role;
roleMenu.menu = menu; roleMenu.menu = menu;
roleMenu.role.getRoleMenus().add(roleMenu);
return roleMenu; return roleMenu;
} }
} }

View File

@ -1,5 +1,8 @@
package com.bpgroup.poc.admin.domain.base.role.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenu;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;
@ -9,16 +12,20 @@ import lombok.ToString;
@ToString @ToString
public class RoleAddMenuCommand { public class RoleAddMenuCommand {
@NotNull @NotNull
private Long roleId; private Role role;
@NotNull @NotNull
private Long menuId; private Menu menu;
@Builder @Builder
public static RoleAddMenuCommand of(Long roleId, Long menuId) { public static RoleAddMenuCommand of(Role role, Menu menu) {
RoleAddMenuCommand command = new RoleAddMenuCommand(); RoleAddMenuCommand command = new RoleAddMenuCommand();
command.roleId = roleId; command.role = role;
command.menuId = menuId; command.menu = menu;
return command; return command;
} }
public RoleMenu toEntity() {
return RoleMenu.of(role, menu);
}
} }

View File

@ -1,10 +1,8 @@
package com.bpgroup.poc.admin.domain.base.role.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenuRepository; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.Menu;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.Role; import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenu; import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenuRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository; import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
@ -67,24 +65,11 @@ public class RoleService {
public void addRoleMenu( public void addRoleMenu(
@NotNull @Valid Set<RoleAddMenuCommand> commands @NotNull @Valid Set<RoleAddMenuCommand> commands
) { ) {
RoleAddMenuCommand command = commands.stream().findFirst().orElseThrow(); roleMenuRepository.saveAll(
Optional<Role> findRole = roleRepository.findById(command.getRoleId()); commands.stream()
if (findRole.isEmpty()) { .map(RoleAddMenuCommand::toEntity)
throw new IllegalArgumentException("Role Not Found"); .toList()
} );
Role role = findRole.get();
commands.forEach(c -> {
Optional<Menu> findMenu = menuRepository.findById(c.getMenuId());
if (findMenu.isEmpty()) {
throw new IllegalArgumentException("Menu Not Found");
}
Menu menu = findMenu.get();
RoleMenu roleMenu = RoleMenu.of(role, menu);
roleMenuRepository.save(roleMenu);
});
} }
public void deleteRoleMenu(@NotNull Long roleId) { public void deleteRoleMenu(@NotNull Long roleId) {
@ -96,4 +81,8 @@ public class RoleService {
Role role = findRole.get(); Role role = findRole.get();
role.deleteRoleMenus(); role.deleteRoleMenus();
} }
public Optional<Role> find(Long roleId) {
return roleRepository.findById(roleId);
}
} }

View File

@ -9,8 +9,8 @@ import java.util.*;
import static com.bpgroup.poc.admin.domain.base.admin.entity.QAdmin.admin; import static com.bpgroup.poc.admin.domain.base.admin.entity.QAdmin.admin;
import static com.bpgroup.poc.admin.domain.base.admin.entity.QAdminRole.adminRole; import static com.bpgroup.poc.admin.domain.base.admin.entity.QAdminRole.adminRole;
import static com.bpgroup.poc.admin.domain.base.role.entity.QMenu.menu; import static com.bpgroup.poc.admin.domain.base.menu.entity.QMenu.menu;
import static com.bpgroup.poc.admin.domain.base.role.entity.QMenuGroup.menuGroup; import static com.bpgroup.poc.admin.domain.base.menu.entity.QMenuGroup.menuGroup;
import static com.bpgroup.poc.admin.domain.base.role.entity.QRole.role; import static com.bpgroup.poc.admin.domain.base.role.entity.QRole.role;
import static com.bpgroup.poc.admin.domain.base.role.entity.QRoleMenu.roleMenu; import static com.bpgroup.poc.admin.domain.base.role.entity.QRoleMenu.roleMenu;

View File

@ -1,9 +1,12 @@
package com.bpgroup.poc.admin.web.main.admin.management; package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRole;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminCreateCommand; import com.bpgroup.poc.admin.domain.base.admin.service.AdminCreateCommand;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminCreateResult;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminService; import com.bpgroup.poc.admin.domain.base.admin.service.AdminService;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminUpdateCommand; import com.bpgroup.poc.admin.domain.base.admin.service.AdminUpdateCommand;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.service.RoleService;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminFind; import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminFind;
@ -11,16 +14,21 @@ import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminUpdate;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List; import java.util.List;
import java.util.Optional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional
public class AdminManagementWebService { public class AdminManagementWebService {
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
private final AdminService adminService; private final AdminService adminService;
private final RoleService roleService;
private final AdminManagementQueryRepository queryRepository; private final AdminManagementQueryRepository queryRepository;
public List<AdminFind.Response> findAll() { public List<AdminFind.Response> findAll() {
@ -32,25 +40,38 @@ public class AdminManagementWebService {
} }
public AdminCreate.Response create(AdminCreate.Request request) { public AdminCreate.Response create(AdminCreate.Request request) {
AdminCreateResult adminCreateResult = adminService.create( Optional<Role> findRole = roleService.find(request.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Role Not Found");
}
Role role = findRole.get();
Admin savedAdmin = adminService.create(
AdminCreateCommand.builder() AdminCreateCommand.builder()
.loginId(request.getLoginId()) .loginId(request.getLoginId())
.password(passwordEncoder.encode(request.getPassword())) .password(passwordEncoder.encode(request.getPassword()))
.email(request.getEmail()) .email(request.getEmail())
.name(request.getName()) .name(request.getName())
.adminRole(AdminRole.of(role))
.build() .build()
); );
return AdminCreate.Response.success(adminCreateResult.getId()); return AdminCreate.Response.success(savedAdmin.getId());
} }
public AdminUpdate.Response update(AdminUpdate.Request request) { public AdminUpdate.Response update(AdminUpdate.Request request) {
Optional<Role> findRole = roleService.find(request.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Role Not Found");
}
Role role = findRole.get();
adminService.update( adminService.update(
AdminUpdateCommand.builder() AdminUpdateCommand.builder()
.id(request.getId()) .id(request.getId())
.roleId(request.getRoleId())
.email(request.getEmail()) .email(request.getEmail())
.name(request.getName()) .name(request.getName())
.adminRole(AdminRole.of(role))
.build() .build()
); );

View File

@ -2,6 +2,7 @@ package com.bpgroup.poc.admin.web.main.admin.management.reqres;
import com.bpgroup.poc.admin.web.common.CommonResponse; import com.bpgroup.poc.admin.web.common.CommonResponse;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
@ -19,8 +20,8 @@ public class AdminCreate {
private String email; private String email;
@NotBlank @NotBlank
private String name; private String name;
@NotBlank @NotNull
private String roleId; private Long roleId;
} }
@Getter @Getter

View File

@ -1,12 +1,14 @@
package com.bpgroup.poc.admin.web.main.admin.menu; package com.bpgroup.poc.admin.web.main.admin.menu;
import com.bpgroup.poc.admin.domain.base.role.service.*; import com.bpgroup.poc.admin.domain.base.menu.service.*;
import com.bpgroup.poc.admin.web.main.admin.menu.reqres.*; import com.bpgroup.poc.admin.web.main.admin.menu.reqres.*;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional
public class MenuWebService { public class MenuWebService {
private final MenuService menuService; private final MenuService menuService;

View File

@ -1,5 +1,8 @@
package com.bpgroup.poc.admin.web.main.admin.role; package com.bpgroup.poc.admin.web.main.admin.role;
import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import com.bpgroup.poc.admin.domain.base.menu.service.MenuService;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.service.*; import com.bpgroup.poc.admin.domain.base.role.service.*;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleAddMenu; import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleAddMenu;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleCreate; import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleCreate;
@ -9,15 +12,19 @@ import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@Transactional
public class RoleWebService { public class RoleWebService {
private final RoleService roleService; private final RoleService roleService;
private final MenuService menuService;
public RoleCreate.Response create(RoleCreate.Request request) { public RoleCreate.Response create(RoleCreate.Request request) {
RoleCreateResult createResult = roleService.create( RoleCreateResult createResult = roleService.create(
@ -47,11 +54,24 @@ public class RoleWebService {
public void putMenu(@NotNull @Valid RoleAddMenu.Request request) { public void putMenu(@NotNull @Valid RoleAddMenu.Request request) {
roleService.deleteRoleMenu(request.getRoleId()); roleService.deleteRoleMenu(request.getRoleId());
Set<RoleAddMenuCommand> commands = request.getMenuIds().stream() Optional<Role> findRole = roleService.find(request.getRoleId());
.map(menuId -> RoleAddMenuCommand.builder() if (findRole.isEmpty()) {
.roleId(request.getRoleId()) throw new IllegalArgumentException("Role Not Found");
.menuId(menuId) }
.build() Role role = findRole.get();
Set<RoleAddMenuCommand> commands = request.getMenus().stream()
.map(menuId -> {
Optional<Menu> findMenu = menuService.find(menuId);
if (findMenu.isEmpty()) {
throw new IllegalArgumentException("Menu Not Found");
}
Menu menu = findMenu.get();
return RoleAddMenuCommand.builder()
.role(role)
.menu(menu)
.build();
}
) )
.collect(Collectors.toSet()); .collect(Collectors.toSet());

View File

@ -19,7 +19,7 @@ public class RoleAddMenu {
private Long roleId; private Long roleId;
@NotNull @NotNull
@Size(min = 1) @Size(min = 1)
private Set<Long> menuIds = new HashSet<>(); private Set<Long> menus = new HashSet<>();
} }

View File

@ -43,21 +43,21 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
flushAndClear(); flushAndClear();
// when // when
AdminCreateResult createResult = service.create( Admin savedAdmin = service.create(
AdminCreateCommand.builder() AdminCreateCommand.builder()
.loginId("test") .loginId("test")
.password("test") .password("test")
.email("test") .email("test")
.name("test") .name("test")
.roleId(role.getId()) .adminRole(AdminRole.of(role))
.build() .build()
); );
flushAndClear(); flushAndClear();
// then // then
assertThat(createResult.getId()).isNotNull(); assertThat(savedAdmin.getId()).isNotNull();
Admin findAdmin = adminRepository.findById(createResult.getId()).orElseThrow(); Admin findAdmin = adminRepository.findById(savedAdmin.getId()).orElseThrow();
assertThat(findAdmin.getAdminRole().getRole().getName()).isEqualTo("test"); assertThat(findAdmin.getAdminRole().getRole().getName()).isEqualTo("test");
} }
@ -86,7 +86,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
.password("test2") .password("test2")
.email("test2") .email("test2")
.name("test2") .name("test2")
.roleId(updateRole.getId()) .adminRole(AdminRole.of(updateRole))
.build() .build()
); );
flushAndClear(); flushAndClear();
@ -148,44 +148,40 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
@NotNull @NotNull
private Admin createAdmin(Role role) { private Admin createAdmin(Role role) {
Admin admin = Admin.builder() return adminRepository.save(
.loginId("test2") Admin.builder()
.password("test2") .loginId("test")
.email("test2") .password("test")
.name("test2") .email("test")
.build(); .name("test")
admin.setAdminRole( .adminRole(AdminRole.of(role))
AdminRole.builder()
.role(role)
.build() .build()
); );
return adminRepository.save(admin);
} }
@Test @Test
@DisplayName("AdminService method 호출 유효성 검사 테스트") @DisplayName("AdminService method 호출 유효성 검사 테스트")
void validationTest() { void validationTest() {
// create // create
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId(null).password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId(null).password("password").email("email").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("").password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("").password("password").email("email").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password(null).email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password(null).email("email").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("").email("email").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email(null).name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email(null).name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name(null).roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name(null).adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name("").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name("").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name("name").roleId(null).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name("name").adminRole(null).build())).isInstanceOf(ConstraintViolationException.class);
// update // update
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(null).password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(null).password("password").email("email").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password(null).email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password(null).email("email").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("").email("email").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email(null).name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email(null).name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("").name("name").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name(null).roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name(null).adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name("").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name("").adminRole(AdminRole.of(new Role())).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name("name").roleId(null).build())).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name("name").adminRole(null).build())).isInstanceOf(ConstraintViolationException.class);
// delete // delete
assertThatThrownBy(() -> service.delete(null)).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> service.delete(null)).isInstanceOf(ConstraintViolationException.class);

View File

@ -1,10 +1,9 @@
package com.bpgroup.poc.admin.domain.base.menu.service; package com.bpgroup.poc.admin.domain.base.menu.service;
import com.bpgroup.poc.admin.domain.base.role.entity.Menu; import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroup;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroupRepository; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroupRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuRepository;
import com.bpgroup.poc.admin.domain.base.role.service.*;
import com.bpgroup.poc.admin.env.MariaDBTestEnv; import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
@ -134,7 +133,7 @@ class MenuServiceTest extends MariaDBTestEnv {
.name("name") .name("name")
.sortOrder(1) .sortOrder(1)
.build(); .build();
menu.setMenuGroup(saveMenuGroup); menu.addMenuGroup(saveMenuGroup);
Menu saveMenu = menuRepository.save(menu); Menu saveMenu = menuRepository.save(menu);
flushAndClear(); flushAndClear();
@ -168,7 +167,7 @@ class MenuServiceTest extends MariaDBTestEnv {
.name("name") .name("name")
.sortOrder(1) .sortOrder(1)
.build(); .build();
menu.setMenuGroup(saveMenuGroup); menu.addMenuGroup(saveMenuGroup);
Menu saveMenu = menuRepository.save(menu); Menu saveMenu = menuRepository.save(menu);
flushAndClear(); flushAndClear();

View File

@ -4,11 +4,10 @@ import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenu; import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenu;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenuRepository; import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenuRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository; import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository;
import com.bpgroup.poc.admin.domain.base.role.service.*; import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import com.bpgroup.poc.admin.domain.base.role.entity.Menu; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroup;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuGroupRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroupRepository; import com.bpgroup.poc.admin.domain.base.menu.entity.MenuRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository;
import com.bpgroup.poc.admin.env.MariaDBTestEnv; import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@ -120,12 +119,12 @@ class RoleServiceTest extends MariaDBTestEnv {
roleService.addRoleMenu( roleService.addRoleMenu(
Set.of( Set.of(
RoleAddMenuCommand.builder() RoleAddMenuCommand.builder()
.roleId(saveRole.getId()) .role(saveRole)
.menuId(menu1.getId()) .menu(menu1)
.build(), .build(),
RoleAddMenuCommand.builder() RoleAddMenuCommand.builder()
.roleId(saveRole.getId()) .role(saveRole)
.menuId(menu2.getId()) .menu(menu2)
.build() .build()
) )
); );
@ -233,7 +232,7 @@ class RoleServiceTest extends MariaDBTestEnv {
.name("TEST") .name("TEST")
.sortOrder(1) .sortOrder(1)
.build(); .build();
menu.setMenuGroup(menuGroup); menu.addMenuGroup(menuGroup);
return menuRepository.save(menu); return menuRepository.save(menu);
} }
@ -253,8 +252,8 @@ class RoleServiceTest extends MariaDBTestEnv {
assertThatThrownBy(() -> roleService.delete(null)).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> roleService.delete(null)).isInstanceOf(ConstraintViolationException.class);
// add Role Menu // add Role Menu
assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().roleId(null).menuId(null).build()))).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().role(null).menu(new Menu()).build()))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().roleId(1L).menuId(null).build()))).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().role(new Role()).menu(null).build()))).isInstanceOf(ConstraintViolationException.class);
// delete Role Menu // delete Role Menu
assertThatThrownBy(() -> roleService.deleteRoleMenu(null)).isInstanceOf(ConstraintViolationException.class); assertThatThrownBy(() -> roleService.deleteRoleMenu(null)).isInstanceOf(ConstraintViolationException.class);