admin: role 리팩토링

This commit is contained in:
geonhos 2024-05-21 11:45:47 +09:00
parent 41d42b816b
commit 1bc356e0a4
12 changed files with 141 additions and 166 deletions

View File

@ -2,8 +2,9 @@ package com.bpgroup.poc.admin.domain.base.role.entity;
import com.bpgroup.poc.admin.domain.base.BaseEntity;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.util.HashSet;
import java.util.Set;
@ -11,6 +12,7 @@ import java.util.Set;
@Getter
@Entity
@Table(name = "role")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Role extends BaseEntity {
@Id
@ -26,13 +28,17 @@ public class Role extends BaseEntity {
@OneToMany(mappedBy = "role", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
private Set<RoleMenu> roleMenus = new HashSet<>();
@Builder
public static Role of(String name, String description) {
Role role = new Role();
role.name = name;
role.description = description;
return role;
private Role(String name, String description) {
this.name = name;
this.description = description;
}
public static Role createOf(String name, String description) {
return new Role(name, description);
}
public static Role updateOf(String name, String description) {
return new Role(name, description);
}
public void update(Role updateRole) {

View File

@ -4,12 +4,15 @@ import com.bpgroup.poc.admin.domain.base.BaseEntity;
import com.bpgroup.poc.admin.domain.base.menu.entity.Menu;
import com.bpgroup.poc.admin.domain.base.role.RoleMenuType;
import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@Entity
@Table(name = "role_menu")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class RoleMenu extends BaseEntity {
@Id
@ -28,15 +31,15 @@ public class RoleMenu extends BaseEntity {
@Column(name = "role_menu_type", nullable = false)
private RoleMenuType roleMenuType;
public RoleMenu(Role role, Menu menu, RoleMenuType roleMenuType) {
this.role = role;
this.menu = menu;
this.roleMenuType = roleMenuType;
}
@Builder
public static RoleMenu of(Role role, Menu menu, RoleMenuType roleMenuType) {
RoleMenu roleMenu = new RoleMenu();
roleMenu.role = role;
roleMenu.menu = menu;
roleMenu.roleMenuType = roleMenuType;
roleMenu.role.getRoleMenus().add(roleMenu);
return roleMenu;
public static RoleMenu createOf(Role role, Menu menu, RoleMenuType roleMenuType) {
return new RoleMenu(role, menu, roleMenuType);
}
}

View File

@ -5,31 +5,26 @@ import com.bpgroup.poc.admin.domain.base.role.RoleMenuType;
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 lombok.Builder;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.ToString;
import lombok.RequiredArgsConstructor;
@Getter
@ToString
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class RoleAddMenuCommand {
@NotNull
private Role role;
private final Role role;
@NotNull
private Menu menu;
private final Menu menu;
@NotNull
private RoleMenuType roleMenuType;
private final RoleMenuType roleMenuType;
@Builder
public static RoleAddMenuCommand of(Role role, Menu menu, RoleMenuType roleMenuType) {
RoleAddMenuCommand command = new RoleAddMenuCommand();
command.role = role;
command.menu = menu;
command.roleMenuType = roleMenuType;
return command;
return new RoleAddMenuCommand(role, menu, roleMenuType);
}
public RoleMenu toEntity() {
return RoleMenu.of(role, menu, roleMenuType);
return RoleMenu.createOf(role, menu, roleMenuType);
}
}

View File

@ -2,32 +2,24 @@ package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import jakarta.validation.constraints.NotBlank;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
import lombok.*;
@Getter
@ToString
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class RoleCreateCommand {
@NotBlank
private String name;
private final String name;
private final String description;
private String description;
@Builder
public static RoleCreateCommand of(String name, String description) {
RoleCreateCommand command = new RoleCreateCommand();
command.name = name;
command.description = description;
return command;
return new RoleCreateCommand(name, description);
}
public Role toEntity() {
return Role.builder()
.name(name)
.description(description)
.build();
return Role.createOf(
name,
description
);
}
}

View File

@ -37,23 +37,12 @@ public class RoleService {
public void update(
@NotNull @Valid RoleUpdateCommand command
) {
Optional<Role> findRole = roleRepository.findById(command.getId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Role Not Found");
}
Role role = findRole.get();
role.update(command.toEntity());
Role findRole = roleRepository.findById(command.getId()).orElseThrow(() -> new IllegalArgumentException("Role Not Found"));
findRole.update(command.toEntity());
}
public void delete(@NotNull Long id) {
Optional<Role> findRole = roleRepository.findById(id);
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Role Not Found");
}
Role role = findRole.get();
roleRepository.deleteById(role.getId());
roleRepository.deleteById(id);
}
public void addRoleMenu(
@ -67,13 +56,8 @@ public class RoleService {
}
public void deleteRoleMenu(@NotNull Long roleId) {
Optional<Role> findRole = roleRepository.findById(roleId);
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Role Not Found");
}
Role role = findRole.get();
role.deleteRoleMenus();
Role findRole = roleRepository.findById(roleId).orElseThrow(() -> new IllegalArgumentException("Role Not Found"));
findRole.deleteRoleMenus();
}
public Optional<Role> find(Long roleId) {

View File

@ -3,33 +3,27 @@ package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.ToString;
import lombok.RequiredArgsConstructor;
@Getter
@ToString
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
public class RoleUpdateCommand {
@NotNull
private Long id;
private final Long id;
@NotBlank
private String name;
private String description;
private final String name;
private final String description;
@Builder
public static RoleUpdateCommand of(Long id, String name, String description) {
RoleUpdateCommand command = new RoleUpdateCommand();
command.id = id;
command.name = name;
command.description = description;
return command;
return new RoleUpdateCommand(id, name, description);
}
public Role toEntity() {
return Role.builder()
.name(name)
.description(description)
.build();
return Role.updateOf(
name,
description
);
}
}

View File

@ -19,17 +19,17 @@ import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
@Transactional
public class RoleWebService {
public class RoleAppService {
private final RoleService roleService;
private final MenuService menuService;
public RoleCreate.Response create(RoleCreate.Request request) {
Role createResult = roleService.create(
RoleCreateCommand.builder()
.name(request.getName())
.description(request.getDescription())
.build()
RoleCreateCommand.of(
request.getName(),
request.getDescription()
)
);
return RoleCreate.Response.success(createResult.getId());
@ -37,11 +37,11 @@ public class RoleWebService {
public RoleUpdate.Response update(RoleUpdate.Request request) {
roleService.update(
RoleUpdateCommand.builder()
.id(request.getId())
.name(request.getName())
.description(request.getDescription())
.build()
RoleUpdateCommand.of(
request.getId(),
request.getName(),
request.getDescription()
)
);
return RoleUpdate.Response.success();
@ -68,11 +68,11 @@ public class RoleWebService {
throw new IllegalArgumentException("Menu Not Found");
}
Menu menu = findMenu.get();
return RoleAddMenuCommand.builder()
.role(role)
.menu(menu)
.roleMenuType(menuRecord.roleMenuType())
.build();
return RoleAddMenuCommand.of(
role,
menu,
menuRecord.roleMenuType()
);
}
)
.collect(Collectors.toSet());

View File

@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/admin/role")
public class RoleRestController {
private final RoleWebService roleWebService;
private final RoleAppService roleAppService;
/**
* 권한 등록
@ -28,7 +28,7 @@ public class RoleRestController {
@RequestBody @Valid RoleCreate.Request request,
BindingResult bindingResult
) {
RoleCreate.Response response = roleWebService.create(request);
RoleCreate.Response response = roleAppService.create(request);
return ResponseEntity.ok(response);
}
@ -40,7 +40,7 @@ public class RoleRestController {
@RequestBody @Valid RoleUpdate.Request request,
BindingResult bindingResult
) {
RoleUpdate.Response response = roleWebService.update(request);
RoleUpdate.Response response = roleAppService.update(request);
return ResponseEntity.ok(response);
}
@ -52,7 +52,7 @@ public class RoleRestController {
@RequestBody @Valid RoleDelete.Request request,
BindingResult bindingResult
) {
RoleDelete.Response response = roleWebService.delete(request);
RoleDelete.Response response = roleAppService.delete(request);
return ResponseEntity.ok(response);
}
@ -64,7 +64,7 @@ public class RoleRestController {
@RequestBody @Valid RoleAddMenu.Request request,
BindingResult bindingResult
) {
RoleAddMenu.Response response = roleWebService.putMenu(request);
RoleAddMenu.Response response = roleAppService.putMenu(request);
return ResponseEntity.ok(response);
}

View File

@ -72,10 +72,10 @@ class AdminServiceTest extends MariaDBTestEnv {
flushAndClear();
Role updateRole = roleRepository.save(
Role.builder()
.name("test2")
.description("test2")
.build()
Role.createOf(
"test2",
"test2"
)
);
flushAndClear();
@ -139,10 +139,10 @@ class AdminServiceTest extends MariaDBTestEnv {
@NotNull
private Role getSaveRole() {
return roleRepository.save(
Role.builder()
.name("test")
.description("test")
.build()
Role.createOf(
"test",
"test"
)
);
}
@ -163,23 +163,23 @@ class AdminServiceTest extends MariaDBTestEnv {
@DisplayName("AdminService method 호출 유효성 검사 테스트")
void validationTest() {
// create
assertThatThrownBy(() -> service.create(AdminCreateCommand.of(null, "password", "email", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("", "password", "email", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", null, "email", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "", "email", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", null, "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", "", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", "email", null, AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", "email", "", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of(null, "password", "email", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("", "password", "email", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", null, "email", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "", "email", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", null, "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", "", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", "email", null, AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", "email", "", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.of("loginId", "password", "email", "name", null))).isInstanceOf(ConstraintViolationException.class);
// update
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(null, "password", "email", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "", "email", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", null, "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", "", "name", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", "email", null, AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", "email", "", AdminRole.of(new Role())))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(null, "password", "email", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "", "email", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", null, "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", "", "name", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", "email", null, AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", "email", "", AdminRole.of(Role.createOf("name", ""))))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.of(1L, "password", "email", "name", null))).isInstanceOf(ConstraintViolationException.class);
// delete

View File

@ -54,10 +54,10 @@ class RoleServiceTest extends MariaDBTestEnv {
void createRoleTest() {
// when
Role createResult = roleService.create(
RoleCreateCommand.builder()
.name("TEST")
.description("TEST")
.build()
RoleCreateCommand.of(
"TEST",
"TEST"
)
);
// then
@ -73,11 +73,11 @@ class RoleServiceTest extends MariaDBTestEnv {
// when
roleService.update(
RoleUpdateCommand.builder()
.id(saveRole.getId())
.name("TEST2")
.description("TEST2")
.build()
RoleUpdateCommand.of(
saveRole.getId(),
"TEST2",
"TEST2"
)
);
flushAndClear();
@ -119,16 +119,16 @@ class RoleServiceTest extends MariaDBTestEnv {
// when
roleService.addRoleMenu(
Set.of(
RoleAddMenuCommand.builder()
.role(saveRole)
.menu(menu1)
.roleMenuType(RoleMenuType.MANAGER)
.build(),
RoleAddMenuCommand.builder()
.role(saveRole)
.menu(menu2)
.roleMenuType(RoleMenuType.MANAGER)
.build()
RoleAddMenuCommand.of(
saveRole,
menu1,
RoleMenuType.MANAGER
),
RoleAddMenuCommand.of(
saveRole,
menu2,
RoleMenuType.MANAGER
)
)
);
flushAndClear();
@ -216,10 +216,10 @@ class RoleServiceTest extends MariaDBTestEnv {
private Role createRole() {
return roleRepository.save(
Role.builder()
.name("TEST")
.description("TEST")
.build()
Role.createOf(
"TEST",
"TEST"
)
);
}
@ -247,20 +247,21 @@ class RoleServiceTest extends MariaDBTestEnv {
@DisplayName("RoleService method 호출 유효성 검사 테스트")
void validationTest() {
// create
assertThatThrownBy(() -> roleService.create(RoleCreateCommand.builder().name(null).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.create(RoleCreateCommand.builder().name("").build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.create(RoleCreateCommand.of(null, ""))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.create(RoleCreateCommand.of("", ""))).isInstanceOf(ConstraintViolationException.class);
// update
assertThatThrownBy(() -> roleService.update(RoleUpdateCommand.builder().id(null).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.update(RoleUpdateCommand.builder().id(1L).name(null).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.update(RoleUpdateCommand.builder().id(1L).name("").build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.update(RoleUpdateCommand.of(null, "name", ""))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.update(RoleUpdateCommand.of(1L, null, ""))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.update(RoleUpdateCommand.of(1L, "", ""))).isInstanceOf(ConstraintViolationException.class);
// delete
assertThatThrownBy(() -> roleService.delete(null)).isInstanceOf(ConstraintViolationException.class);
// add Role Menu
assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().role(null).menu(Menu.createOf("uri", "name", 1)).build()))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.builder().role(new Role()).menu(null).build()))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.of(null, Menu.createOf("uri", "name", 1), RoleMenuType.MANAGER)))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.of(Role.createOf("name", ""), null, RoleMenuType.MANAGER)))).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> roleService.addRoleMenu(Set.of(RoleAddMenuCommand.of(Role.createOf("name", ""), Menu.createOf("uri", "name", 1), null)))).isInstanceOf(ConstraintViolationException.class);
// delete Role Menu
assertThatThrownBy(() -> roleService.deleteRoleMenu(null)).isInstanceOf(ConstraintViolationException.class);

View File

@ -110,10 +110,10 @@ class AdminManagementAppServiceTest extends MariaDBTestEnv {
private Role getSavedRole() {
Role role = Role.builder()
.name("test")
.description("test")
.build();
Role role = Role.createOf(
"test",
"test"
);
return roleRepository.save(role);
}
}

View File

@ -6,7 +6,7 @@ import com.bpgroup.poc.admin.domain.base.role.RoleMenuType;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository;
import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import com.bpgroup.poc.admin.web.main.admin.role.RoleWebService;
import com.bpgroup.poc.admin.web.main.admin.role.RoleAppService;
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.RoleDelete;
@ -22,10 +22,10 @@ import static org.assertj.core.api.Assertions.assertThat;
@DisplayName("Role Web Service 테스트")
@Transactional
class RoleWebServiceTest extends MariaDBTestEnv {
class RoleAppServiceTest extends MariaDBTestEnv {
@Autowired
private RoleWebService roleWebService;
private RoleAppService roleAppService;
@Autowired
private RoleRepository roleRepository;
@ -44,7 +44,7 @@ class RoleWebServiceTest extends MariaDBTestEnv {
request.setDescription("test");
// when
RoleCreate.Response response = roleWebService.create(request);
RoleCreate.Response response = roleAppService.create(request);
flushAndClear();
// then
@ -64,7 +64,7 @@ class RoleWebServiceTest extends MariaDBTestEnv {
request.setDescription("test2");
// when
RoleUpdate.Response response = roleWebService.update(request);
RoleUpdate.Response response = roleAppService.update(request);
// then
assertThat(response.getResultCode()).isEqualTo("0000");
@ -81,7 +81,7 @@ class RoleWebServiceTest extends MariaDBTestEnv {
request.setId(savedRole.getId());
// when
RoleDelete.Response response = roleWebService.delete(request);
RoleDelete.Response response = roleAppService.delete(request);
// then
assertThat(response.getResultCode()).isEqualTo("0000");
@ -104,7 +104,7 @@ class RoleWebServiceTest extends MariaDBTestEnv {
);
// when
RoleAddMenu.Response response = roleWebService.putMenu(request);
RoleAddMenu.Response response = roleAppService.putMenu(request);
// then
assertThat(response.getResultCode()).isEqualTo("0000");
@ -122,7 +122,7 @@ class RoleWebServiceTest extends MariaDBTestEnv {
private Role getSavedRole() {
return roleRepository.save(
Role.of(
Role.createOf(
"test",
"test"
)