From 8b3a827ba0ce022cd4b7d4a3592579f652bced66 Mon Sep 17 00:00:00 2001 From: geonhos Date: Thu, 16 May 2024 14:21:39 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B6=8C=ED=95=9C=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EA=B8=B0=EB=8A=A5=20=EB=B0=8F=20=EA=B6=8C?= =?UTF-8?q?=ED=95=9C=20=EC=82=AD=EC=A0=9C=20=EC=8B=9C=20=EA=B6=8C=ED=95=9C?= =?UTF-8?q?=20=EB=A9=94=EB=89=B4=20=EB=8F=99=EC=8B=9C=20=EC=82=AD=EC=A0=9C?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../poc/admin/domain/entity/role/Role.java | 6 +- .../admin/domain/entity/role/RoleMenu.java | 4 +- .../AdministratorManagementService.java | 5 ++ .../main/admin/role/RoleRestController.java | 7 +- .../main/admin/role/service/RoleService.java | 15 +++- .../web/main/admin/role/RoleServiceTest.java | 87 +++++++++++++++++-- 6 files changed, 112 insertions(+), 12 deletions(-) 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); }