admin: administrator 내 관리자 권한 임베디드 타입으로 변경

This commit is contained in:
geonhos 2024-05-16 16:35:15 +09:00
parent 7faf94a8c9
commit bcbb62b513
6 changed files with 49 additions and 88 deletions

View File

@ -1,7 +1,6 @@
package com.bpgroup.poc.admin.domain.entity.administrator;
import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import com.bpgroup.poc.admin.domain.entity.role.Role;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
@ -27,7 +26,7 @@ public class Administrator extends BaseEntity {
@Column(name = "name", length = 100, nullable = false)
private String name;
@OneToOne(mappedBy = "administrator", fetch = FetchType.LAZY, orphanRemoval = true)
@Embedded
private AdministratorRole administratorRole;
@Builder
@ -44,9 +43,10 @@ public class Administrator extends BaseEntity {
this.password = administrator.password;
this.email = administrator.email;
this.name = administrator.name;
this.administratorRole = administrator.administratorRole;
}
public void setAdministratorRole(Role role) {
this.administratorRole = AdministratorRole.of(this, role);
public void setAdministratorRole(AdministratorRole administratorRole) {
this.administratorRole = administratorRole;
}
}

View File

@ -1,37 +1,22 @@
package com.bpgroup.poc.admin.domain.entity.administrator;
import com.bpgroup.poc.admin.domain.entity.BaseEntity;
import com.bpgroup.poc.admin.domain.entity.role.Role;
import jakarta.persistence.*;
import lombok.Builder;
import lombok.Getter;
@Getter
@Entity
@Table(name = "administrator_role")
public class AdministratorRole extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "administrator_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
private Administrator administrator;
@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(Administrator administrator, Role role) {
public static AdministratorRole of(Role role) {
AdministratorRole administratorRole = new AdministratorRole();
administratorRole.administrator = administrator;
administratorRole.role = role;
return administratorRole;
}
public void update(Role findRole) {
this.role = findRole;
}
}

View File

@ -1,6 +0,0 @@
package com.bpgroup.poc.admin.domain.entity.administrator;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AdministratorRoleRepository extends JpaRepository<AdministratorRole, Long> {
}

View File

@ -30,7 +30,6 @@ public class MenuQueryRepository {
roleMenu.menu.sortOrder
)
.from(administrator)
.innerJoin(administrator.administratorRole, administratorRole)
.innerJoin(administratorRole.role, role)
.innerJoin(role.roleMenus, roleMenu)
.innerJoin(roleMenu.menu, menu)

View File

@ -3,7 +3,6 @@ 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.administrator.AdministratorRoleRepository;
import com.bpgroup.poc.admin.domain.entity.role.Role;
import com.bpgroup.poc.admin.domain.entity.role.RoleRepository;
import jakarta.validation.Valid;
@ -22,7 +21,6 @@ import java.util.Optional;
public class AdministratorManagementService {
private final AdministratorRepository administratorRepository;
private final AdministratorRoleRepository administratorRoleRepository;
private final RoleRepository roleRepository;
public AdministratorCreateResult create(
@ -33,17 +31,17 @@ public class AdministratorManagementService {
throw new IllegalArgumentException("Not found role");
}
Administrator admin = administratorRepository.save(command.toEntity());
AdministratorRole administratorRole = AdministratorRole.builder()
.administrator(admin)
.role(findRole.get())
.build();
administratorRoleRepository.save(administratorRole);
Role role = findRole.get();
Administrator administrator = command.toEntity();
administrator.setAdministratorRole(
AdministratorRole.builder()
.role(role)
.build()
);
Administrator savedAdministrator = administratorRepository.save(administrator);
return AdministratorCreateResult.builder()
.id(admin.getId())
.id(savedAdministrator.getId())
.build();
}
@ -55,16 +53,19 @@ public class AdministratorManagementService {
throw new IllegalArgumentException("Not found administrator");
}
Administrator administrator = findAdministrator.get();
administrator.update(command.toEntity());
Optional<Role> findRole = roleRepository.findById(command.getRoleId());
if (findRole.isEmpty()) {
throw new IllegalArgumentException("Not found role");
}
Role role = findRole.get();
administrator.getAdministratorRole().update(role);
Administrator administrator = findAdministrator.get();
administrator.setAdministratorRole(
AdministratorRole.builder()
.role(role)
.build()
);
administrator.update(administrator);
}
public void delete(@NotNull Long id) {

View File

@ -3,7 +3,6 @@ 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.administrator.AdministratorRoleRepository;
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;
@ -32,9 +31,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
@Autowired
private AdministratorRepository administratorRepository;
@Autowired
private AdministratorRoleRepository administratorRoleRepository;
@Autowired
private RoleRepository roleRepository;
@ -42,18 +38,12 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
@BeforeEach
void setUp() {
administratorRepository.deleteAll();
administratorRoleRepository.deleteAll();
roleRepository.deleteAll();
}
@Test
void createAdministratorTest() {
Role role = roleRepository.save(
Role.builder()
.name("test")
.description("test")
.build()
);
Role role = getSaveRole();
flushAndClear();
// when
@ -79,15 +69,10 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
@Test
void updateAdministratorTest() {
// given
Administrator saveAdministrator = createAdministrator();
Role saveRole = getSaveRole();
flushAndClear();
Role saveRole = roleRepository.save(
Role.builder()
.name("test")
.description("test")
.build()
);
Administrator saveAdministrator = createAdministrator(saveRole);
flushAndClear();
Role updateRole = roleRepository.save(
@ -98,14 +83,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
);
flushAndClear();
administratorRoleRepository.save(
AdministratorRole.builder()
.administrator(saveAdministrator)
.role(saveRole)
.build()
);
flushAndClear();
// when
service.update(
AdministratorUpdateCommand.builder()
@ -131,7 +108,10 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
@Test
void deleteAdministratorTest() {
// given
Administrator saveAdministrator = createAdministrator();
Role saveRole = getSaveRole();
flushAndClear();
Administrator saveAdministrator = createAdministrator(saveRole);
flushAndClear();
// when
@ -146,23 +126,10 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
@Test
void deleteAdministratorAndAdministratorRoleTest() {
// given
Administrator saveAdministrator = createAdministrator();
Role saveRole = getSaveRole();
flushAndClear();
Role saveRole = roleRepository.save(
Role.builder()
.name("test")
.description("test")
.build()
);
flushAndClear();
administratorRoleRepository.save(
AdministratorRole.builder()
.administrator(saveAdministrator)
.role(saveRole)
.build()
);
Administrator saveAdministrator = createAdministrator(saveRole);
flushAndClear();
// when
@ -171,17 +138,32 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy;
// then
assertThat(administratorRepository.findById(saveAdministrator.getId())).isEmpty();
assertThat(administratorRoleRepository.findAll()).isEmpty();
}
@NotNull
private Administrator createAdministrator() {
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);
}