Skip to content

Commit ea43a39

Browse files
authored
Merge pull request #211 from DivaryOfficial/develop
Develop
2 parents af83763 + 7322b18 commit ea43a39

File tree

5 files changed

+60
-27
lines changed

5 files changed

+60
-27
lines changed

src/main/java/com/divary/domain/logbase/logbook/service/LogBookService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.divary.domain.logbase.logbook.service;
22

33
import com.divary.domain.member.entity.Member;
4-
import com.divary.domain.member.service.MemberServiceImpl;
4+
import com.divary.domain.member.service.MemberService;
55
import com.divary.domain.logbase.LogBaseInfo;
66
import com.divary.domain.logbase.LogBaseInfoRepository;
77
import com.divary.domain.logbase.logbook.dto.request.*;
@@ -33,7 +33,7 @@ public class LogBookService {
3333
private final LogBaseInfoRepository logBaseInfoRepository;
3434
private final LogBookRepository logBookRepository;
3535
private final CompanionRepository companionRepository;
36-
private final MemberServiceImpl memberService;
36+
private final MemberService memberService;
3737

3838
@Transactional
3939
public LogBaseCreateResultDTO createLogBase

src/main/java/com/divary/domain/member/controller/MemberController.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.divary.domain.member.dto.requestDTO.MyPageLevelRequestDTO;
66
import com.divary.domain.member.dto.response.MyPageImageResponseDTO;
77
import com.divary.domain.member.dto.response.MyPageProfileResponseDTO;
8+
import com.divary.domain.member.facade.MyPageFacade;
89
import com.divary.global.config.SwaggerConfig;
910
import com.divary.global.config.security.CustomUserPrincipal;
1011
import com.divary.global.exception.ErrorCode;
@@ -22,6 +23,7 @@
2223
@RequiredArgsConstructor
2324
public class MemberController {
2425
private final MemberService memberService;
26+
private final MyPageFacade myPageFacade;
2527

2628
@PatchMapping("/level")
2729
@SwaggerConfig.ApiSuccessResponse(dataType = Void.class)
@@ -53,7 +55,7 @@ public ApiResponse updateGroup(@AuthenticationPrincipal CustomUserPrincipal user
5355
@SwaggerConfig.ApiSuccessResponse(dataType = Void.class)
5456
@SwaggerConfig.ApiErrorExamples(value = {ErrorCode.AUTHENTICATION_REQUIRED})
5557
public ApiResponse getProfile(@AuthenticationPrincipal CustomUserPrincipal userPrincipal){
56-
MyPageProfileResponseDTO responseDTO = memberService.getMemberProfile(userPrincipal.getId());
58+
MyPageProfileResponseDTO responseDTO = myPageFacade.getMemberProfile(userPrincipal.getId());
5759
return ApiResponse.success(responseDTO);
5860
}
5961

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.divary.domain.member.facade;
2+
3+
import com.divary.domain.logbase.logbook.service.LogBookService;
4+
import com.divary.domain.member.dto.response.MyPageProfileResponseDTO;
5+
import com.divary.domain.member.entity.Member;
6+
import com.divary.domain.member.service.MemberService;
7+
import com.divary.global.exception.BusinessException;
8+
import com.divary.global.exception.ErrorCode;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.stereotype.Service;
11+
import org.springframework.transaction.annotation.Transactional;
12+
13+
/**
14+
* MyPage Facade
15+
* 여러 도메인 서비스를 조합하여 마이페이지 관련 비즈니스 로직을 처리합니다.
16+
*
17+
* 목적:
18+
* 1. MemberService와 LogBookService 간의 순환참조 제거
19+
* 2. 여러 도메인의 데이터를 조합하는 책임 분리
20+
* 3. 향후 소셜 기능(친구 등) 추가 시 확장성 확보
21+
*/
22+
@Service
23+
@RequiredArgsConstructor
24+
@Transactional(readOnly = true)
25+
public class MyPageFacade {
26+
27+
private final MemberService memberService;
28+
private final LogBookService logBookService;
29+
30+
/**
31+
* 마이페이지 프로필 정보 조회
32+
* Member 정보와 LogBook 누적 횟수를 조합하여 반환
33+
*
34+
* @param userId 사용자 ID
35+
* @return 마이페이지 프로필 정보
36+
*/
37+
public MyPageProfileResponseDTO getMemberProfile(Long userId) {
38+
// 1. Member 도메인 데이터 조회
39+
Member member = memberService.findById(userId);
40+
41+
// 2. LogBook 도메인 데이터 조회
42+
Integer accumulation = logBookService.getAccumulationById(userId);
43+
44+
// 3. 비즈니스 로직: 이메일에서 ID 추출
45+
String memberIdByEmail = member.getEmail().split("@")[0];
46+
47+
// 4. DTO 조합 및 반환
48+
return MyPageProfileResponseDTO.builder()
49+
.memberGroup(member.getMemberGroup())
50+
.level(member.getLevel())
51+
.id(memberIdByEmail)
52+
.accumulations(accumulation)
53+
.build();
54+
}
55+
}

src/main/java/com/divary/domain/member/service/MemberService.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.divary.common.enums.SocialType;
44
import com.divary.domain.member.dto.requestDTO.MyPageGroupRequestDTO;
55
import com.divary.domain.member.dto.response.MyPageImageResponseDTO;
6-
import com.divary.domain.member.dto.response.MyPageProfileResponseDTO;
76
import com.divary.domain.member.entity.Member;
87
import com.divary.domain.member.dto.requestDTO.MyPageLevelRequestDTO;
98
import com.divary.global.oauth.dto.response.DeactivateResponse;
@@ -21,7 +20,5 @@ public interface MemberService {
2120

2221
void updateGroup(Long userId, MyPageGroupRequestDTO requestDTO);
2322

24-
MyPageProfileResponseDTO getMemberProfile(Long userId);
25-
2623
MyPageImageResponseDTO getLicenseImage(Long userId);
2724
}

src/main/java/com/divary/domain/member/service/MemberServiceImpl.java

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@
55
import com.divary.domain.image.dto.request.ImageUploadRequest;
66
import com.divary.domain.image.dto.response.ImageResponse;
77
import com.divary.domain.image.service.ImageService;
8-
import com.divary.domain.logbase.logbook.enums.SaveStatus;
9-
import com.divary.domain.logbase.logbook.service.LogBookService;
108
import com.divary.domain.member.dto.requestDTO.MyPageGroupRequestDTO;
119
import com.divary.domain.member.dto.requestDTO.MyPageLevelRequestDTO;
1210
import com.divary.domain.member.dto.response.MyPageImageResponseDTO;
@@ -41,7 +39,6 @@ public class MemberServiceImpl implements MemberService {
4139
private final MemberRepository memberRepository;
4240
private final ImageService imageService;
4341
private final TokenBlackListService tokenBlackListService;
44-
private final LogBookService logBookService;
4542

4643
@Value("${jobs.user-deletion.grace-period-days}")
4744
private int gracePeriodDays;
@@ -199,24 +196,6 @@ public void updateGroup(Long userId, MyPageGroupRequestDTO requestDTO){
199196
member.updateGroup(group);
200197
}
201198

202-
@Override
203-
public MyPageProfileResponseDTO getMemberProfile(Long userId){
204-
Member member = memberRepository.findById(userId).orElseThrow(()->new BusinessException(ErrorCode.MEMBER_NOT_FOUND));
205-
206-
Integer accumulation
207-
= logBookService.getAccumulationById(userId);
208-
//현재기준으로 총 로그북 누적횟수 계산
209-
210-
String memberIdByEmail = member.getEmail().split("@")[0];
211-
// 프로필에 나오는 아이디: 이메일에서 @ 앞부분만 추출
212-
213-
return MyPageProfileResponseDTO.builder()
214-
.memberGroup(member.getMemberGroup())
215-
.level(member.getLevel())
216-
.id(memberIdByEmail)
217-
.accumulations(accumulation)
218-
.build();
219-
}
220199

221200
@Override
222201
public MyPageImageResponseDTO getLicenseImage(Long userId){

0 commit comments

Comments
 (0)