feature/admin #6
|
|
@ -54,6 +54,16 @@ dependencies {
|
|||
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.5'
|
||||
runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.5'
|
||||
|
||||
// TEST
|
||||
testImplementation 'org.junit.jupiter:junit-jupiter'
|
||||
testImplementation 'org.testcontainers:testcontainers'
|
||||
testImplementation 'org.testcontainers:junit-jupiter'
|
||||
// 테스트 컨테이너 DB 의존성 참고
|
||||
// MySQL : https://www.testcontainers.org/modules/databases/mysql/
|
||||
// MariaDB : https://www.testcontainers.org/modules/databases/mariadb/
|
||||
// MongoDB : https://www.testcontainers.org/modules/databases/mongodb/
|
||||
// PostgreSQL: https://java.testcontainers.org/modules/databases/postgres/
|
||||
testImplementation 'org.testcontainers:mariadb'
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
import java.util.HashSet;
|
||||
|
|
@ -25,4 +26,17 @@ public class Role extends BaseEntity {
|
|||
@OneToMany(mappedBy = "role", fetch = FetchType.LAZY)
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
public void update(Role updateRole) {
|
||||
this.name = updateRole.name;
|
||||
this.description = updateRole.description;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
package com.bpgroup.poc.admin.domain.admin.service;
|
||||
|
||||
import com.bpgroup.poc.admin.domain.admin.entity.Role;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
public class RoleCreateCommand {
|
||||
|
||||
@NotBlank
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
@Builder
|
||||
public static RoleCreateCommand of(String name, String description) {
|
||||
RoleCreateCommand command = new RoleCreateCommand();
|
||||
command.name = name;
|
||||
command.description = description;
|
||||
return command;
|
||||
}
|
||||
|
||||
public Role toEntity() {
|
||||
return Role.builder()
|
||||
.name(name)
|
||||
.description(description)
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
package com.bpgroup.poc.admin.domain.admin.service;
|
||||
|
||||
import com.bpgroup.poc.admin.domain.admin.entity.Role;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
public class RoleUpdateCommand {
|
||||
|
||||
@NotBlank
|
||||
private String name;
|
||||
|
||||
private String description;
|
||||
|
||||
@Builder
|
||||
public static RoleUpdateCommand of(String name, String description) {
|
||||
RoleUpdateCommand command = new RoleUpdateCommand();
|
||||
command.name = name;
|
||||
command.description = description;
|
||||
return command;
|
||||
}
|
||||
|
||||
public Role toEntity() {
|
||||
return Role.builder()
|
||||
.name(name)
|
||||
.description(description)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
@ -1,8 +1,9 @@
|
|||
package com.bpgroup.poc.admin.web.common;
|
||||
|
||||
public class CommonResponse {
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public class CommonResponse {
|
||||
protected String resultCode;
|
||||
protected String resultMessage;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
package com.bpgroup.poc.admin.web.main.admin.role;
|
||||
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
@RequiredArgsConstructor
|
||||
public class RoleQueryRepository {
|
||||
|
||||
private final JPAQueryFactory queryFactory;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package com.bpgroup.poc.admin.web.main.admin.role;
|
||||
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleCreate;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleDelete;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleUpdate;
|
||||
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/role")
|
||||
public class RoleRestController {
|
||||
|
||||
private final RoleService roleService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 권한 등록
|
||||
*/
|
||||
@PostMapping("/create")
|
||||
public ResponseEntity<?> createRole(
|
||||
@RequestBody @Valid RoleCreate.Request request,
|
||||
BindingResult bindingResult
|
||||
) {
|
||||
RoleCreate.Response response = roleService.create(request);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 권한 수정
|
||||
*/
|
||||
@PostMapping("/update")
|
||||
public ResponseEntity<?> updateRole(
|
||||
@RequestBody @Valid RoleUpdate.Request request,
|
||||
BindingResult bindingResult
|
||||
) {
|
||||
RoleUpdate.Response response = roleService.update(request);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 권한 삭제
|
||||
*/
|
||||
@PostMapping("/delete")
|
||||
public ResponseEntity<?> deleteRole(
|
||||
@RequestBody @Valid RoleDelete.Request request,
|
||||
BindingResult bindingResult
|
||||
) {
|
||||
RoleDelete.Response response = roleService.delete(request);
|
||||
return ResponseEntity.ok(response);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,66 @@
|
|||
package com.bpgroup.poc.admin.web.main.admin.role;
|
||||
|
||||
import com.bpgroup.poc.admin.domain.admin.entity.Role;
|
||||
import com.bpgroup.poc.admin.domain.admin.entity.RoleRepository;
|
||||
import com.bpgroup.poc.admin.domain.admin.service.RoleCreateCommand;
|
||||
import com.bpgroup.poc.admin.domain.admin.service.RoleUpdateCommand;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleCreate;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleDelete;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleUpdate;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class RoleService {
|
||||
|
||||
private final RoleRepository repository;
|
||||
private final RoleQueryRepository queryRepository;
|
||||
|
||||
/**
|
||||
* ROLE 생성
|
||||
*/
|
||||
public RoleCreate.Response create(RoleCreate.Request request) {
|
||||
Role role = repository.save(
|
||||
RoleCreateCommand.builder()
|
||||
.name(request.getName())
|
||||
.description(request.getDescription())
|
||||
.build()
|
||||
.toEntity()
|
||||
);
|
||||
|
||||
return RoleCreate.Response.success(role.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* ROLE 수정
|
||||
*/
|
||||
public RoleUpdate.Response update(RoleUpdate.Request request) {
|
||||
Optional<Role> role = repository.findById(request.getId());
|
||||
if (role.isEmpty()) {
|
||||
return RoleUpdate.Response.fail("ROLE_NOT_FOUND");
|
||||
}
|
||||
|
||||
Role findRole = role.get();
|
||||
Role updateRole = RoleUpdateCommand.builder()
|
||||
.name(request.getName())
|
||||
.description(request.getDescription())
|
||||
.build()
|
||||
.toEntity();
|
||||
|
||||
findRole.update(updateRole);
|
||||
|
||||
return RoleUpdate.Response.success();
|
||||
}
|
||||
|
||||
public RoleDelete.Response delete(RoleDelete.Request request) {
|
||||
try {
|
||||
repository.deleteById(request.getId());
|
||||
return RoleDelete.Response.success();
|
||||
} catch (Exception e) {
|
||||
return RoleDelete.Response.fail("Role Delete Fail");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.bpgroup.poc.admin.web.main.admin.role.reqres;
|
||||
|
||||
import com.bpgroup.poc.admin.web.common.CommonResponse;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
public class RoleCreate {
|
||||
|
||||
@Data
|
||||
public static class Request {
|
||||
@NotBlank
|
||||
private String name;
|
||||
private String description;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
public static class Response extends CommonResponse {
|
||||
private Long id;
|
||||
|
||||
@Builder
|
||||
public static RoleCreate.Response success(Long id) {
|
||||
RoleCreate.Response response = new RoleCreate.Response();
|
||||
response.resultCode = "0000";
|
||||
response.resultMessage = "Success";
|
||||
response.id = id;
|
||||
return response;
|
||||
}
|
||||
|
||||
@Builder
|
||||
public static RoleCreate.Response fail() {
|
||||
RoleCreate.Response response = new RoleCreate.Response();
|
||||
response.resultCode = "9999";
|
||||
response.resultMessage = "Fail";
|
||||
return response;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.bpgroup.poc.admin.web.main.admin.role.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 RoleDelete {
|
||||
@Data
|
||||
public static class Request {
|
||||
@NotNull
|
||||
private Long id;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
public static class Response extends CommonResponse {
|
||||
@Builder
|
||||
public static RoleDelete.Response success() {
|
||||
RoleDelete.Response response = new RoleDelete.Response();
|
||||
response.resultCode = "0000";
|
||||
response.resultMessage = "Success";
|
||||
return response;
|
||||
}
|
||||
|
||||
@Builder
|
||||
public static RoleDelete.Response fail(String resultMessage) {
|
||||
RoleDelete.Response response = new RoleDelete.Response();
|
||||
response.resultCode = "9999";
|
||||
response.resultMessage = resultMessage;
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
package com.bpgroup.poc.admin.web.main.admin.role.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 RoleUpdate {
|
||||
|
||||
@Data
|
||||
public static class Request {
|
||||
@NotNull
|
||||
private Long id;
|
||||
@NotBlank
|
||||
private String name;
|
||||
private String description;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@ToString
|
||||
public static class Response extends CommonResponse {
|
||||
@Builder
|
||||
public static RoleUpdate.Response success() {
|
||||
RoleUpdate.Response response = new RoleUpdate.Response();
|
||||
response.resultCode = "0000";
|
||||
response.resultMessage = "Success";
|
||||
return response;
|
||||
}
|
||||
|
||||
@Builder
|
||||
public static RoleUpdate.Response fail(String resultMessage) {
|
||||
RoleUpdate.Response response = new RoleUpdate.Response();
|
||||
response.resultCode = "9999";
|
||||
response.resultMessage = resultMessage;
|
||||
return response;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
package com.bpgroup.poc.admin;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
|
||||
@SpringBootTest
|
||||
class AdminApplicationTests {
|
||||
|
||||
@Test
|
||||
void contextLoads() {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -1,7 +1,9 @@
|
|||
package com.bpgroup.poc.admin.env;
|
||||
|
||||
import jakarta.persistence.EntityManager;
|
||||
import org.junit.jupiter.api.DisplayName;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.test.context.DynamicPropertyRegistry;
|
||||
import org.springframework.test.context.DynamicPropertySource;
|
||||
import org.testcontainers.containers.MariaDBContainer;
|
||||
|
|
@ -10,6 +12,14 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
|
||||
public class MariaDBTestEnv extends IntegrateTestEnv {
|
||||
|
||||
@Autowired
|
||||
private EntityManager em;
|
||||
|
||||
public void flushAndClear() {
|
||||
em.flush();
|
||||
em.clear();
|
||||
}
|
||||
|
||||
private static final String MARIA_DB_IMAGE = "mariadb:10.11.7";
|
||||
|
||||
static MariaDBContainer mariadb = new MariaDBContainer<>(MARIA_DB_IMAGE)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,103 @@
|
|||
package com.bpgroup.poc.admin.web.main.admin.role;
|
||||
|
||||
import com.bpgroup.poc.admin.domain.admin.entity.Role;
|
||||
import com.bpgroup.poc.admin.domain.admin.entity.RoleRepository;
|
||||
import com.bpgroup.poc.admin.domain.admin.service.RoleCreateCommand;
|
||||
import com.bpgroup.poc.admin.env.MariaDBTestEnv;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleCreate;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleDelete;
|
||||
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleUpdate;
|
||||
import jakarta.persistence.EntityManager;
|
||||
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.assertThat;
|
||||
|
||||
@Transactional
|
||||
@DisplayName("Role Service 테스트")
|
||||
class RoleServiceTest extends MariaDBTestEnv {
|
||||
|
||||
@Autowired
|
||||
private EntityManager entityManager;
|
||||
|
||||
@Autowired
|
||||
private RoleService roleService;
|
||||
|
||||
@Autowired
|
||||
private RoleRepository roleRepository;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
roleRepository.deleteAll();
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Role 생성 테스트")
|
||||
void createRoleTest() {
|
||||
// given
|
||||
RoleCreate.Request request = new RoleCreate.Request();
|
||||
request.setName("TEST");
|
||||
request.setDescription("TEST");
|
||||
|
||||
// when
|
||||
RoleCreate.Response response = roleService.create(request);
|
||||
|
||||
// then
|
||||
assertThat(response.getId()).isNotNull();
|
||||
assertThat(response.getResultCode()).isEqualTo("0000");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Role 수정 테스트")
|
||||
void updateRoleTest() {
|
||||
// given
|
||||
Role createRole = roleRepository.save(RoleCreateCommand.builder()
|
||||
.name("TEST")
|
||||
.description("TEST")
|
||||
.build()
|
||||
.toEntity());
|
||||
|
||||
RoleUpdate.Request request = new RoleUpdate.Request();
|
||||
request.setId(createRole.getId());
|
||||
request.setName("TEST2");
|
||||
request.setDescription("TEST2");
|
||||
|
||||
// when
|
||||
RoleUpdate.Response response = roleService.update(request);
|
||||
|
||||
// then
|
||||
assertThat(response.getResultCode()).isEqualTo("0000");
|
||||
|
||||
flushAndClear();
|
||||
|
||||
Role findRole = roleRepository.findById(createRole.getId()).orElseThrow();
|
||||
assertThat(findRole.getName()).isEqualTo("TEST2");
|
||||
assertThat(findRole.getDescription()).isEqualTo("TEST2");
|
||||
}
|
||||
|
||||
@Test
|
||||
@DisplayName("Role 삭제 테스트")
|
||||
void deleteRoleTest() {
|
||||
// given
|
||||
Role createRole = roleRepository.save(RoleCreateCommand.builder()
|
||||
.name("TEST")
|
||||
.description("TEST")
|
||||
.build()
|
||||
.toEntity());
|
||||
|
||||
RoleDelete.Request request = new RoleDelete.Request();
|
||||
request.setId(createRole.getId());
|
||||
|
||||
// when
|
||||
RoleDelete.Response response = roleService.delete(request);
|
||||
|
||||
// then
|
||||
assertThat(response.getResultCode()).isEqualTo("0000");
|
||||
|
||||
flushAndClear();
|
||||
assertThat(roleRepository.findById(createRole.getId())).isEmpty();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue