diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/Role.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/Role.java index 816cf87..a119c65 100644 --- a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/Role.java +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/Role.java @@ -23,7 +23,7 @@ public class Role extends BaseEntity { @Column(name = "description") private String description; - @OneToMany(mappedBy = "role", fetch = FetchType.LAZY) + @OneToMany(mappedBy = "role", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) private Set roleMenus = new HashSet<>(); @Builder @@ -43,4 +43,8 @@ public class Role extends BaseEntity { public void addRoleMenu(RoleMenu roleMenu) { this.roleMenus.add(roleMenu); } + + public void deleteRoleMenus() { + this.roleMenus.clear(); + } } diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/RoleMenu.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/RoleMenu.java index 68353b0..bf35614 100644 --- a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/RoleMenu.java +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/entity/role/RoleMenu.java @@ -15,11 +15,11 @@ public class RoleMenu extends BaseEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "role_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) private Role role; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) private Menu menu; diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/management/service/AdministratorManagementService.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/management/service/AdministratorManagementService.java index e3b8f89..885e2cc 100644 --- a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/management/service/AdministratorManagementService.java +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/management/service/AdministratorManagementService.java @@ -42,6 +42,11 @@ public class AdministratorManagementService { } public void delete(@NotNull Long id) { + Optional findAdministrator = repository.findById(id); + if (findAdministrator.isEmpty()) { + throw new IllegalArgumentException("Not found administrator"); + } + repository.deleteById(id); } } diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/RoleRestController.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/RoleRestController.java index ec27fbe..1f6aded 100644 --- a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/RoleRestController.java +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/RoleRestController.java @@ -77,12 +77,15 @@ public class RoleRestController { /** * 권한 내 메뉴 추가 + * DELETE -> INSERT */ - @PostMapping("/add/menu") + @PostMapping("/put/menu") public ResponseEntity addMenu( @RequestBody @Valid List request, BindingResult bindingResult ) { + roleService.deleteRoleMenu(request.get(0).getRoleId()); + Set commands = request.stream() .map(c -> RoleAddMenuCommand.builder() .roleId(c.getRoleId()) @@ -91,7 +94,7 @@ public class RoleRestController { ) .collect(Collectors.toSet()); - roleService.addMenu(commands); + roleService.addRoleMenu(commands); return ResponseEntity.ok(RoleAddMenu.Response.success()); } diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/service/RoleService.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/service/RoleService.java index 538d411..4804741 100644 --- a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/service/RoleService.java +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/role/service/RoleService.java @@ -60,10 +60,11 @@ public class RoleService { throw new IllegalArgumentException("Role Not Found"); } - roleRepository.deleteById(id); + Role role = findRole.get(); + roleRepository.deleteById(role.getId()); } - public void addMenu( + public void addRoleMenu( @NotNull @Valid Set commands ) { RoleAddMenuCommand command = commands.stream().findFirst().orElseThrow(); @@ -87,4 +88,14 @@ public class RoleService { }); } + + public void deleteRoleMenu(@NotNull Long roleId) { + Optional findRole = roleRepository.findById(roleId); + if (findRole.isEmpty()) { + throw new IllegalArgumentException("Role Not Found"); + } + + Role role = findRole.get(); + role.deleteRoleMenus(); + } } diff --git a/poc/admin/src/test/java/com/bpgroup/poc/admin/web/main/admin/role/RoleServiceTest.java b/poc/admin/src/test/java/com/bpgroup/poc/admin/web/main/admin/role/RoleServiceTest.java index 02d224b..883d9ed 100644 --- a/poc/admin/src/test/java/com/bpgroup/poc/admin/web/main/admin/role/RoleServiceTest.java +++ b/poc/admin/src/test/java/com/bpgroup/poc/admin/web/main/admin/role/RoleServiceTest.java @@ -5,6 +5,7 @@ import com.bpgroup.poc.admin.domain.entity.menu.MenuGroup; import com.bpgroup.poc.admin.domain.entity.menu.MenuGroupRepository; import com.bpgroup.poc.admin.domain.entity.menu.MenuRepository; import com.bpgroup.poc.admin.domain.entity.role.Role; +import com.bpgroup.poc.admin.domain.entity.role.RoleMenu; import com.bpgroup.poc.admin.domain.entity.role.RoleMenuRepository; import com.bpgroup.poc.admin.domain.entity.role.RoleRepository; import com.bpgroup.poc.admin.env.MariaDBTestEnv; @@ -116,7 +117,7 @@ class RoleServiceTest extends MariaDBTestEnv { flushAndClear(); // when - roleService.addMenu( + roleService.addRoleMenu( Set.of( RoleAddMenuCommand.builder() .roleId(saveRole.getId()) @@ -134,6 +135,79 @@ class RoleServiceTest extends MariaDBTestEnv { assertThat(roleMenuRepository.findById(saveRole.getId())).isNotEmpty(); } + @Test + @DisplayName("Role Menu 삭제 테스트") + void deleteRoleMenuTest() { + // given + Role saveRole = createRole(); + flushAndClear(); + + MenuGroup menuGroup = createMenuGroup(); + flushAndClear(); + + Menu saveMenu1 = createMenu(menuGroup); + Menu saveMenu2 = createMenu(menuGroup); + flushAndClear(); + + roleMenuRepository.save( + RoleMenu.builder() + .role(saveRole) + .menu(saveMenu1) + .build() + ); + + roleMenuRepository.save( + RoleMenu.builder() + .role(saveRole) + .menu(saveMenu2) + .build() + ); + flushAndClear(); + + // when + roleService.deleteRoleMenu(saveRole.getId()); + flushAndClear(); + + // then + assertThat(roleMenuRepository.findAll()).isEmpty(); + } + + @Test + @DisplayName("Role 삭제 시 Role Menu 동시 삭제 테스트") + void deleteRoleAndRoleMenuTest() { + // given + Role saveRole = createRole(); + flushAndClear(); + + MenuGroup menuGroup = createMenuGroup(); + flushAndClear(); + + Menu saveMenu1 = createMenu(menuGroup); + Menu saveMenu2 = createMenu(menuGroup); + flushAndClear(); + + roleMenuRepository.save( + RoleMenu.builder() + .role(saveRole) + .menu(saveMenu1) + .build() + ); + + roleMenuRepository.save( + RoleMenu.builder() + .role(saveRole) + .menu(saveMenu2) + .build() + ); + + // when + roleService.delete(saveRole.getId()); + flushAndClear(); + + // then + assertThat(roleMenuRepository.findAll()).isEmpty(); + } + private Role createRole() { return roleRepository.save( Role.builder() @@ -144,7 +218,7 @@ class RoleServiceTest extends MariaDBTestEnv { } private MenuGroup createMenuGroup() { - return menuGroupRepository.save( + return menuGroupRepository.save( MenuGroup.builder() .uri("TEST") .name("TEST") @@ -160,7 +234,7 @@ class RoleServiceTest extends MariaDBTestEnv { .sortOrder(1) .build(); menu.setMenuGroup(menuGroup); - return menuRepository.save(menu); + return menuRepository.save(menu); } @Test @@ -179,8 +253,11 @@ class RoleServiceTest extends MariaDBTestEnv { assertThatThrownBy(() -> roleService.delete(null)).isInstanceOf(ConstraintViolationException.class); // add Role Menu - assertThatThrownBy(() -> roleService.addMenu(Set.of(RoleAddMenuCommand.builder().roleId(null).menuId(null).build()))).isInstanceOf(ConstraintViolationException.class); - assertThatThrownBy(() -> roleService.addMenu(Set.of(RoleAddMenuCommand.builder().roleId(1L).menuId(null).build()))).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().roleId(null).menuId(null).build()))).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().roleId(1L).menuId(null).build()))).isInstanceOf(ConstraintViolationException.class); + + // delete Role Menu + assertThatThrownBy(() -> roleService.deleteRoleMenu(null)).isInstanceOf(ConstraintViolationException.class); }