Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -147,10 +147,14 @@ public BaseResponse<UserProfileResponse> getMyProfile(@AuthenticationPrincipal C
// user 차량 번호 조회
String vehicleNumber = getUserDataService.getUserVehicleNumber(user.getUserUuid());

// 추천인 전화번호 조회
String referrerPhoneNumber = getUserDataService.getReferrerPhoneNumberByUserUuid(user.getUserUuid());

// mapping
UserProfileResponse response = modelMapper.map(user, UserProfileResponse.class)
.toBuilder()
.vehicleNumber(vehicleNumber)
.referrerPhoneNumber(referrerPhoneNumber)
.build();

// result
Expand Down Expand Up @@ -181,10 +185,14 @@ public BaseResponse<UserProfileResponse> getUserProfileByUuid(
// 유저 차량 번호 조회
String vehicleNumber = getUserDataService.getUserVehicleNumber(user.getUserUuid());

// 추천인 전화번호 조회
String referrerPhoneNumber = getUserDataService.getReferrerPhoneNumberByUserUuid(user.getUserUuid());

// mapping
UserProfileResponse response = modelMapper.map(user, UserProfileResponse.class)
.toBuilder()
.vehicleNumber(vehicleNumber)
.referrerPhoneNumber(referrerPhoneNumber)
.build();

// result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@ public class UserProfileResponse {
private Long branchId;
private String branchName;
private String vehicleNumber;
private String referrerPhoneNumber;


@Builder(toBuilder = true)
public UserProfileResponse(String userName, String userPhoneNumber, String userLoginId, UserAddress userAddress, PartnerOption partnerOption, Long branchId, String branchName,
String vehicleNumber) {
String vehicleNumber, String referrerPhoneNumber) {
this.userName = userName;
this.userPhoneNumber = userPhoneNumber;
this.userLoginId = userLoginId;
Expand All @@ -33,6 +34,7 @@ public UserProfileResponse(String userName, String userPhoneNumber, String userL
this.branchId = branchId;
this.branchName = branchName;
this.vehicleNumber = vehicleNumber;
this.referrerPhoneNumber = referrerPhoneNumber;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@
import greenfirst.be.user.application.dto.out.WithdrawUserListOutDto;
import greenfirst.be.user.application.port.out.repository.UserQueryRepository;
import greenfirst.be.user.application.port.out.repository.UserVehicleQueryRepository;
import greenfirst.be.user.domain.model.PartnerRelationship;
import greenfirst.be.user.domain.model.Users;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.modelmapper.ModelMapper;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.UUID;


Expand All @@ -30,6 +32,7 @@ public class GetUserDataService {
// port
private final UserQueryRepository userQueryRepository;
private final UserVehicleQueryRepository userVehicleQueryRepository;
private final GetPartnerRelationshipDataService getPartnerRelationshipDataService;
// util
private final ModelMapper modelMapper;

Expand All @@ -43,6 +46,7 @@ public class GetUserDataService {
* 5. 유저 차량 번호 조회
* 6. UUID 리스트로 유저 목록 조회
* 7. (admin) 탈퇴 유저 목록 조회
* 8. 유저 추천인 전화번호 조회
*/

// 1. 유저 uuid로 유저 조회
Expand Down Expand Up @@ -104,6 +108,7 @@ public List<Users> getUsersByUuidInList(List<UUID> uuidList) {
return userQueryRepository.getUsersByUuidInList(uuidList);
}


// 7. (admin) 탈퇴 유저 목록 조회
public WithdrawUserListOutDto getWithdrawUserList(GetWithdrawUserListInDto inDto) {

Expand All @@ -119,4 +124,29 @@ public WithdrawUserListOutDto getWithdrawUserList(GetWithdrawUserListInDto inDto
return userQueryRepository.getWithdrawUserList(inDto);
}


// 8. 유저 추천인 전화번호 조회
public String getReferrerPhoneNumberByUserUuid(UUID userUuid) {
if (userUuid == null) {
return null;
}

Optional<PartnerRelationship> relationshipOptional = getPartnerRelationshipDataService.getPartnerRelationshipDataOptional(userUuid);
if (relationshipOptional.isEmpty()) {
return null;
}

UUID referrerUuid = relationshipOptional.get().getReferrerUuid();
if (referrerUuid == null) {
return null;
}

List<Users> referrerCandidates = userQueryRepository.getUsersByUuidInList(List.of(referrerUuid));
if (referrerCandidates.isEmpty()) {
return null;
}

return referrerCandidates.get(0).getUserPhoneNumber();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@
import greenfirst.be.user.application.dto.out.UserDataListOutDto;
import greenfirst.be.user.application.dto.out.WithdrawUserListOutDto;
import greenfirst.be.user.application.service.GetUserDataService;
import greenfirst.be.user.application.service.GetPartnerRelationshipDataService;
import greenfirst.be.user.domain.model.PartnerRelationship;
import greenfirst.be.user.domain.model.Users;
import greenfirst.be.users.fake.FakePartnerRelationshipQueryRepository;
import greenfirst.be.users.fake.FakeUserQueryRepository;
import greenfirst.be.users.fake.FakeUserVehicleQueryRepository;
import greenfirst.be.users.fixture.UserTestFixture;
Expand All @@ -34,6 +37,7 @@ class GetUserDataServiceUnitTest {
private GetUserDataService getUserDataService;
private FakeUserQueryRepository fakeUserQueryRepository;
private FakeUserVehicleQueryRepository fakeUserVehicleQueryRepository;
private FakePartnerRelationshipQueryRepository fakePartnerRelationshipQueryRepository;
private ModelMapper modelMapper;


Expand All @@ -45,13 +49,23 @@ void setUp() {
fakeUserVehicleQueryRepository = new FakeUserVehicleQueryRepository();
fakeUserVehicleQueryRepository.clear(); // 각 테스트 전에 초기화

fakePartnerRelationshipQueryRepository = new FakePartnerRelationshipQueryRepository();
fakePartnerRelationshipQueryRepository.clear(); // 각 테스트 전에 초기화

// ModelMapper 설정
modelMapper = new ModelMapper();
modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(Configuration.AccessLevel.PRIVATE);

getUserDataService = new GetUserDataService(fakeUserQueryRepository, fakeUserVehicleQueryRepository, modelMapper);
GetPartnerRelationshipDataService getPartnerRelationshipDataService =
new GetPartnerRelationshipDataService(fakePartnerRelationshipQueryRepository);
getUserDataService = new GetUserDataService(
fakeUserQueryRepository,
fakeUserVehicleQueryRepository,
getPartnerRelationshipDataService,
modelMapper
);
}


Expand Down Expand Up @@ -567,4 +581,62 @@ void getWithdrawUserList_FilterByUserType_Success() {
}
}


@Nested
@DisplayName("추천인 전화번호 조회")
class GetReferrerPhoneNumberTest {

@Test
@DisplayName("관계 없음: null 반환")
void getReferrerPhoneNumber_noRelationship_returnsNull() {
// given
UUID partnerUuid = UUID.randomUUID();

// when
String result = getUserDataService.getReferrerPhoneNumberByUserUuid(partnerUuid);

// then
assertThat(result).isNull();
}


@Test
@DisplayName("추천인 UUID가 null인 관계: null 반환")
void getReferrerPhoneNumber_nullReferrer_returnsNull() {
// given
UUID partnerUuid = UUID.randomUUID();
fakePartnerRelationshipQueryRepository.save(PartnerRelationship.of(partnerUuid, null));

// when
String result = getUserDataService.getReferrerPhoneNumberByUserUuid(partnerUuid);

// then
assertThat(result).isNull();
}


@Test
@DisplayName("추천인 유저 존재: 추천인 전화번호 반환")
void getReferrerPhoneNumber_referrerExists_returnsPhoneNumber() {
// given
UUID partnerUuid = UUID.randomUUID();
UUID referrerUuid = UUID.randomUUID();
String referrerPhoneNumber = "010-9999-0000";

fakePartnerRelationshipQueryRepository.save(PartnerRelationship.of(partnerUuid, referrerUuid));

Users referrer = UserTestFixture.createPersonalPartner().toBuilder()
.userUuid(referrerUuid)
.userPhoneNumber(referrerPhoneNumber)
.build();
fakeUserQueryRepository.addUser(referrer);

// when
String result = getUserDataService.getReferrerPhoneNumberByUserUuid(partnerUuid);

// then
assertThat(result).isEqualTo(referrerPhoneNumber);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ void setUp() {
GetUserDataService getUserDataService = new GetUserDataService(
fakeUserQueryRepository,
fakeUserVehicleQueryRepository,
getPartnerRelationshipDataService,
new ModelMapper()
);
PartnerRelationshipAssembler partnerRelationshipAssembler = new PartnerRelationshipAssembler();
Expand Down