diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/Menu.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/Menu.java index 9ccb75c..81afce1 100644 --- a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/Menu.java +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/Menu.java @@ -2,6 +2,7 @@ package com.bpgroup.poc.admin.domain.admin.entity; import com.bpgroup.poc.admin.domain.BaseEntity; import jakarta.persistence.*; +import lombok.Builder; import lombok.Getter; @Getter @@ -22,8 +23,26 @@ public class Menu extends BaseEntity { @Column(name = "sort_order", nullable = false) private Integer sortOrder; - @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) + @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_group_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) private MenuGroup menuGroup; + public void setMenuGroup(MenuGroup menuGroup) { + this.menuGroup = menuGroup; + } + + @Builder + public static Menu of(String uri, String name, Integer sortOrder) { + Menu menu = new Menu(); + menu.uri = uri; + menu.name = name; + menu.sortOrder = sortOrder; + return menu; + } + + public void update(Menu entity) { + this.uri = entity.uri; + this.name = entity.name; + this.sortOrder = entity.sortOrder; + } } diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/MenuGroup.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/MenuGroup.java index 7241ae2..b6029d7 100644 --- a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/MenuGroup.java +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/MenuGroup.java @@ -2,8 +2,12 @@ package com.bpgroup.poc.admin.domain.admin.entity; import com.bpgroup.poc.admin.domain.BaseEntity; import jakarta.persistence.*; +import lombok.Builder; import lombok.Getter; +import java.util.ArrayList; +import java.util.List; + @Getter @Entity @Table(name = "menu_group") @@ -22,4 +26,26 @@ public class MenuGroup extends BaseEntity { @Column(name = "sort_order", nullable = false) private Integer sortOrder; + @OneToMany(mappedBy = "menuGroup", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true) + private List menus = new ArrayList<>(); + + @Builder + public static MenuGroup of(String uri, String name, Integer sortOrder) { + MenuGroup menuGroup = new MenuGroup(); + menuGroup.uri = uri; + menuGroup.name = name; + menuGroup.sortOrder = sortOrder; + return menuGroup; + } + + public void addMenu(Menu entity) { + this.menus.add(entity); + entity.setMenuGroup(this); + } + + public void update(MenuGroup entity) { + this.uri = entity.uri; + this.name = entity.name; + this.sortOrder = entity.sortOrder; + } } diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/MenuGroupRepository.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/MenuGroupRepository.java new file mode 100644 index 0000000..cdc5f47 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/domain/admin/entity/MenuGroupRepository.java @@ -0,0 +1,6 @@ +package com.bpgroup.poc.admin.domain.admin.entity; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface MenuGroupRepository extends JpaRepository { +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuRestController.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuRestController.java new file mode 100644 index 0000000..3f17892 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuRestController.java @@ -0,0 +1,110 @@ +package com.bpgroup.poc.admin.web.main.admin.menu; + +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuCreateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuGroupCreateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuGroupUpdateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuUpdateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.reqres.*; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/admin/menu") +public class MenuRestController { + + private final MenuService service; + + @PostMapping("/create/menu-group") + public ResponseEntity createMenuGroup( + @RequestBody @Valid MenuGroupCreate.Request request, + BindingResult bindingResult + ) { + service.createMenuGroup( + MenuGroupCreateCommand.builder() + .name(request.getName()) + .uri(request.getUri()) + .sortOrder(request.getSortOrder()) + .build() + ); + + return ResponseEntity.ok(MenuGroupCreate.Response.success()); + } + + @PostMapping("/update/menu-group") + public ResponseEntity updateMenuGroup( + @RequestBody @Valid MenuGroupUpdate.Request request, + BindingResult bindingResult + ) { + service.updateMenuGroup( + MenuGroupUpdateCommand.builder() + .id(request.getId()) + .name(request.getName()) + .uri(request.getUri()) + .sortOrder(request.getSortOrder()) + .build() + ); + + return ResponseEntity.ok(MenuGroupCreate.Response.success()); + } + + @PostMapping("/delete/menu-group") + public ResponseEntity deleteMenuGroup( + @RequestBody @Valid MenuGroupDelete.Request request, + BindingResult bindingResult + ) { + service.deleteMenuGroup(request.getId()); + + return ResponseEntity.ok(MenuGroupDelete.Response.success()); + } + + @PostMapping("/create/menu") + public ResponseEntity createMenu( + @RequestBody @Valid MenuCreate.Request request, + BindingResult bindingResult + ) { + service.createMenu( + MenuCreateCommand.builder() + .menuGroupId(request.getMenuGroupId()) + .name(request.getName()) + .uri(request.getUri()) + .sortOrder(request.getSortOrder()) + .build() + ); + return ResponseEntity.ok(MenuCreate.Response.success()); + } + + @PostMapping("/update/menu") + public ResponseEntity updateMenu( + @RequestBody @Valid MenuUpdate.Request request, + BindingResult bindingResult + ) { + service.updateMenu( + MenuUpdateCommand.builder() + .id(request.getId()) + .name(request.getName()) + .uri(request.getUri()) + .sortOrder(request.getSortOrder()) + .build() + ); + + return ResponseEntity.ok(MenuGroupCreate.Response.success()); + } + + @PostMapping("/delete/menu") + public ResponseEntity deleteMenu( + @RequestBody @Valid MenuDelete.Request request, + BindingResult bindingResult + ) { + service.deleteMenu(request.getId()); + + return ResponseEntity.ok(MenuDelete.Response.success()); + } + +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuService.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuService.java new file mode 100644 index 0000000..4d776fa --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuService.java @@ -0,0 +1,89 @@ +package com.bpgroup.poc.admin.web.main.admin.menu; + +import com.bpgroup.poc.admin.domain.admin.entity.Menu; +import com.bpgroup.poc.admin.domain.admin.entity.MenuGroup; +import com.bpgroup.poc.admin.domain.admin.entity.MenuGroupRepository; +import com.bpgroup.poc.admin.domain.admin.entity.MenuRepository; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuCreateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuGroupCreateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuGroupUpdateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuUpdateCommand; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.validation.annotation.Validated; + +import java.util.Optional; + +@Service +@RequiredArgsConstructor +@Validated +@Transactional +public class MenuService { + + private final MenuGroupRepository menuGroupRepository; + private final MenuRepository menuRepository; + + public void createMenuGroup( + @NotNull @Valid MenuGroupCreateCommand command + ) { + menuGroupRepository.save(command.toEntity()); + } + + public void updateMenuGroup( + @NotNull @Valid MenuGroupUpdateCommand command + ) { + Optional findMenuGroup = menuGroupRepository.findById(command.getId()); + if (findMenuGroup.isEmpty()) { + throw new IllegalArgumentException("MenuGroup not found"); + } + + findMenuGroup.get().update(command.toEntity()); + } + + public void deleteMenuGroup(@NotNull Long id) { + Optional findMenuGroup = menuGroupRepository.findById(id); + if (findMenuGroup.isEmpty()) { + throw new IllegalArgumentException("MenuGroup not found"); + } + + menuGroupRepository.deleteById(id); + } + + public void createMenu( + @NotNull @Valid MenuCreateCommand command + ) { + Optional findMenuGroup = menuGroupRepository.findById(command.getMenuGroupId()); + if (findMenuGroup.isEmpty()) { + throw new IllegalArgumentException("MenuGroup not found"); + } + + Menu menu = command.toEntity(); + MenuGroup menuGroup = findMenuGroup.get(); + menuGroup.addMenu(menu); + + menuRepository.save(menu); + } + + public void updateMenu( + @NotNull @Valid MenuUpdateCommand build + ) { + Optional findMenu = menuRepository.findById(build.getId()); + if (findMenu.isEmpty()) { + throw new IllegalArgumentException("Menu not found"); + } + + findMenu.get().update(build.toEntity()); + } + + public void deleteMenu(@NotNull Long id) { + Optional findMenu = menuRepository.findById(id); + if (findMenu.isEmpty()) { + throw new IllegalArgumentException("Menu not found"); + } + + menuRepository.deleteById(id); + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuCreateCommand.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuCreateCommand.java new file mode 100644 index 0000000..cdcd5ec --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuCreateCommand.java @@ -0,0 +1,42 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.command; + +import com.bpgroup.poc.admin.domain.admin.entity.Menu; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public class MenuCreateCommand { + @NotNull + private Long menuGroupId; + + @NotBlank + private String uri; + + @NotBlank + private String name; + + @NotNull + private Integer sortOrder; + + @Builder + public static MenuCreateCommand of(Long menuGroupId, String uri, String name, Integer sortOrder) { + MenuCreateCommand command = new MenuCreateCommand(); + command.menuGroupId = menuGroupId; + command.uri = uri; + command.name = name; + command.sortOrder = sortOrder; + return command; + } + + public Menu toEntity() { + return Menu.builder() + .uri(uri) + .name(name) + .sortOrder(sortOrder) + .build(); + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuGroupCreateCommand.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuGroupCreateCommand.java new file mode 100644 index 0000000..0fdfc53 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuGroupCreateCommand.java @@ -0,0 +1,36 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.command; + +import com.bpgroup.poc.admin.domain.admin.entity.MenuGroup; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public class MenuGroupCreateCommand { + @NotBlank + private String uri; + @NotBlank + private String name; + @NotNull + private Integer sortOrder; + + @Builder + public static MenuGroupCreateCommand of(String uri, String name, Integer sortOrder) { + MenuGroupCreateCommand command = new MenuGroupCreateCommand(); + command.uri = uri; + command.name = name; + command.sortOrder = sortOrder; + return command; + } + + public MenuGroup toEntity() { + return MenuGroup.builder() + .uri(uri) + .name(name) + .sortOrder(sortOrder) + .build(); + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuGroupUpdateCommand.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuGroupUpdateCommand.java new file mode 100644 index 0000000..dd240f0 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuGroupUpdateCommand.java @@ -0,0 +1,39 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.command; + +import com.bpgroup.poc.admin.domain.admin.entity.MenuGroup; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public class MenuGroupUpdateCommand { + @NotNull + private Long id; + @NotBlank + private String uri; + @NotBlank + private String name; + @NotNull + private Integer sortOrder; + + @Builder + public static MenuGroupUpdateCommand of(Long id, String uri, String name, Integer sortOrder) { + MenuGroupUpdateCommand command = new MenuGroupUpdateCommand(); + command.id = id; + command.uri = uri; + command.name = name; + command.sortOrder = sortOrder; + return command; + } + + public MenuGroup toEntity() { + return MenuGroup.builder() + .uri(uri) + .name(name) + .sortOrder(sortOrder) + .build(); + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuUpdateCommand.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuUpdateCommand.java new file mode 100644 index 0000000..cd11853 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/command/MenuUpdateCommand.java @@ -0,0 +1,41 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.command; + +import com.bpgroup.poc.admin.domain.admin.entity.Menu; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +@Getter +@ToString +public class MenuUpdateCommand { + @NotNull + private Long id; + @NotBlank + private String uri; + @NotBlank + private String name; + @NotNull + private Integer sortOrder; + + @Builder + public static MenuUpdateCommand of(Long id, String uri, String name, Integer sortOrder) { + MenuUpdateCommand command = new MenuUpdateCommand(); + command.id = id; + command.uri = uri; + command.name = name; + command.sortOrder = sortOrder; + return command; + } + + public Menu toEntity() { + return Menu.builder() + .uri(uri) + .name(name) + .sortOrder(sortOrder) + .build(); + } + + +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuCreate.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuCreate.java new file mode 100644 index 0000000..5c707e6 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuCreate.java @@ -0,0 +1,45 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.reqres; + +import com.bpgroup.poc.admin.web.common.CommonResponse; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.ToString; + +public class MenuCreate { + + @Data + public static class Request { + @NotNull + private Long menuGroupId; + @NotBlank + private String uri; + @NotBlank + private String name; + @NotNull + private Integer sortOrder; + } + + @Getter + @ToString + public static class Response extends CommonResponse { + @Builder + public static Response success() { + Response response = new Response(); + response.resultCode = "0000"; + response.resultMessage = "Success"; + return response; + } + + @Builder + public static Response fail() { + Response response = new Response(); + response.resultCode = "9999"; + response.resultMessage = "Fail"; + return response; + } + + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuDelete.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuDelete.java new file mode 100644 index 0000000..42ce9bf --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuDelete.java @@ -0,0 +1,36 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.reqres; + +import com.bpgroup.poc.admin.web.common.CommonResponse; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.ToString; + +public class MenuDelete { + @Data + public static class Request { + @NotNull + private Long id; + } + + @Getter + @ToString + public static class Response extends CommonResponse { + @Builder + public static Response success() { + Response response = new Response(); + response.resultCode = "0000"; + response.resultMessage = "Success"; + return response; + } + + @Builder + public static Response fail(String resultMessage) { + Response response = new Response(); + response.resultCode = "9999"; + response.resultMessage = resultMessage; + return response; + } + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupCreate.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupCreate.java new file mode 100644 index 0000000..f1a1818 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupCreate.java @@ -0,0 +1,46 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.reqres; + +import com.bpgroup.poc.admin.web.common.CommonResponse; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.ToString; + +public class MenuGroupCreate { + + @Data + public static class Request { + + @NotBlank + private String uri; + + @NotBlank + private String name; + + @NotNull + private Integer sortOrder; + } + + @Getter + @ToString + public static class Response extends CommonResponse { + @Builder + public static Response success() { + Response response = new Response(); + response.resultCode = "0000"; + response.resultMessage = "Success"; + return response; + } + + @Builder + public static Response fail() { + Response response = new Response(); + response.resultCode = "9999"; + response.resultMessage = "Fail"; + return response; + } + + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupDelete.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupDelete.java new file mode 100644 index 0000000..f85b6e5 --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupDelete.java @@ -0,0 +1,36 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.reqres; + +import com.bpgroup.poc.admin.web.common.CommonResponse; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.ToString; + +public class MenuGroupDelete { + @Data + public static class Request { + @NotNull + private Long id; + } + + @Getter + @ToString + public static class Response extends CommonResponse { + @Builder + public static Response success() { + Response response = new Response(); + response.resultCode = "0000"; + response.resultMessage = "Success"; + return response; + } + + @Builder + public static Response fail(String resultMessage) { + Response response = new Response(); + response.resultCode = "9999"; + response.resultMessage = resultMessage; + return response; + } + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupUpdate.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupUpdate.java new file mode 100644 index 0000000..39d2b0b --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuGroupUpdate.java @@ -0,0 +1,44 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.reqres; + +import com.bpgroup.poc.admin.web.common.CommonResponse; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.ToString; + +public class MenuGroupUpdate { + + @Data + public static class Request { + @NotNull + private Long id; + @NotBlank + private String uri; + @NotBlank + private String name; + @NotNull + private Integer sortOrder; + } + + @Getter + @ToString + public static class Response extends CommonResponse { + @Builder + public static Response success() { + Response response = new Response(); + response.resultCode = "0000"; + response.resultMessage = "Success"; + return response; + } + + @Builder + public static Response fail(String resultMessage) { + Response response = new Response(); + response.resultCode = "9999"; + response.resultMessage = resultMessage; + return response; + } + } +} diff --git a/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuUpdate.java b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuUpdate.java new file mode 100644 index 0000000..7bde76e --- /dev/null +++ b/poc/admin/src/main/java/com/bpgroup/poc/admin/web/main/admin/menu/reqres/MenuUpdate.java @@ -0,0 +1,44 @@ +package com.bpgroup.poc.admin.web.main.admin.menu.reqres; + +import com.bpgroup.poc.admin.web.common.CommonResponse; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.ToString; + +public class MenuUpdate { + + @Data + public static class Request { + @NotNull + private Long id; + @NotBlank + private String uri; + @NotBlank + private String name; + @NotNull + private Integer sortOrder; + } + + @Getter + @ToString + public static class Response extends CommonResponse { + @Builder + public static Response success() { + Response response = new Response(); + response.resultCode = "0000"; + response.resultMessage = "Success"; + return response; + } + + @Builder + public static Response fail(String resultMessage) { + Response response = new Response(); + response.resultCode = "9999"; + response.resultMessage = resultMessage; + return response; + } + } +} diff --git a/poc/admin/src/test/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuServiceTest.java b/poc/admin/src/test/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuServiceTest.java new file mode 100644 index 0000000..486ee01 --- /dev/null +++ b/poc/admin/src/test/java/com/bpgroup/poc/admin/web/main/admin/menu/MenuServiceTest.java @@ -0,0 +1,248 @@ +package com.bpgroup.poc.admin.web.main.admin.menu; + +import com.bpgroup.poc.admin.domain.admin.entity.Menu; +import com.bpgroup.poc.admin.domain.admin.entity.MenuGroup; +import com.bpgroup.poc.admin.domain.admin.entity.MenuGroupRepository; +import com.bpgroup.poc.admin.domain.admin.entity.MenuRepository; +import com.bpgroup.poc.admin.env.MariaDBTestEnv; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuCreateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuGroupCreateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuGroupUpdateCommand; +import com.bpgroup.poc.admin.web.main.admin.menu.command.MenuUpdateCommand; +import jakarta.validation.ConstraintViolationException; +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +@Transactional +public class MenuServiceTest extends MariaDBTestEnv { + + @Autowired + private MenuService menuService; + + @Autowired + private MenuGroupRepository menuGroupRepository; + + @Autowired + private MenuRepository menuRepository; + + @BeforeEach + public void setUp() { + menuGroupRepository.deleteAll(); + menuRepository.deleteAll(); + } + + @Test + @DisplayName("MenuGroup 생성 테스트") + public void createMenuGroupTest() { + // given + MenuGroupCreateCommand groupCreateCommand = MenuGroupCreateCommand.of("uri", "name", 1); + + // when + menuService.createMenuGroup(groupCreateCommand); + flushAndClear(); + + // then + Assertions.assertThat(menuGroupRepository.findAll()).hasSize(1); + } + + @Test + @DisplayName("MenuGroup 수정 테스트") + public void updateMenuGroupTest() { + // given + MenuGroupCreateCommand groupCreateCommand = MenuGroupCreateCommand.of("uri", "name", 1); + menuService.createMenuGroup(groupCreateCommand); + flushAndClear(); + + MenuGroupUpdateCommand groupUpdateCommand = MenuGroupUpdateCommand.builder() + .id(menuGroupRepository.findAll().get(0).getId()) + .uri("uri2") + .name("name2") + .sortOrder(1) + .build(); + + // when + menuService.updateMenuGroup(groupUpdateCommand); + flushAndClear(); + + // then + MenuGroup findMenuGroup = menuGroupRepository.findAll().get(0); + Assertions.assertThat(findMenuGroup.getUri()).isEqualTo("uri2"); + Assertions.assertThat(findMenuGroup.getName()).isEqualTo("name2"); + } + + @Test + @DisplayName("MenuGroup 삭제 테스트") + public void deleteMenuGroupTest() { + // given + MenuGroupCreateCommand groupCreateCommand = MenuGroupCreateCommand.of("uri", "name", 1); + menuService.createMenuGroup(groupCreateCommand); + flushAndClear(); + + // when + menuService.deleteMenuGroup(menuGroupRepository.findAll().get(0).getId()); + flushAndClear(); + + // then + Assertions.assertThat(menuGroupRepository.findAll()).hasSize(0); + } + + @Test + @DisplayName("MenuGroup 삭제 시 Menu 동시 삭제 테스트") + public void deleteMenuGroupWithMenuTest() { + // given + MenuGroupCreateCommand groupCreateCommand = MenuGroupCreateCommand.of("uri", "name", 1); + menuService.createMenuGroup(groupCreateCommand); + flushAndClear(); + + MenuCreateCommand menuCreateCommand = MenuCreateCommand.builder() + .menuGroupId(menuGroupRepository.findAll().get(0).getId()) + .uri("uri") + .name("name") + .sortOrder(1) + .build(); + + menuService.createMenu(menuCreateCommand); + flushAndClear(); + + // when + menuService.deleteMenuGroup(menuGroupRepository.findAll().get(0).getId()); + flushAndClear(); + + // then + Assertions.assertThat(menuGroupRepository.findAll()).hasSize(0); + Assertions.assertThat(menuRepository.findAll()).hasSize(0); + } + + @Test + @DisplayName("Menu 생성 테스트") + public void createGroupTest() { + // given + MenuGroupCreateCommand groupCreateCommand = MenuGroupCreateCommand.of("uri", "name", 1); + menuService.createMenuGroup(groupCreateCommand); + flushAndClear(); + + MenuCreateCommand menuCreateCommand = MenuCreateCommand.builder() + .menuGroupId(menuGroupRepository.findAll().get(0).getId()) + .uri("uri") + .name("name") + .sortOrder(1) + .build(); + + // when + menuService.createMenu(menuCreateCommand); + flushAndClear(); + + // then + Assertions.assertThat(menuRepository.findAll()).hasSize(1); + } + + @Test + @DisplayName("Menu 수정 테스트") + public void updateMenuTest() { + // given + MenuGroupCreateCommand groupCreateCommand = MenuGroupCreateCommand.of("uri", "name", 1); + menuService.createMenuGroup(groupCreateCommand); + flushAndClear(); + + MenuCreateCommand menuCreateCommand = MenuCreateCommand.builder() + .menuGroupId(menuGroupRepository.findAll().get(0).getId()) + .uri("uri") + .name("name") + .sortOrder(1) + .build(); + + menuService.createMenu(menuCreateCommand); + flushAndClear(); + + MenuUpdateCommand menuUpdateCommand = MenuUpdateCommand.builder() + .id(menuRepository.findAll().get(0).getId()) + .uri("uri2") + .name("name2") + .sortOrder(1) + .build(); + + // when + menuService.updateMenu(menuUpdateCommand); + flushAndClear(); + + // then + Menu findMenu = menuRepository.findAll().get(0); + Assertions.assertThat(findMenu.getUri()).isEqualTo("uri2"); + Assertions.assertThat(findMenu.getName()).isEqualTo("name2"); + } + + @Test + @DisplayName("Menu 삭제 테스트") + public void deleteMenuTest() { + // given + MenuGroupCreateCommand groupCreateCommand = MenuGroupCreateCommand.of("uri", "name", 1); + menuService.createMenuGroup(groupCreateCommand); + flushAndClear(); + + MenuCreateCommand menuCreateCommand = MenuCreateCommand.builder() + .menuGroupId(menuGroupRepository.findAll().get(0).getId()) + .uri("uri") + .name("name") + .sortOrder(1) + .build(); + + menuService.createMenu(menuCreateCommand); + flushAndClear(); + + // when + menuService.deleteMenu(menuRepository.findAll().get(0).getId()); + flushAndClear(); + + // then + Assertions.assertThat(menuRepository.findAll()).hasSize(0); + } + + @Test + @DisplayName("MenuService method 호출 유효성 검사 테스트") + public void validationTest() { + // menuGroup create + assertThatThrownBy(() -> menuService.createMenuGroup(MenuGroupCreateCommand.builder().uri("").name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenuGroup(MenuGroupCreateCommand.builder().uri("uri").name("").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenuGroup(MenuGroupCreateCommand.builder().uri(null).name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenuGroup(MenuGroupCreateCommand.builder().uri("uri").name(null).sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenuGroup(MenuGroupCreateCommand.builder().uri("uri").name("name").sortOrder(null).build())).isInstanceOf(ConstraintViolationException.class); + + // menuGroup update + assertThatThrownBy(() -> menuService.updateMenuGroup(MenuGroupUpdateCommand.builder().id(1L).uri("").name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenuGroup(MenuGroupUpdateCommand.builder().id(1L).uri("uri").name("").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenuGroup(MenuGroupUpdateCommand.builder().id(null).uri("uri").name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenuGroup(MenuGroupUpdateCommand.builder().id(1L).uri(null).name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenuGroup(MenuGroupUpdateCommand.builder().id(1L).uri("uri").name(null).sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenuGroup(MenuGroupUpdateCommand.builder().id(1L).uri("uri").name("name").sortOrder(null).build())).isInstanceOf(ConstraintViolationException.class); + + // menuGroup delete + assertThatThrownBy(() -> menuService.deleteMenu(null)).isInstanceOf(ConstraintViolationException.class); + + // menu create + assertThatThrownBy(() -> menuService.createMenu(MenuCreateCommand.of(1L, "", "name", 1))).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenu(MenuCreateCommand.of(1L, "uri", "", 1))).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenu(MenuCreateCommand.of(null, "uri", "name", 1))).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenu(MenuCreateCommand.of(1L, null, "name", 1))).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenu(MenuCreateCommand.of(1L, "uri", null, 1))).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.createMenu(MenuCreateCommand.of(1L, "uri", "name", null))).isInstanceOf(ConstraintViolationException.class); + + // menu update + assertThatThrownBy(() -> menuService.updateMenu(MenuUpdateCommand.builder().id(1L).uri("").name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenu(MenuUpdateCommand.builder().id(1L).uri("uri").name("").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenu(MenuUpdateCommand.builder().id(null).uri("uri").name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenu(MenuUpdateCommand.builder().id(1L).uri(null).name("name").sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenu(MenuUpdateCommand.builder().id(1L).uri("uri").name(null).sortOrder(1).build())).isInstanceOf(ConstraintViolationException.class); + assertThatThrownBy(() -> menuService.updateMenu(MenuUpdateCommand.builder().id(1L).uri("uri").name("name").sortOrder(null).build())).isInstanceOf(ConstraintViolationException.class); + + // menu delete + assertThatThrownBy(() -> menuService.deleteMenu(null)).isInstanceOf(ConstraintViolationException.class); + } + + +}