Skip to content

Commit 74682b4

Browse files
committed
CLAP-451 Refactor: 지연 로딩이 설정되어 있는 admin 과 department에 대해 추가적인 쿼리가 발생되지 않도록 매퍼 수정
#590
1 parent 95b7b4e commit 74682b4

File tree

2 files changed

+47
-14
lines changed

2 files changed

+47
-14
lines changed

src/main/java/clap/server/adapter/outbound/persistense/mapper/DepartmentPersistenceMapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
import org.mapstruct.Mapper;
77
import org.mapstruct.Mapping;
88

9-
@Mapper(componentModel = "spring", uses = {MemberPersistenceMapper.class})
9+
@Mapper(componentModel = "spring")
1010
public interface DepartmentPersistenceMapper extends PersistenceMapper<DepartmentEntity, Department> {
1111

12-
@Mapping(source = "admin.memberId", target = "adminId")
12+
@Mapping(target = "adminId", ignore = true)
1313
@Mapping(source = "manager", target = "isManager")
1414
Department toDomain(DepartmentEntity entity);
1515

src/main/java/clap/server/adapter/outbound/persistense/mapper/MemberPersistenceMapper.java

Lines changed: 45 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,64 @@
11
package clap.server.adapter.outbound.persistense.mapper;
22

3+
import clap.server.adapter.outbound.persistense.entity.member.DepartmentEntity;
34
import clap.server.adapter.outbound.persistense.entity.member.MemberEntity;
5+
import clap.server.domain.model.member.Department;
46
import clap.server.domain.model.member.Member;
57
import clap.server.domain.model.member.MemberInfo;
8+
import org.hibernate.Hibernate;
69
import org.mapstruct.Mapper;
710
import org.mapstruct.Mapping;
811
import org.mapstruct.Named;
912
import org.springframework.beans.factory.annotation.Autowired;
1013

11-
@Mapper(componentModel = "spring", uses = {DepartmentPersistenceMapper.class})
14+
@Mapper(componentModel = "spring")
1215
public abstract class MemberPersistenceMapper {
1316

1417
@Autowired
1518
protected DepartmentPersistenceMapper departmentPersistenceMapper;
1619

17-
@Mapping(source = "name", target = "memberInfo.name")
18-
@Mapping(source = "email", target = "memberInfo.email")
19-
@Mapping(source = "nickname", target = "memberInfo.nickname")
20-
@Mapping(source = "role", target = "memberInfo.role")
21-
@Mapping(source = "departmentRole", target = "memberInfo.departmentRole")
22-
@Mapping(source = "department", target = "memberInfo.department")
23-
@Mapping(source = "reviewer", target = "memberInfo.isReviewer")
24-
@Mapping(source = "admin", target = "admin", qualifiedByName = "toDomain")
25-
@Mapping(source = "createdAt", target = "createdAt")
26-
@Mapping(source = "updatedAt", target = "updatedAt")
27-
@Mapping(source = "memberId", target = "memberId")
20+
@Mapping(target = "memberInfo", expression = "java(memberEntityToMemberInfo(entity))")
21+
@Mapping(target = "department", expression = "java(mapDepartment(entity))")
22+
@Mapping(target = "admin", ignore = true)
23+
@Mapping(source = "entity.createdAt", target = "createdAt")
24+
@Mapping(source = "entity.updatedAt", target = "updatedAt")
25+
@Mapping(source = "entity.memberId", target = "memberId")
2826
public abstract Member toDomain(MemberEntity entity);
2927

28+
protected MemberInfo memberEntityToMemberInfo(MemberEntity memberEntity) {
29+
if (memberEntity == null) {
30+
return null;
31+
}
32+
33+
DepartmentEntity departmentEntity = memberEntity.getDepartment();
34+
Department department = (departmentEntity != null && Hibernate.isInitialized(departmentEntity))
35+
? departmentPersistenceMapper.toDomain(departmentEntity)
36+
: null;
37+
38+
return MemberInfo.builder()
39+
.name(memberEntity.getName())
40+
.email(memberEntity.getEmail())
41+
.nickname(memberEntity.getNickname())
42+
.role(memberEntity.getRole())
43+
.departmentRole(memberEntity.getDepartmentRole())
44+
.isReviewer(memberEntity.isReviewer())
45+
.department(department)
46+
.build();
47+
}
48+
49+
protected Department mapDepartment(MemberEntity entity) {
50+
DepartmentEntity department = entity.getDepartment();
51+
if (department == null) {
52+
return null;
53+
}
54+
55+
if (!Hibernate.isInitialized(department)) {
56+
return null;
57+
}
58+
59+
return departmentPersistenceMapper.toDomain(department);
60+
}
61+
3062
@Mapping(source = "memberInfo.name", target = "name")
3163
@Mapping(source = "memberInfo.email", target = "email")
3264
@Mapping(source = "memberInfo.nickname", target = "nickname")
@@ -40,6 +72,7 @@ public abstract class MemberPersistenceMapper {
4072
@Mapping(source = "memberId", target = "memberId")
4173
public abstract MemberEntity toEntity(Member member);
4274

75+
4376
@Named("toDomain")
4477
protected Member toDomainAdmin(MemberEntity admin) {
4578
if (admin == null) return null;

0 commit comments

Comments
 (0)