admin: web / domain layer 분리

This commit is contained in:
geonhos 2024-05-17 10:14:59 +09:00
parent 2c27f7a53d
commit f66c5afe0a
58 changed files with 852 additions and 760 deletions

View File

@ -0,0 +1,52 @@
package com.bpgroup.poc.admin.domain.base.admin.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
@Getter
@Entity
@Table(name = "admin")
public class Admin extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "login_id", length = 100, nullable = false)
private String loginId;
@Column(name = "password", length = 255, nullable = false)
private String password;
@Column(name = "email", length = 100, nullable = false)
private String email;
@Column(name = "name", length = 100, nullable = false)
private String name;
@Embedded
private AdminRole adminRole;
@Builder
public static Admin of(String loginId, String password, String email, String name) {
Admin admin = new Admin();
admin.loginId = loginId;
admin.password = password;
admin.email = email;
admin.name = name;
return admin;
}
public void update(Admin admin) {
this.password = admin.password;
this.email = admin.email;
this.name = admin.name;
this.adminRole = admin.adminRole;
}
public void setAdminRole(AdminRole adminRole) {
this.adminRole = adminRole;
}
}

View File

@ -0,0 +1,9 @@
package com.bpgroup.poc.admin.domain.base.admin.entity;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface AdminRepository extends JpaRepository<Admin, Long> {
Optional<Admin> findByLoginId(String loginId);
}

View File

