diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/FindMemberRequest.java b/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/FindMemberRequest.java index 4f9df1a1..5c659cce 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/FindMemberRequest.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/admin/request/FindMemberRequest.java @@ -21,7 +21,10 @@ public record FindMemberRequest( @Schema(description = "부서 이름", example = "1") String departmentName, - @NotNull @Schema(description = "회원 역할", example = "ROLE_USER") MemberRole role + + //TODO: 가입일 추가 + + ) {} diff --git a/src/main/java/clap/server/adapter/inbound/web/dto/admin/response/RetrieveAllMemberResponse.java b/src/main/java/clap/server/adapter/inbound/web/dto/admin/response/RetrieveAllMemberResponse.java index 985e9620..d9ff178f 100644 --- a/src/main/java/clap/server/adapter/inbound/web/dto/admin/response/RetrieveAllMemberResponse.java +++ b/src/main/java/clap/server/adapter/inbound/web/dto/admin/response/RetrieveAllMemberResponse.java @@ -3,7 +3,12 @@ import clap.server.adapter.outbound.persistense.entity.member.constant.MemberRole; import io.swagger.v3.oas.annotations.media.Schema; +import java.time.LocalDateTime; + public record RetrieveAllMemberResponse( + @Schema(description = "회원 ID", example = "1") + Long memberId, + @Schema(description = "회원 이름", example = "양시훈") String name, @@ -23,5 +28,10 @@ public record RetrieveAllMemberResponse( MemberRole role, @Schema(description = "회원 직책", example = "개발자") - String departmentRole + String departmentRole, + + @Schema(description = "가입일", example = "2024-01-01T12:00:00") + LocalDateTime createdAt + + ) {} diff --git a/src/main/java/clap/server/adapter/outbound/persistense/mapper/DepartmentPersistenceMapper.java b/src/main/java/clap/server/adapter/outbound/persistense/mapper/DepartmentPersistenceMapper.java index 6ece5239..ac62cfe1 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/mapper/DepartmentPersistenceMapper.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/mapper/DepartmentPersistenceMapper.java @@ -4,7 +4,16 @@ import clap.server.adapter.outbound.persistense.mapper.common.PersistenceMapper; import clap.server.domain.model.member.Department; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; -@Mapper(componentModel = "spring", uses = {MemberPersistenceMapper.class}) +@Mapper(componentModel = "spring", uses = {MemberPersistenceMapper.class}) public interface DepartmentPersistenceMapper extends PersistenceMapper { -} + + @Mapping(source = "admin.memberId", target = "adminId") + @Mapping(source = "name", target = "code") + Department toDomain(DepartmentEntity entity); + + @Mapping(source = "code", target = "name") + @Mapping(source = "adminId", target = "admin.memberId") + DepartmentEntity toEntity(Department domain); +} \ No newline at end of file diff --git a/src/main/java/clap/server/adapter/outbound/persistense/mapper/MemberPersistenceMapper.java b/src/main/java/clap/server/adapter/outbound/persistense/mapper/MemberPersistenceMapper.java index 482a175e..b4e55d6d 100644 --- a/src/main/java/clap/server/adapter/outbound/persistense/mapper/MemberPersistenceMapper.java +++ b/src/main/java/clap/server/adapter/outbound/persistense/mapper/MemberPersistenceMapper.java @@ -2,11 +2,17 @@ import clap.server.adapter.outbound.persistense.entity.member.MemberEntity; import clap.server.domain.model.member.Member; +import clap.server.domain.model.member.MemberInfo; import org.mapstruct.Mapper; import org.mapstruct.Mapping; +import org.mapstruct.Named; +import org.springframework.beans.factory.annotation.Autowired; @Mapper(componentModel = "spring", uses = {DepartmentPersistenceMapper.class}) -public interface MemberPersistenceMapper { +public abstract class MemberPersistenceMapper { + + @Autowired + protected DepartmentPersistenceMapper departmentPersistenceMapper; @Mapping(source = "name", target = "memberInfo.name") @Mapping(source = "email", target = "memberInfo.email") @@ -15,8 +21,11 @@ public interface MemberPersistenceMapper { @Mapping(source = "departmentRole", target = "memberInfo.departmentRole") @Mapping(source = "department", target = "memberInfo.department") @Mapping(source = "reviewer", target = "memberInfo.isReviewer") - @Mapping(source = "admin", target = "admin") - Member toDomain(MemberEntity entity); + @Mapping(source = "admin", target = "admin", qualifiedByName = "toDomain") + @Mapping(source = "createdAt", target = "createdAt") + @Mapping(source = "updatedAt", target = "updatedAt") + @Mapping(source = "memberId", target = "memberId") + public abstract Member toDomain(MemberEntity entity); @Mapping(source = "memberInfo.name", target = "name") @Mapping(source = "memberInfo.email", target = "email") @@ -25,12 +34,45 @@ public interface MemberPersistenceMapper { @Mapping(source = "memberInfo.departmentRole", target = "departmentRole") @Mapping(source = "memberInfo.department", target = "department") @Mapping(source = "memberInfo.reviewer", target = "isReviewer") - @Mapping(target = "admin", source = "admin") - MemberEntity toEntity(Member member); + @Mapping(source = "admin", target = "admin", qualifiedByName = "toEntity") + @Mapping(source = "createdAt", target = "createdAt") + @Mapping(source = "updatedAt", target = "updatedAt") + @Mapping(source = "memberId", target = "memberId") + public abstract MemberEntity toEntity(Member member); - default boolean mapReviewer(boolean reviewer) { - return reviewer; + @Named("toDomain") + protected Member toDomainAdmin(MemberEntity admin) { + if (admin == null) return null; + return Member.builder() + .memberId(admin.getMemberId()) + .memberInfo(new MemberInfo( + admin.getName(), + admin.getEmail(), + admin.getNickname(), + admin.isReviewer(), + departmentPersistenceMapper.toDomain(admin.getDepartment()), + admin.getRole(), + admin.getDepartmentRole() + )) + .createdAt(admin.getCreatedAt()) + .updatedAt(admin.getUpdatedAt()) + .build(); } -} - + @Named("toEntity") + protected MemberEntity toEntityAdmin(Member admin) { + if (admin == null) return null; + return MemberEntity.builder() + .memberId(admin.getMemberId()) + .name(admin.getMemberInfo().getName()) + .email(admin.getMemberInfo().getEmail()) + .nickname(admin.getMemberInfo().getNickname()) + .isReviewer(admin.getMemberInfo().isReviewer()) + .department(departmentPersistenceMapper.toEntity(admin.getMemberInfo().getDepartment())) + .role(admin.getMemberInfo().getRole()) + .departmentRole(admin.getMemberInfo().getDepartmentRole()) + .createdAt(admin.getCreatedAt()) + .updatedAt(admin.getUpdatedAt()) + .build(); + } +} diff --git a/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java b/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java index 5e031ac3..9bc5490b 100644 --- a/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java +++ b/src/main/java/clap/server/application/mapper/RetrieveAllMemberMapper.java @@ -16,13 +16,15 @@ public List toResponseList(List members) { public RetrieveAllMemberResponse toResponse(Member member) { return new RetrieveAllMemberResponse( + member.getMemberId(), member.getMemberInfo().getName(), member.getMemberInfo().getEmail(), member.getMemberInfo().getNickname(), member.getMemberInfo().isReviewer(), member.getMemberInfo().getDepartment().getName(), member.getMemberInfo().getRole(), - member.getMemberInfo().getDepartmentRole() + member.getMemberInfo().getDepartmentRole(), + member.getCreatedAt() ); } } \ No newline at end of file diff --git a/src/main/java/clap/server/domain/model/common/BaseTime.java b/src/main/java/clap/server/domain/model/common/BaseTime.java index ccf54ee4..1815c0cb 100644 --- a/src/main/java/clap/server/domain/model/common/BaseTime.java +++ b/src/main/java/clap/server/domain/model/common/BaseTime.java @@ -9,7 +9,7 @@ import java.time.LocalDateTime; @Getter -@SuperBuilder +@SuperBuilder(toBuilder = true) @MappedSuperclass @NoArgsConstructor(access = AccessLevel.PROTECTED) public class BaseTime { diff --git a/src/main/java/clap/server/domain/model/member/Member.java b/src/main/java/clap/server/domain/model/member/Member.java index 25615234..bdffb88b 100644 --- a/src/main/java/clap/server/domain/model/member/Member.java +++ b/src/main/java/clap/server/domain/model/member/Member.java @@ -10,7 +10,7 @@ import lombok.experimental.SuperBuilder; @Getter -@SuperBuilder +@SuperBuilder(toBuilder = true) @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor public class Member extends BaseTime { @@ -24,7 +24,7 @@ public class Member extends BaseTime { private MemberStatus status; private String password; - @Builder + // @Builder가 Lombok과 충돓하여 삭제 public Member(MemberInfo memberInfo, Boolean agitNotificationEnabled, Boolean emailNotificationEnabled, Boolean kakaoworkNotificationEnabled, Member admin, String imageUrl, MemberStatus status, String password) { this.memberInfo = memberInfo;