@ -0,0 +1,22 @@
package com.bpgroup.poc.admin.domain.base.admin.entity;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
@Getter
@Embeddable
public class AdminRole {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Role role;
@Builder
public static AdminRole of(Role role) {
AdminRole adminRole = new AdminRole();
adminRole.role = role;
return adminRole;
}
}

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.management.service; package com.bpgroup.poc.admin.domain.base.admin.service;
import com.bpgroup.poc.admin.domain.entity.administrator.Administrator; import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;
@ -9,7 +9,7 @@ import lombok.ToString;
@Getter @Getter
@ToString @ToString
public class AdministratorCreateCommand { public class AdminCreateCommand {
@NotBlank @NotBlank
private String loginId; private String loginId;
@NotBlank @NotBlank
@ -22,8 +22,8 @@ public class AdministratorCreateCommand {
private Long roleId; private Long roleId;
@Builder @Builder
public static AdministratorCreateCommand of(String loginId, String password, String email, String name, Long roleId) { public static AdminCreateCommand of(String loginId, String password, String email, String name, Long roleId) {
AdministratorCreateCommand command = new AdministratorCreateCommand(); AdminCreateCommand command = new AdminCreateCommand();
command.loginId = loginId; command.loginId = loginId;
command.password = password; command.password = password;
command.email = email; command.email = email;
@ -32,8 +32,8 @@ public class AdministratorCreateCommand {
return command; return command;
} }
public Administrator toEntity() { public Admin toEntity() {
return Administrator.builder() return Admin.builder()
.loginId(loginId) .loginId(loginId)
.password(password) .password(password)
.email(email) .email(email)

View File

@ -0,0 +1,18 @@
package com.bpgroup.poc.admin.domain.base.admin.service;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@Getter
@ToString
public class AdminCreateResult {
private Long id;
@Builder
public static AdminCreateResult of(Long id) {
AdminCreateResult result = new AdminCreateResult();
result.id = id;
return result;
}
}

View File

@ -0,0 +1,79 @@
package com.bpgroup.poc.admin.domain.base.admin.service;
import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRepository;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRole;
import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository;
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 AdminService {
private final AdminRepository adminRepository;
private final RoleRepository roleRepository;
public AdminCreateResult create(
@NotNull @Valid AdminCreateCommand command
) {
Optional<Role> findRole = roleRepository.findById(command.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Not found role");
}
Role role = findRole.get();
Admin admin = command.toEntity();
admin.setAdminRole(
AdminRole.builder()
.role(role)
.build()
);
Admin savedAdmin = adminRepository.save(admin);
return AdminCreateResult.builder()
.id(savedAdmin.getId())
.build();
}
public void update(
@NotNull @Valid AdminUpdateCommand command
) {
Optional<Admin> findAdmin = adminRepository.findById(command.getId());
if (findAdmin.isEmpty()) {
throw new IllegalArgumentException("Not found admin");
}
Optional<Role> findRole = roleRepository.findById(command.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Not found role");
}
Role role = findRole.get();
Admin admin = findAdmin.get();
admin.setAdminRole(
AdminRole.builder()
.role(role)
.build()
);
admin.update(admin);
}
public void delete(@NotNull Long id) {
Optional<Admin> findAdmin = adminRepository.findById(id);
if (findAdmin.isEmpty()) {
throw new IllegalArgumentException("Not found admin");
}
adminRepository.deleteById(id);
}
}

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.management.service; package com.bpgroup.poc.admin.domain.base.admin.service;
import com.bpgroup.poc.admin.domain.entity.administrator.Administrator; import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;
@ -9,7 +9,7 @@ import lombok.ToString;
@Getter @Getter
@ToString @ToString
public class AdministratorUpdateCommand { public class AdminUpdateCommand {
@NotNull @NotNull
private Long id; private Long id;
@NotBlank @NotBlank
@ -22,8 +22,8 @@ public class AdministratorUpdateCommand {
private Long roleId; private Long roleId;
@Builder @Builder
public static AdministratorUpdateCommand of(Long id, String password, String email, String name, Long roleId) { public static AdminUpdateCommand of(Long id, String password, String email, String name, Long roleId) {
AdministratorUpdateCommand command = new AdministratorUpdateCommand(); AdminUpdateCommand command = new AdminUpdateCommand();
command.id = id; command.id = id;
command.password = password; command.password = password;
command.email = email; command.email = email;
@ -32,8 +32,8 @@ public class AdministratorUpdateCommand {
return command; return command;
} }
public Administrator toEntity() { public Admin toEntity() {
return Administrator.builder() return Admin.builder()
.password(password) .password(password)
.email(email) .email(email)
.name(name) .name(name)

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity.menu; package com.bpgroup.poc.admin.domain.base.role.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import jakarta.persistence.*; import jakarta.persistence.*;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity.menu; package com.bpgroup.poc.admin.domain.base.role.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import jakarta.persistence.*; import jakarta.persistence.*;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity.menu; package com.bpgroup.poc.admin.domain.base.role.entity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity.menu; package com.bpgroup.poc.admin.domain.base.role.entity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity.role; package com.bpgroup.poc.admin.domain.base.role.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import jakarta.persistence.*; import jakarta.persistence.*;

View File

@ -1,7 +1,6 @@
package com.bpgroup.poc.admin.domain.entity.role; package com.bpgroup.poc.admin.domain.base.role.entity;
import com.bpgroup.poc.admin.domain.entity.BaseEntity; import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import com.bpgroup.poc.admin.domain.entity.menu.Menu;
import jakarta.persistence.*; import jakarta.persistence.*;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity.role; package com.bpgroup.poc.admin.domain.base.role.entity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.domain.entity.role; package com.bpgroup.poc.admin.domain.base.role.entity;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.menu.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.menu.Menu; import com.bpgroup.poc.admin.domain.base.role.entity.Menu;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.menu.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroup; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.menu.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroup; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,9 +1,9 @@
package com.bpgroup.poc.admin.web.main.admin.menu.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.menu.Menu; import com.bpgroup.poc.admin.domain.base.role.entity.Menu;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroup; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroupRepository; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroupRepository;
import com.bpgroup.poc.admin.domain.entity.menu.MenuRepository; import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -82,4 +82,8 @@ public class MenuService {
menuRepository.deleteById(id); menuRepository.deleteById(id);
} }
public Optional<Menu> findById(Long menuId) {
return menuRepository.findById(menuId);
}
} }

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.menu.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.menu.Menu; import com.bpgroup.poc.admin.domain.base.role.entity.Menu;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.web.main.admin.role.service; package com.bpgroup.poc.admin.domain.base.role.service;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.role.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.role.Role; import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.bpgroup.poc.admin.web.main.admin.role.service; package com.bpgroup.poc.admin.domain.base.role.service;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;

View File

@ -1,11 +1,11 @@
package com.bpgroup.poc.admin.web.main.admin.role.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.menu.Menu; import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenuRepository;
import com.bpgroup.poc.admin.domain.entity.menu.MenuRepository; import com.bpgroup.poc.admin.domain.base.role.entity.Menu;
import com.bpgroup.poc.admin.domain.entity.role.Role; import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository;
import com.bpgroup.poc.admin.domain.entity.role.RoleMenu; import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.entity.role.RoleMenuRepository; import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenu;
import com.bpgroup.poc.admin.domain.entity.role.RoleRepository; import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.web.main.admin.role.service; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.role.Role; import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Builder; import lombok.Builder;

View File

@ -1,52 +0,0 @@
package com.bpgroup.poc.admin.domain.entity.administrator;
import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
@Getter
@Entity
@Table(name = "administrator")
public class Administrator extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "login_id", length = 100, nullable = false)
private String loginId;
@Column(name = "password", length = 255, nullable = false)
private String password;
@Column(name = "email", length = 100, nullable = false)
private String email;
@Column(name = "name", length = 100, nullable = false)
private String name;
@Embedded
private AdministratorRole administratorRole;
@Builder
public static Administrator of(String loginId, String password, String email, String name) {
Administrator administrator = new Administrator();
administrator.loginId = loginId;
administrator.password = password;
administrator.email = email;
administrator.name = name;
return administrator;
}
public void update(Administrator administrator) {
this.password = administrator.password;
this.email = administrator.email;
this.name = administrator.name;
this.administratorRole = administrator.administratorRole;
}
public void setAdministratorRole(AdministratorRole administratorRole) {
this.administratorRole = administratorRole;
}
}

View File

@ -1,9 +0,0 @@
package com.bpgroup.poc.admin.domain.entity.administrator;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional;
public interface AdministratorRepository extends JpaRepository<Administrator, Long> {
Optional<Administrator> findByLoginId(String loginId);
}

View File

@ -1,22 +0,0 @@
package com.bpgroup.poc.admin.domain.entity.administrator;
import com.bpgroup.poc.admin.domain.entity.role.Role;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
@Getter
@Embeddable
public class AdministratorRole {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "role_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Role role;
@Builder
public static AdministratorRole of(Role role) {
AdministratorRole administratorRole = new AdministratorRole();
administratorRole.role = role;
return administratorRole;
}
}

View File

@ -1,7 +0,0 @@
package com.bpgroup.poc.admin.domain.entity.exception;
public class DuplicationAdministratorException extends RuntimeException {
public DuplicationAdministratorException(String loginId) {
super("이미 존재하는 아이디 입니다. : " + loginId);
}
}

View File

@ -1,9 +0,0 @@
package com.bpgroup.poc.admin.domain.entity.exception;
import com.bpgroup.poc.admin.domain.DomainException;
public class NotFoundAdministratorException extends DomainException {
public NotFoundAdministratorException() {
super();
}
}

View File

@ -1,6 +1,6 @@
package com.bpgroup.poc.admin.security.authentication; package com.bpgroup.poc.admin.security.authentication;
import com.bpgroup.poc.admin.security.authentication.service.exception.AdministratorNotFoundException; import com.bpgroup.poc.admin.security.authentication.service.exception.AdminNotFoundException;
import com.bpgroup.poc.admin.security.authentication.service.exception.DoNotHaveAnyMenuException; import com.bpgroup.poc.admin.security.authentication.service.exception.DoNotHaveAnyMenuException;
import com.bpgroup.poc.admin.security.authentication.service.exception.InvalidPasswordException; import com.bpgroup.poc.admin.security.authentication.service.exception.InvalidPasswordException;
import lombok.Getter; import lombok.Getter;
@ -17,7 +17,7 @@ public enum AuthenticationFailReason {
private final String message; private final String message;
public static AuthenticationFailReason from(Exception e) { public static AuthenticationFailReason from(Exception e) {
if (e instanceof AdministratorNotFoundException) { if (e instanceof AdminNotFoundException) {
return WRONG_LOGIN_ID; return WRONG_LOGIN_ID;
} else if (e instanceof InvalidPasswordException) { } else if (e instanceof InvalidPasswordException) {
return WRONG_PASSWORD; return WRONG_PASSWORD;

View File

@ -1,8 +1,8 @@
package com.bpgroup.poc.admin.security.authentication.service; package com.bpgroup.poc.admin.security.authentication.service;
import com.bpgroup.poc.admin.domain.entity.administrator.Administrator; import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.entity.administrator.AdministratorRepository; import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRepository;
import com.bpgroup.poc.admin.security.authentication.service.exception.AdministratorNotFoundException; import com.bpgroup.poc.admin.security.authentication.service.exception.AdminNotFoundException;
import com.bpgroup.poc.admin.security.authentication.service.exception.DoNotHaveAnyMenuException; import com.bpgroup.poc.admin.security.authentication.service.exception.DoNotHaveAnyMenuException;
import com.bpgroup.poc.admin.security.authentication.service.exception.InvalidPasswordException; import com.bpgroup.poc.admin.security.authentication.service.exception.InvalidPasswordException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -16,25 +16,25 @@ import java.util.Optional;
@RequiredArgsConstructor @RequiredArgsConstructor
public class LoginService { public class LoginService {
private final AdministratorRepository administratorRepository; private final AdminRepository adminRepository;
private final PasswordEncoder passwordEncoder; private final PasswordEncoder passwordEncoder;
@Transactional @Transactional
public LoginResult login(String username, String password) throws AdministratorNotFoundException, InvalidPasswordException, DoNotHaveAnyMenuException { public LoginResult login(String username, String password) throws AdminNotFoundException, InvalidPasswordException, DoNotHaveAnyMenuException {
Optional<Administrator> administrator = administratorRepository.findByLoginId(username); Optional<Admin> admin = adminRepository.findByLoginId(username);
if (administrator.isEmpty()) { if (admin.isEmpty()) {
throw new AdministratorNotFoundException(username); throw new AdminNotFoundException(username);
} }
if (!passwordEncoder.matches(password, administrator.get().getPassword())) { if (!passwordEncoder.matches(password, admin.get().getPassword())) {
throw new InvalidPasswordException(username); throw new InvalidPasswordException(username);
} }
return LoginResult.of( return LoginResult.of(
administrator.get().getId(), admin.get().getId(),
administrator.get().getLoginId(), admin.get().getLoginId(),
administrator.get().getName(), admin.get().getName(),
administrator.get().getLoginId() admin.get().getLoginId()
); );
} }

View File

@ -0,0 +1,7 @@
package com.bpgroup.poc.admin.security.authentication.service.exception;
public class AdminNotFoundException extends Exception {
public AdminNotFoundException(String message) {
super(message);
}
}

View File

@ -1,7 +0,0 @@
package com.bpgroup.poc.admin.security.authentication.service.exception;
public class AdministratorNotFoundException extends Exception {
public AdministratorNotFoundException(String message) {
super(message);
}
}

View File

@ -7,12 +7,12 @@ import org.springframework.stereotype.Repository;
import java.util.*; import java.util.*;
import static com.bpgroup.poc.admin.domain.entity.administrator.QAdministrator.administrator; import static com.bpgroup.poc.admin.domain.base.admin.entity.QAdmin.admin;
import static com.bpgroup.poc.admin.domain.entity.administrator.QAdministratorRole.administratorRole; import static com.bpgroup.poc.admin.domain.base.admin.entity.QAdminRole.adminRole;
import static com.bpgroup.poc.admin.domain.entity.menu.QMenu.menu; import static com.bpgroup.poc.admin.domain.base.role.entity.QMenu.menu;
import static com.bpgroup.poc.admin.domain.entity.menu.QMenuGroup.menuGroup; import static com.bpgroup.poc.admin.domain.base.role.entity.QMenuGroup.menuGroup;
import static com.bpgroup.poc.admin.domain.entity.role.QRole.role; import static com.bpgroup.poc.admin.domain.base.role.entity.QRole.role;
import static com.bpgroup.poc.admin.domain.entity.role.QRoleMenu.roleMenu; import static com.bpgroup.poc.admin.domain.base.role.entity.QRoleMenu.roleMenu;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
@ -29,12 +29,12 @@ public class MenuQueryRepository {
roleMenu.menu.name, roleMenu.menu.name,
roleMenu.menu.sortOrder roleMenu.menu.sortOrder
) )
.from(administrator) .from(admin)
.innerJoin(administratorRole.role, role) .innerJoin(adminRole.role, role)
.innerJoin(role.roleMenus, roleMenu) .innerJoin(role.roleMenus, roleMenu)
.innerJoin(roleMenu.menu, menu) .innerJoin(roleMenu.menu, menu)
.innerJoin(menu.menuGroup, menuGroup) .innerJoin(menu.menuGroup, menuGroup)
.where(administrator.loginId.eq("admin")) .where(admin.loginId.eq("admin"))
.orderBy(menuGroup.sortOrder.asc(), roleMenu.menu.sortOrder.asc()) .orderBy(menuGroup.sortOrder.asc(), roleMenu.menu.sortOrder.asc())
.fetch(); .fetch();

View File

@ -6,10 +6,10 @@ import org.springframework.web.bind.annotation.RequestMapping;
@Controller @Controller
@RequestMapping("/admin/management") @RequestMapping("/admin/management")
public class AdministratorManagementController { public class AdminManagementController {
@GetMapping @GetMapping
public String administratorManagementPage() { public String adminManagementPage() {
return "main/admin/management/list"; return "main/admin/management/list";
} }

View File

@ -0,0 +1,41 @@
package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminFind;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
import static com.bpgroup.poc.admin.domain.base.admin.entity.QAdmin.admin;
@Repository
@RequiredArgsConstructor
public class AdminManagementQueryRepository {
private final JPAQueryFactory queryFactory;
public List<AdminFind.Response> findAll() {
return queryFactory.select(Projections.fields(AdminFind.Response.class,
admin.id,
admin.loginId,
admin.email,
admin.name))
.from(admin)
.fetch();
}
public AdminFind.Response findByLoginId(String loginId) {
return queryFactory.select(Projections.fields(AdminFind.Response.class,
admin.id,
admin.loginId,
admin.email,
admin.name))
.from(admin)
.where(admin.loginId.eq(loginId))
.fetchOne();
}
}

View File

@ -0,0 +1,83 @@
package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminFind;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminUpdate;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/management")
public class AdminManagementRestController {
private final AdminManagementWebService adminManagementWebService;
/**
* 전체 조회
*
* @return 응답
*/
@GetMapping("/list")
public ResponseEntity<?> getAdmins() {
List<AdminFind.Response> response = adminManagementWebService.findAll();
return ResponseEntity.ok(response);
}
/**
* 조회
*
* @param loginId 관리자 ID
* @return 응답
*/
@GetMapping("/{loginId}")
public ResponseEntity<?> getAdmin(@PathVariable @NotBlank String loginId) {
AdminFind.Response response = adminManagementWebService.find(loginId);
return ResponseEntity.ok(response);
}
/**
* 관리자 등록
*
* @param request 요청
* @param bindingResult Validation 결과
* @return 응답
*/
@PostMapping("/create")
public ResponseEntity<?> createAdmin(
@RequestBody @Validated AdminCreate.Request request,
BindingResult bindingResult
) {
AdminCreate.Response response = adminManagementWebService.create(request);
return ResponseEntity.ok(response);
}
@PostMapping("/update")
public ResponseEntity<?> updateAdmin(
@RequestBody @Validated AdminUpdate.Request request,
BindingResult bindingResult
) {
AdminUpdate.Response response = adminManagementWebService.update(request);
return ResponseEntity.ok(response);
}
/**
* 관리자 삭제
*/
@PostMapping("/delete")
public ResponseEntity<?> deleteAdmin(
@RequestBody @Validated AdminDelete.Request request,
BindingResult bindingResult
) {
AdminDelete.Response response = adminManagementWebService.delete(request);
return ResponseEntity.ok(response);
}
}

View File

@ -0,0 +1,64 @@
package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminCreateCommand;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminCreateResult;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminService;
import com.bpgroup.poc.admin.domain.base.admin.service.AdminUpdateCommand;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminFind;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdminUpdate;
import lombok.RequiredArgsConstructor;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class AdminManagementWebService {
private final PasswordEncoder passwordEncoder;
private final AdminService adminService;
private final AdminManagementQueryRepository queryRepository;
public List<AdminFind.Response> findAll() {
return queryRepository.findAll();
}
public AdminFind.Response find(String loginId) {
return queryRepository.findByLoginId(loginId);
}
public AdminCreate.Response create(AdminCreate.Request request) {
AdminCreateResult adminCreateResult = adminService.create(
AdminCreateCommand.builder()
.loginId(request.getLoginId())
.password(passwordEncoder.encode(request.getPassword()))
.email(request.getEmail())
.name(request.getName())
.build()
);
return AdminCreate.Response.success(adminCreateResult.getId());
}
public AdminUpdate.Response update(AdminUpdate.Request request) {
adminService.update(
AdminUpdateCommand.builder()
.id(request.getId())
.roleId(request.getRoleId())
.email(request.getEmail())
.name(request.getName())
.build()
);
return AdminUpdate.Response.success();
}
public AdminDelete.Response delete(AdminDelete.Request request) {
adminService.delete(request.getId());
return AdminDelete.Response.success();
}
}

View File

@ -1,41 +0,0 @@
package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorFind;
import com.querydsl.core.types.Projections;
import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository;
import java.util.List;
import static com.bpgroup.poc.admin.domain.entity.administrator.QAdministrator.administrator;
@Repository
@RequiredArgsConstructor
public class AdministratorManagementQueryRepository {
private final JPAQueryFactory queryFactory;
public List<AdministratorFind.Response> findAll() {
return queryFactory.select(Projections.fields(AdministratorFind.Response.class,
administrator.id,
administrator.loginId,
administrator.email,
administrator.name))
.from(administrator)
.fetch();
}
public AdministratorFind.Response find(String loginId) {
return queryFactory.select(Projections.fields(AdministratorFind.Response.class,
administrator.id,
administrator.loginId,
administrator.email,
administrator.name))
.from(administrator)
.where(administrator.loginId.eq(loginId))
.fetchOne();
}
}

View File

@ -1,110 +0,0 @@
package com.bpgroup.poc.admin.web.main.admin.management;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorCreate;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorDelete;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorFind;
import com.bpgroup.poc.admin.web.main.admin.management.reqres.AdministratorUpdate;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorCreateCommand;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorCreateResult;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorManagementService;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorUpdateCommand;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/management")
public class AdministratorManagementRestController {
private final PasswordEncoder passwordEncoder;
private final AdministratorManagementService service;
private final AdministratorManagementQueryRepository queryRepository;
/**
* 전체 조회
*
* @return 응답
*/
@GetMapping("/list")
public ResponseEntity<?> getAdministrators() {
List<AdministratorFind.Response> response = queryRepository.findAll();
return ResponseEntity.ok(response);
}
/**
* 조회
*
* @param loginId 관리자 ID
* @return 응답
*/
@GetMapping("/{loginId}")
public ResponseEntity<?> getAdministrator(@PathVariable @NotBlank String loginId) {
AdministratorFind.Response response = queryRepository.find(loginId);
return ResponseEntity.ok(response);
}
/**
* 관리자 등록
*
* @param request 요청
* @param bindingResult Validation 결과
* @return 응답
*/
@PostMapping("/create")
public ResponseEntity<?> createAdministrator(
@RequestBody @Validated AdministratorCreate.Request request,
BindingResult bindingResult
) {
AdministratorCreateResult result = service.create(
AdministratorCreateCommand.builder()
.loginId(request.getLoginId())
.password(passwordEncoder.encode(request.getPassword()))
.email(request.getEmail())
.name(request.getName())
.build()
);
return ResponseEntity.ok(AdministratorCreate.Response.success(result.getId()));
}
@PostMapping("/update")
public ResponseEntity<?> updateAdministrator(
@RequestBody @Validated AdministratorUpdate.Request request,
BindingResult bindingResult
) {
service.update(
AdministratorUpdateCommand.builder()
.password(passwordEncoder.encode(request.getPassword()))
.name(request.getName())
.email(request.getEmail())
.roleId(request.getRoleId())
.build()
);
return ResponseEntity.ok(AdministratorUpdate.Response.success());
}
/**
* 관리자 삭제
*
* @param request 요청
* @param bindingResult Validation 결과
* @return 응답
*/
@PostMapping("/delete")
public ResponseEntity<?> deleteAdministrator(
@RequestBody @Validated AdministratorDelete.Request request,
BindingResult bindingResult
) {
service.delete(request.getId());
return ResponseEntity.ok(AdministratorDelete.Response.success());
}
}

View File

@ -7,7 +7,7 @@ import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.ToString; import lombok.ToString;
public class AdministratorCreate { public class AdminCreate {
@Data @Data
public static class Request { public static class Request {

View File

@ -7,7 +7,7 @@ import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.ToString; import lombok.ToString;
public class AdministratorDelete { public class AdminDelete {
@Data @Data
public static class Request { public static class Request {
@ -19,16 +19,16 @@ public class AdministratorDelete {
@ToString @ToString
public static class Response extends CommonResponse { public static class Response extends CommonResponse {
@Builder @Builder
public static AdministratorDelete.Response success() { public static AdminDelete.Response success() {
AdministratorDelete.Response response = new AdministratorDelete.Response(); AdminDelete.Response response = new AdminDelete.Response();
response.resultCode = "0000"; response.resultCode = "0000";
response.resultMessage = "Success"; response.resultMessage = "Success";
return response; return response;
} }
@Builder @Builder
public static AdministratorDelete.Response fail(String resultMessage) { public static AdminDelete.Response fail(String resultMessage) {
AdministratorDelete.Response response = new AdministratorDelete.Response(); AdminDelete.Response response = new AdminDelete.Response();
response.resultCode = "9999"; response.resultCode = "9999";
response.resultMessage = resultMessage; response.resultMessage = resultMessage;
return response; return response;

View File

@ -3,7 +3,7 @@ package com.bpgroup.poc.admin.web.main.admin.management.reqres;
import lombok.Getter; import lombok.Getter;
import lombok.ToString; import lombok.ToString;
public class AdministratorFind { public class AdminFind {
@Getter @Getter
@ToString @ToString

View File

@ -8,7 +8,7 @@ import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.ToString; import lombok.ToString;
public class AdministratorUpdate { public class AdminUpdate {
@Data @Data
public static class Request { public static class Request {
@ -28,16 +28,16 @@ public class AdministratorUpdate {
@ToString @ToString
public static class Response extends CommonResponse { public static class Response extends CommonResponse {
@Builder @Builder
public static AdministratorUpdate.Response success() { public static AdminUpdate.Response success() {
AdministratorUpdate.Response response = new AdministratorUpdate.Response(); AdminUpdate.Response response = new AdminUpdate.Response();
response.resultCode = "0000"; response.resultCode = "0000";
response.resultMessage = "Success"; response.resultMessage = "Success";
return response; return response;
} }
@Builder @Builder
public static AdministratorUpdate.Response fail(String resultMessage) { public static AdminUpdate.Response fail(String resultMessage) {
AdministratorUpdate.Response response = new AdministratorUpdate.Response(); AdminUpdate.Response response = new AdminUpdate.Response();
response.resultCode = "9999"; response.resultCode = "9999";
response.resultMessage = resultMessage; response.resultMessage = resultMessage;
return response; return response;

View File

@ -1,18 +0,0 @@
package com.bpgroup.poc.admin.web.main.admin.management.service;
import lombok.Builder;
import lombok.Getter;
import lombok.ToString;
@Getter
@ToString
public class AdministratorCreateResult {
private Long id;
@Builder
public static AdministratorCreateResult of(Long id) {
AdministratorCreateResult result = new AdministratorCreateResult();
result.id = id;
return result;
}
}

View File

@ -1,79 +0,0 @@
package com.bpgroup.poc.admin.web.main.admin.management.service;
import com.bpgroup.poc.admin.domain.entity.administrator.Administrator;
import com.bpgroup.poc.admin.domain.entity.administrator.AdministratorRepository;
import com.bpgroup.poc.admin.domain.entity.administrator.AdministratorRole;
import com.bpgroup.poc.admin.domain.entity.role.Role;
import com.bpgroup.poc.admin.domain.entity.role.RoleRepository;
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 AdministratorManagementService {
private final AdministratorRepository administratorRepository;
private final RoleRepository roleRepository;
public AdministratorCreateResult create(
@NotNull @Valid AdministratorCreateCommand command
) {
Optional<Role> findRole = roleRepository.findById(command.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Not found role");
}
Role role = findRole.get();
Administrator administrator = command.toEntity();
administrator.setAdministratorRole(
AdministratorRole.builder()
.role(role)
.build()
);
Administrator savedAdministrator = administratorRepository.save(administrator);
return AdministratorCreateResult.builder()
.id(savedAdministrator.getId())
.build();
}
public void update(
@NotNull @Valid AdministratorUpdateCommand command
) {
Optional<Administrator> findAdministrator = administratorRepository.findById(command.getId());
if (findAdministrator.isEmpty()) {
throw new IllegalArgumentException("Not found administrator");
}
Optional<Role> findRole = roleRepository.findById(command.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Not found role");
}
Role role = findRole.get();
Administrator administrator = findAdministrator.get();
administrator.setAdministratorRole(
AdministratorRole.builder()
.role(role)
.build()
);
administrator.update(administrator);
}
public void delete(@NotNull Long id) {
Optional<Administrator> findAdministrator = administratorRepository.findById(id);
if (findAdministrator.isEmpty()) {
throw new IllegalArgumentException("Not found administrator");
}
administratorRepository.deleteById(id);
}
}

View File

@ -1,6 +1,5 @@
package com.bpgroup.poc.admin.web.main.admin.menu; package com.bpgroup.poc.admin.web.main.admin.menu;
import com.bpgroup.poc.admin.web.main.admin.menu.service.*;
import com.bpgroup.poc.admin.web.main.admin.menu.reqres.*; import com.bpgroup.poc.admin.web.main.admin.menu.reqres.*;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -13,95 +12,64 @@ import org.springframework.web.bind.annotation.RestController;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/admin/menu") @RequestMapping("/admin")
public class MenuRestController { public class MenuRestController {
private final MenuService service; private final MenuWebService menuWebService;
@PostMapping("/menu-group/create")
@PostMapping("/create/menu-group")
public ResponseEntity<?> createMenuGroup( public ResponseEntity<?> createMenuGroup(
@RequestBody @Valid MenuGroupCreate.Request request, @RequestBody @Valid MenuGroupCreate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
service.createMenuGroup( MenuGroupCreate.Response response = menuWebService.createMenuGroup(request);
MenuGroupCreateCommand.builder() return ResponseEntity.ok(response);
.name(request.getName())
.uri(request.getUri())
.sortOrder(request.getSortOrder())
.build()
);
return ResponseEntity.ok(MenuGroupCreate.Response.success());
} }
@PostMapping("/update/menu-group") @PostMapping("/menu-group/update")
public ResponseEntity<?> updateMenuGroup( public ResponseEntity<?> updateMenuGroup(
@RequestBody @Valid MenuGroupUpdate.Request request, @RequestBody @Valid MenuGroupUpdate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
service.updateMenuGroup( MenuGroupUpdate.Response response = menuWebService.updateMenuGroup(request);
MenuGroupUpdateCommand.builder() return ResponseEntity.ok(response);
.id(request.getId())
.name(request.getName())
.uri(request.getUri())
.sortOrder(request.getSortOrder())
.build()
);
return ResponseEntity.ok(MenuGroupCreate.Response.success());
} }
@PostMapping("/delete/menu-group") @PostMapping("/menu-group/delete")
public ResponseEntity<?> deleteMenuGroup( public ResponseEntity<?> deleteMenuGroup(
@RequestBody @Valid MenuGroupDelete.Request request, @RequestBody @Valid MenuGroupDelete.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
service.deleteMenuGroup(request.getId()); MenuGroupDelete.Response response = menuWebService.deleteMenuGroup(request);
return ResponseEntity.ok(response);
return ResponseEntity.ok(MenuGroupDelete.Response.success());
} }
@PostMapping("/create/menu") @PostMapping("/menu/create")
public ResponseEntity<?> createMenu( public ResponseEntity<?> createMenu(
@RequestBody @Valid MenuCreate.Request request, @RequestBody @Valid MenuCreate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
service.createMenu( MenuCreate.Response response = menuWebService.createMenu(request);
MenuCreateCommand.builder() return ResponseEntity.ok(response);
.menuGroupId(request.getMenuGroupId())
.name(request.getName())
.uri(request.getUri())
.sortOrder(request.getSortOrder())
.build()
);
return ResponseEntity.ok(MenuCreate.Response.success());
} }
@PostMapping("/update/menu") @PostMapping("/menu/update")
public ResponseEntity<?> updateMenu( public ResponseEntity<?> updateMenu(
@RequestBody @Valid MenuUpdate.Request request, @RequestBody @Valid MenuUpdate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
service.updateMenu( MenuUpdate.Response response = menuWebService.updateMenu(request);
MenuUpdateCommand.builder() return ResponseEntity.ok(response);
.id(request.getId())
.name(request.getName())
.uri(request.getUri())
.sortOrder(request.getSortOrder())
.build()
);
return ResponseEntity.ok(MenuGroupCreate.Response.success());
} }
@PostMapping("/delete/menu") @PostMapping("/menu/delete")
public ResponseEntity<?> deleteMenu( public ResponseEntity<?> deleteMenu(
@RequestBody @Valid MenuDelete.Request request, @RequestBody @Valid MenuDelete.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
service.deleteMenu(request.getId()); MenuDelete.Response response = menuWebService.deleteMenu(request);
return ResponseEntity.ok(response);
return ResponseEntity.ok(MenuDelete.Response.success());
} }
} }

View File

@ -0,0 +1,74 @@
package com.bpgroup.poc.admin.web.main.admin.menu;
import com.bpgroup.poc.admin.domain.base.role.service.*;
import com.bpgroup.poc.admin.web.main.admin.menu.reqres.*;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
public class MenuWebService {
private final MenuService menuService;
public MenuGroupCreate.Response createMenuGroup(MenuGroupCreate.Request request) {
menuService.createMenuGroup(
MenuGroupCreateCommand.builder()
.name(request.getName())
.uri(request.getUri())
.sortOrder(request.getSortOrder())
.build()
);
return MenuGroupCreate.Response.success();
}
public MenuGroupUpdate.Response updateMenuGroup(MenuGroupUpdate.Request request) {
menuService.updateMenuGroup(
MenuGroupUpdateCommand.builder()
.id(request.getId())
.name(request.getName())
.uri(request.getUri())
.sortOrder(request.getSortOrder())
.build()
);
return MenuGroupUpdate.Response.success();
}
public MenuGroupDelete.Response deleteMenuGroup(MenuGroupDelete.Request request) {
menuService.deleteMenuGroup(request.getId());
return MenuGroupDelete.Response.success();
}
public MenuCreate.Response createMenu(MenuCreate.Request request) {
menuService.createMenu(
MenuCreateCommand.builder()
.menuGroupId(request.getMenuGroupId())
.uri(request.getUri())
.name(request.getName())
.sortOrder(request.getSortOrder())
.build()
);
return MenuCreate.Response.success();
}
public MenuUpdate.Response updateMenu(MenuUpdate.Request request) {
menuService.updateMenu(
MenuUpdateCommand.builder()
.id(request.getId())
.uri(request.getUri())
.name(request.getName())
.sortOrder(request.getSortOrder())
.build()
);
return MenuUpdate.Response.success();
}
public MenuDelete.Response deleteMenu(MenuDelete.Request request) {
menuService.deleteMenu(request.getId());
return MenuDelete.Response.success();
}
}

View File

@ -4,7 +4,6 @@ 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.RoleCreate;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleDelete; import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleDelete;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleUpdate; import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleUpdate;
import com.bpgroup.poc.admin.web.main.admin.role.service.*;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
@ -14,17 +13,12 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/admin/role") @RequestMapping("/admin/role")
public class RoleRestController { public class RoleRestController {
private final RoleService roleService; private final RoleWebService roleWebService;
/** /**
* 권한 등록 * 권한 등록
@ -34,14 +28,8 @@ public class RoleRestController {
@RequestBody @Valid RoleCreate.Request request, @RequestBody @Valid RoleCreate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
RoleCreateResult result = roleService.create( RoleCreate.Response response = roleWebService.create(request);
RoleCreateCommand.builder() return ResponseEntity.ok(response);
.name(request.getName())
.description(request.getDescription())
.build()
);
return ResponseEntity.ok(RoleCreate.Response.success(result.getId()));
} }
/** /**
@ -52,14 +40,7 @@ public class RoleRestController {
@RequestBody @Valid RoleUpdate.Request request, @RequestBody @Valid RoleUpdate.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
roleService.update( roleWebService.update(request);
RoleUpdateCommand.builder()
.id(request.getId())
.name(request.getName())
.description(request.getDescription())
.build()
);
return ResponseEntity.ok(RoleUpdate.Response.success()); return ResponseEntity.ok(RoleUpdate.Response.success());
} }
@ -71,31 +52,19 @@ public class RoleRestController {
@RequestBody @Valid RoleDelete.Request request, @RequestBody @Valid RoleDelete.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
roleService.delete(request.getId()); roleWebService.delete(request);
return ResponseEntity.ok(RoleDelete.Response.success()); return ResponseEntity.ok(RoleDelete.Response.success());
} }
/** /**
* 권한 메뉴 추가 * 권한 메뉴 추가
* DELETE -> INSERT
*/ */
@PostMapping("/put/menu") @PostMapping("/put/menu")
public ResponseEntity<?> addMenu( public ResponseEntity<?> addMenu(
@RequestBody @Valid List<RoleAddMenu.Request> request, @RequestBody @Valid RoleAddMenu.Request request,
BindingResult bindingResult BindingResult bindingResult
) { ) {
roleService.deleteRoleMenu(request.get(0).getRoleId()); roleWebService.putMenu(request);
Set<RoleAddMenuCommand> commands = request.stream()
.map(c -> RoleAddMenuCommand.builder()
.roleId(c.getRoleId())
.menuId(c.getMenuId())
.build()
)
.collect(Collectors.toSet());
roleService.addRoleMenu(commands);
return ResponseEntity.ok(RoleAddMenu.Response.success()); return ResponseEntity.ok(RoleAddMenu.Response.success());
} }

View File

@ -0,0 +1,60 @@
package com.bpgroup.poc.admin.web.main.admin.role;
import com.bpgroup.poc.admin.domain.base.role.service.*;
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;
import com.bpgroup.poc.admin.web.main.admin.role.reqres.RoleUpdate;
import jakarta.validation.Valid;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.Set;
import java.util.stream.Collectors;
@Service
@RequiredArgsConstructor
public class RoleWebService {
private final RoleService roleService;
public RoleCreate.Response create(RoleCreate.Request request) {
RoleCreateResult createResult = roleService.create(
RoleCreateCommand.builder()
.name(request.getName())
.description(request.getDescription())
.build()
);
return RoleCreate.Response.success(createResult.getId());
}
public void update(RoleUpdate.Request request) {
roleService.update(
RoleUpdateCommand.builder()
.id(request.getId())
.name(request.getName())
.description(request.getDescription())
.build()
);
}
public void delete(RoleDelete.Request request) {
roleService.delete(request.getId());
}
public void putMenu(@NotNull @Valid RoleAddMenu.Request request) {
roleService.deleteRoleMenu(request.getRoleId());
Set<RoleAddMenuCommand> commands = request.getMenuIds().stream()
.map(menuId -> RoleAddMenuCommand.builder()
.roleId(request.getRoleId())
.menuId(menuId)
.build()
)
.collect(Collectors.toSet());
roleService.addRoleMenu(commands);
}
}

View File

@ -2,11 +2,15 @@ package com.bpgroup.poc.admin.web.main.admin.role.reqres;
import com.bpgroup.poc.admin.web.common.CommonResponse; import com.bpgroup.poc.admin.web.common.CommonResponse;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.Getter; import lombok.Getter;
import lombok.ToString; import lombok.ToString;
import java.util.HashSet;
import java.util.Set;
public class RoleAddMenu { public class RoleAddMenu {
@Data @Data
@ -14,7 +18,8 @@ public class RoleAddMenu {
@NotNull @NotNull
private Long roleId; private Long roleId;
@NotNull @NotNull
private Long menuId; @Size(min = 1)
private Set<Long> menuIds = new HashSet<>();
} }

View File

@ -1,14 +1,10 @@
INSERT INTO `administrator` (`login_id`, `password`, `email`, `name`, `create_date`, `update_date`)
VALUES ('admin', '$2a$10$g6UOrQ/OS8o5r5CJk7C5juVFaItQ62U3EIn8zLPzkFplM3wVLvKZ2', 'admin@admin.com', '홍길동', CURDATE(),
CURDATE());
INSERT INTO `role` (`name`, `description`, `create_date`, `update_date`) INSERT INTO `role` (`name`, `description`, `create_date`, `update_date`)
VALUES ('SUPER_ADMIN', '최고 관리자', CURDATE(), CURDATE()), VALUES ('SUPER_ADMIN', '최고 관리자', CURDATE(), CURDATE()),
('ADMIN', '관리자', CURDATE(), CURDATE()), ('ADMIN', '관리자', CURDATE(), CURDATE()),
('CLIENT', '고객', CURDATE(), CURDATE()); ('CLIENT', '고객', CURDATE(), CURDATE());
INSERT INTO `administrator_role` (`administrator_id`, `role_id`, `create_date`, `update_date`) INSERT INTO `admin` (`login_id`, `password`, `email`, `name`, `role_id`, `create_date`, `update_date`)
VALUES ('1', '1', CURDATE(), CURDATE()); VALUES ('admin', '$2a$10$g6UOrQ/OS8o5r5CJk7C5juVFaItQ62U3EIn8zLPzkFplM3wVLvKZ2', 'admin@admin.com', '홍길동', 1, CURDATE(), CURDATE());
INSERT INTO `menu_group` (`uri`, `name`, `sort_order`, `create_date`, `update_date`) INSERT INTO `menu_group` (`uri`, `name`, `sort_order`, `create_date`, `update_date`)
VALUES ('/admin', '관리자 관리', 2, CURDATE(), CURDATE()), VALUES ('/admin', '관리자 관리', 2, CURDATE(), CURDATE()),

View File

@ -16,8 +16,8 @@
<h4>관리자 조회</h4> <h4>관리자 조회</h4>
<div class="tb_wrapper"> <div class="tb_wrapper">
<label for="selAdministrator">관리자: </label> <label for="selAdmin">관리자: </label>
<select id="selAdministrator" class="table_select_box"> <select id="selAdmin" class="table_select_box">
<option value="">선택</option> <option value="">선택</option>
</select> </select>
<button type="button" id="btnFindAll" class="btn_confirm" data-bs-dismiss="modal">조회</button> <button type="button" id="btnFindAll" class="btn_confirm" data-bs-dismiss="modal">조회</button>
@ -55,7 +55,7 @@
document.getElementById('iptUpdateName').value = ''; document.getElementById('iptUpdateName').value = '';
document.getElementById('iptDeleteId').value = ''; document.getElementById('iptDeleteId').value = '';
document.getElementById('iptDeleteLoginId').value = ''; document.getElementById('iptDeleteLoginId').value = '';
document.getElementById('selAdministrator').innerHTML = '<option value="">선택</option>'; document.getElementById('selAdmin').innerHTML = '<option value="">선택</option>';
} }
/** /**
@ -105,20 +105,20 @@
document.getElementById('btnFindAll').addEventListener(('click'), function () { document.getElementById('btnFindAll').addEventListener(('click'), function () {
const requestUri = /*[[@{/admin/management/list}]]*/ ''; const requestUri = /*[[@{/admin/management/list}]]*/ '';
Reqhelper.reqGetJson(requestUri, (res) => { Reqhelper.reqGetJson(requestUri, (res) => {
const selAdministrator = document.getElementById('selAdministrator'); const selAdmin = document.getElementById('selAdmin');
selAdministrator.innerHTML = '<option value="">선택</option>'; selAdmin.innerHTML = '<option value="">선택</option>';
res.forEach(item => { res.forEach(item => {
const option = document.createElement('option'); const option = document.createElement('option');
option.value = item.id; option.value = item.id;
option.text = item.loginId; option.text = item.loginId;
selAdministrator.appendChild(option); selAdmin.appendChild(option);
}); });
}, () => { }, () => {
PageHelper.showErrorModal('데이터 조회에 실패했습니다.'); PageHelper.showErrorModal('데이터 조회에 실패했습니다.');
}); });
}); });
document.getElementById('selAdministrator').addEventListener(('change'), function () { document.getElementById('selAdmin').addEventListener(('change'), function () {
document.getElementById('iptUpdateId').value = this.value; document.getElementById('iptUpdateId').value = this.value;
document.getElementById('iptUpdateLoginId').value = this.options[this.selectedIndex].text; document.getElementById('iptUpdateLoginId').value = this.options[this.selectedIndex].text;
document.getElementById('iptDeleteId').value = this.value; document.getElementById('iptDeleteId').value = this.value;

View File

@ -0,0 +1,194 @@
package com.bpgroup.poc.admin.domain.base.admin.service;
import com.bpgroup.poc.admin.domain.base.admin.entity.Admin;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRepository;
import com.bpgroup.poc.admin.domain.base.admin.entity.AdminRole;
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 jakarta.validation.ConstraintViolationException;
import org.jetbrains.annotations.NotNull;
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;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@Transactional
@DisplayName("AdminService 테스트")
class AdminServiceTest extends MariaDBTestEnv {
@Autowired
private AdminService service;
@Autowired
private AdminRepository adminRepository;
@Autowired
private RoleRepository roleRepository;
@BeforeEach
void setUp() {
adminRepository.deleteAll();
roleRepository.deleteAll();
}
@Test
void createAdminTest() {
Role role = getSaveRole();
flushAndClear();
// when
AdminCreateResult createResult = service.create(
AdminCreateCommand.builder()
.loginId("test")
.password("test")
.email("test")
.name("test")
.roleId(role.getId())
.build()
);
flushAndClear();
// then
assertThat(createResult.getId()).isNotNull();
Admin findAdmin = adminRepository.findById(createResult.getId()).orElseThrow();
assertThat(findAdmin.getAdminRole().getRole().getName()).isEqualTo("test");
}
@DisplayName("Admin 수정 테스트")
@Test
void updateAdminTest() {
// given
Role saveRole = getSaveRole();
flushAndClear();
Admin saveAdmin = createAdmin(saveRole);
flushAndClear();
Role updateRole = roleRepository.save(
Role.builder()
.name("test2")
.description("test2")
.build()
);
flushAndClear();
// when
service.update(
AdminUpdateCommand.builder()
.id(saveAdmin.getId())
.password("test2")
.email("test2")
.name("test2")
.roleId(updateRole.getId())
.build()
);
flushAndClear();
// then
Admin findAdmin = adminRepository.findById(saveAdmin.getId()).orElseThrow();
assertThat(findAdmin.getPassword()).isEqualTo("test2");
assertThat(findAdmin.getEmail()).isEqualTo("test2");
assertThat(findAdmin.getName()).isEqualTo("test2");
assertThat(findAdmin.getAdminRole().getRole().getName()).isEqualTo("test2");
}
@DisplayName("Admin 삭제 테스트")
@Test
void deleteAdminTest() {
// given
Role saveRole = getSaveRole();
flushAndClear();
Admin saveAdmin = createAdmin(saveRole);
flushAndClear();
// when
service.delete(saveAdmin.getId());
flushAndClear();
// then
assertThat(adminRepository.findById(saveAdmin.getId())).isEmpty();
}
@DisplayName("Admin 삭제 시 Admin 동시 삭제 테스트")
@Test
void deleteAdminAndAdminRoleTest() {
// given
Role saveRole = getSaveRole();
flushAndClear();
Admin saveAdmin = createAdmin(saveRole);
flushAndClear();
// when
service.delete(saveAdmin.getId());
flushAndClear();
// then
assertThat(adminRepository.findById(saveAdmin.getId())).isEmpty();
}
@NotNull
private Role getSaveRole() {
return roleRepository.save(
Role.builder()
.name("test")
.description("test")
.build()
);
}
@NotNull
private Admin createAdmin(Role role) {
Admin admin = Admin.builder()
.loginId("test2")
.password("test2")
.email("test2")
.name("test2")
.build();
admin.setAdminRole(
AdminRole.builder()
.role(role)
.build()
);
return adminRepository.save(admin);
}
@Test
@DisplayName("AdminService method 호출 유효성 검사 테스트")
void validationTest() {
// create
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId(null).password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("").password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password(null).email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email(null).name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name(null).roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name("").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdminCreateCommand.builder().loginId("loginId").password("password").email("email").name("name").roleId(null).build())).isInstanceOf(ConstraintViolationException.class);
// update
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(null).password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password(null).email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email(null).name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name(null).roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name("").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdminUpdateCommand.builder().id(1L).password("password").email("email").name("name").roleId(null).build())).isInstanceOf(ConstraintViolationException.class);
// delete
assertThatThrownBy(() -> service.delete(null)).isInstanceOf(ConstraintViolationException.class);
}
}

View File

@ -1,11 +1,11 @@
package com.bpgroup.poc.admin.web.main.admin.menu; package com.bpgroup.poc.admin.domain.base.menu.service;
import com.bpgroup.poc.admin.domain.entity.menu.Menu; import com.bpgroup.poc.admin.domain.base.role.entity.Menu;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroup; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroupRepository; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroupRepository;
import com.bpgroup.poc.admin.domain.entity.menu.MenuRepository; import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository;
import com.bpgroup.poc.admin.domain.base.role.service.*;
import com.bpgroup.poc.admin.env.MariaDBTestEnv; import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import com.bpgroup.poc.admin.web.main.admin.menu.service.*;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@ -1,15 +1,15 @@
package com.bpgroup.poc.admin.web.main.admin.role; package com.bpgroup.poc.admin.domain.base.role.service;
import com.bpgroup.poc.admin.domain.entity.menu.Menu; import com.bpgroup.poc.admin.domain.base.role.entity.Role;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroup; import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenu;
import com.bpgroup.poc.admin.domain.entity.menu.MenuGroupRepository; import com.bpgroup.poc.admin.domain.base.role.entity.RoleMenuRepository;
import com.bpgroup.poc.admin.domain.entity.menu.MenuRepository; import com.bpgroup.poc.admin.domain.base.role.entity.RoleRepository;
import com.bpgroup.poc.admin.domain.entity.role.Role; import com.bpgroup.poc.admin.domain.base.role.service.*;
import com.bpgroup.poc.admin.domain.entity.role.RoleMenu; import com.bpgroup.poc.admin.domain.base.role.entity.Menu;
import com.bpgroup.poc.admin.domain.entity.role.RoleMenuRepository; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroup;
import com.bpgroup.poc.admin.domain.entity.role.RoleRepository; import com.bpgroup.poc.admin.domain.base.role.entity.MenuGroupRepository;
import com.bpgroup.poc.admin.domain.base.role.entity.MenuRepository;
import com.bpgroup.poc.admin.env.MariaDBTestEnv; import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import com.bpgroup.poc.admin.web.main.admin.role.service.*;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayName;

View File

@ -1,198 +0,0 @@
package com.bpgroup.poc.admin.web.main.admin.administrator;
import com.bpgroup.poc.admin.domain.entity.administrator.Administrator;
import com.bpgroup.poc.admin.domain.entity.administrator.AdministratorRepository;
import com.bpgroup.poc.admin.domain.entity.administrator.AdministratorRole;
import com.bpgroup.poc.admin.domain.entity.role.Role;
import com.bpgroup.poc.admin.domain.entity.role.RoleRepository;
import com.bpgroup.poc.admin.env.MariaDBTestEnv;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorCreateCommand;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorCreateResult;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorManagementService;
import com.bpgroup.poc.admin.web.main.admin.management.service.AdministratorUpdateCommand;
import jakarta.validation.ConstraintViolationException;
import org.jetbrains.annotations.NotNull;
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;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@Transactional
@DisplayName("AdministratorService 테스트")
class AdministratorServiceTest extends MariaDBTestEnv {
@Autowired
private AdministratorManagementService service;
@Autowired
private AdministratorRepository administratorRepository;
@Autowired
private RoleRepository roleRepository;
@BeforeEach
void setUp() {
administratorRepository.deleteAll();
roleRepository.deleteAll();
}
@Test
void createAdministratorTest() {
Role role = getSaveRole();
flushAndClear();
// when
AdministratorCreateResult createResult = service.create(
AdministratorCreateCommand.builder()
.loginId("test")
.password("test")
.email("test")
.name("test")
.roleId(role.getId())
.build()
);
flushAndClear();
// then
assertThat(createResult.getId()).isNotNull();
Administrator findAdministrator = administratorRepository.findById(createResult.getId()).orElseThrow();
assertThat(findAdministrator.getAdministratorRole().getRole().getName()).isEqualTo("test");
}
@DisplayName("Administrator 수정 테스트")
@Test
void updateAdministratorTest() {
// given
Role saveRole = getSaveRole();
flushAndClear();
Administrator saveAdministrator = createAdministrator(saveRole);
flushAndClear();
Role updateRole = roleRepository.save(
Role.builder()
.name("test2")
.description("test2")
.build()
);
flushAndClear();
// when
service.update(
AdministratorUpdateCommand.builder()
.id(saveAdministrator.getId())
.password("test2")
.email("test2")
.name("test2")
.roleId(updateRole.getId())
.build()
);
flushAndClear();
// then
Administrator findAdministrator = administratorRepository.findById(saveAdministrator.getId()).orElseThrow();
assertThat(findAdministrator.getPassword()).isEqualTo("test2");
assertThat(findAdministrator.getEmail()).isEqualTo("test2");
assertThat(findAdministrator.getName()).isEqualTo("test2");
assertThat(findAdministrator.getAdministratorRole().getRole().getName()).isEqualTo("test2");
}
@DisplayName("Administrator 삭제 테스트")
@Test
void deleteAdministratorTest() {
// given
Role saveRole = getSaveRole();
flushAndClear();
Administrator saveAdministrator = createAdministrator(saveRole);
flushAndClear();
// when
service.delete(saveAdministrator.getId());
flushAndClear();
// then
assertThat(administratorRepository.findById(saveAdministrator.getId())).isEmpty();
}
@DisplayName("Administrator 삭제 시 Administrator 동시 삭제 테스트")
@Test
void deleteAdministratorAndAdministratorRoleTest() {
// given
Role saveRole = getSaveRole();
flushAndClear();
Administrator saveAdministrator = createAdministrator(saveRole);
flushAndClear();
// when
service.delete(saveAdministrator.getId());
flushAndClear();
// then
assertThat(administratorRepository.findById(saveAdministrator.getId())).isEmpty();
}
@NotNull
private Role getSaveRole() {
return roleRepository.save(
Role.builder()
.name("test")
.description("test")
.build()
);
}
@NotNull
private Administrator createAdministrator(Role role) {
Administrator administrator = Administrator.builder()
.loginId("test2")
.password("test2")
.email("test2")
.name("test2")
.build();
administrator.setAdministratorRole(
AdministratorRole.builder()
.role(role)
.build()
);
return administratorRepository.save(administrator);
}
@Test
@DisplayName("AdministratorService method 호출 유효성 검사 테스트")
void validationTest() {
// create
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId(null).password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("").password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("loginId").password(null).email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("loginId").password("").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("loginId").password("password").email(null).name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("loginId").password("password").email("").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("loginId").password("password").email("email").name(null).roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("loginId").password("password").email("email").name("").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.create(AdministratorCreateCommand.builder().loginId("loginId").password("password").email("email").name("name").roleId(null).build())).isInstanceOf(ConstraintViolationException.class);
// update
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(null).password("password").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(1L).password(null).email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(1L).password("").email("email").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(1L).password("password").email(null).name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(1L).password("password").email("").name("name").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(1L).password("password").email("email").name(null).roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(1L).password("password").email("email").name("").roleId(1L).build())).isInstanceOf(ConstraintViolationException.class);
assertThatThrownBy(() -> service.update(AdministratorUpdateCommand.builder().id(1L).password("password").email("email").name("name").roleId(null).build())).isInstanceOf(ConstraintViolationException.class);
// delete
assertThatThrownBy(() -> service.delete(null)).isInstanceOf(ConstraintViolationException.class);
}
}