Skip to content

Commit a303fe4

Browse files
committed
feat: 유저 프로필을 위한 유저 공통 속성 조회 유스케이스 구현
- 필요한 컬럼 record 생성 - queryDsl 생성 - 조회 유스케이스 구현 - 테스트및 검증 완료
1 parent 72605d2 commit a303fe4

File tree

7 files changed

+101
-0
lines changed

7 files changed

+101
-0
lines changed

src/main/java/com/somemore/user/repository/usercommonattribute/UserCommonAttributeRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.somemore.user.repository.usercommonattribute;
22

33
import com.somemore.user.domain.UserCommonAttribute;
4+
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
45

56
import java.util.Optional;
67
import java.util.UUID;
@@ -12,4 +13,6 @@ public interface UserCommonAttributeRepository {
1213
UserCommonAttribute save(UserCommonAttribute userCommonAttribute);
1314

1415
Optional<Boolean> findIsCustomizedByUserId(UUID userId);
16+
17+
Optional<UserProfileDto> findUserProfileByUserId(UUID userId);
1518
}

src/main/java/com/somemore/user/repository/usercommonattribute/UserCommonAttributeRepositoryImpl.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.somemore.user.repository.usercommonattribute;
22

3+
import com.querydsl.core.types.Projections;
34
import com.querydsl.core.types.dsl.BooleanExpression;
45
import com.querydsl.jpa.impl.JPAQueryFactory;
56
import com.somemore.user.domain.QUserCommonAttribute;
67
import com.somemore.user.domain.UserCommonAttribute;
8+
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
79
import lombok.RequiredArgsConstructor;
810
import org.springframework.stereotype.Repository;
911

@@ -46,6 +48,26 @@ public Optional<Boolean> findIsCustomizedByUserId(UUID userId) {
4648
);
4749
}
4850

51+
@Override
52+
public Optional<UserProfileDto> findUserProfileByUserId(UUID userId) {
53+
return Optional.ofNullable(
54+
queryFactory.select(Projections.constructor(UserProfileDto.class,
55+
userCommonAttribute.id,
56+
userCommonAttribute.userId,
57+
userCommonAttribute.name,
58+
userCommonAttribute.contactNumber,
59+
userCommonAttribute.imgUrl,
60+
userCommonAttribute.introduce
61+
))
62+
.from(userCommonAttribute)
63+
.where(
64+
eqUserId(userId),
65+
isNotDeleted()
66+
)
67+
.fetchOne()
68+
);
69+
}
70+
4971
private static BooleanExpression eqUserId(UUID userId) {
5072
return userCommonAttribute.userId.eq(userId);
5173
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.somemore.user.repository.usercommonattribute.record;
2+
3+
import java.util.UUID;
4+
5+
public record UserProfileDto(
6+
Long id,
7+
UUID userId,
8+
String name,
9+
String contactNumber,
10+
String imgUrl,
11+
String introduce
12+
) {
13+
}

src/main/java/com/somemore/user/service/UserQueryService.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.somemore.user.domain.UserRole;
77
import com.somemore.user.repository.user.UserRepository;
88
import com.somemore.user.repository.usercommonattribute.UserCommonAttributeRepository;
9+
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
910
import com.somemore.user.usecase.UserQueryUseCase;
1011
import lombok.RequiredArgsConstructor;
1112
import lombok.extern.slf4j.Slf4j;
@@ -60,4 +61,11 @@ public boolean isDuplicateAccountId(String accountId) {
6061
return userRepository.existsByAccountId(accountId);
6162
}
6263

64+
@Override
65+
public UserProfileDto getUserProfileByUserId(UUID userId) {
66+
67+
return userCommonAttributeRepository.findUserProfileByUserId(userId)
68+
.orElseThrow(() -> new NoSuchElementException(NOT_EXIST_USER));
69+
}
70+
6371
}

src/main/java/com/somemore/user/usecase/UserQueryUseCase.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.somemore.user.domain.User;
44
import com.somemore.user.domain.UserCommonAttribute;
55
import com.somemore.user.domain.UserRole;
6+
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
67

78
import java.util.UUID;
89

@@ -19,4 +20,6 @@ public interface UserQueryUseCase {
1920
boolean getIsCustomizedByUserId(UUID userId);
2021

2122
boolean isDuplicateAccountId(String accountId);
23+
24+
UserProfileDto getUserProfileByUserId(UUID userId);
2225
}

src/test/java/com/somemore/user/repository/usercommonattribute/UserCommonAttributeRepositoryImplTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44
import com.somemore.support.IntegrationTestSupport;
55
import com.somemore.user.domain.UserCommonAttribute;
66
import com.somemore.user.domain.UserRole;
7+
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
78
import org.junit.jupiter.api.DisplayName;
89
import org.junit.jupiter.api.Test;
910
import org.springframework.beans.factory.annotation.Autowired;
1011
import org.springframework.transaction.annotation.Transactional;
1112

13+
import java.util.Optional;
1214
import java.util.UUID;
1315

1416
import static org.assertj.core.api.Assertions.assertThat;
@@ -39,4 +41,27 @@ void saveUserCommonAttribute() {
3941
assertThat(savedUserCommonAttribute.getImgUrl()).isEqualTo(ImageUploadService.DEFAULT_IMAGE_URL);
4042
assertThat(savedUserCommonAttribute.isCustomized()).isFalse();
4143
}
44+
45+
@DisplayName("유저 ID로 프로필에 필요한 유저 정보를 조회할 수 있다.")
46+
@Test
47+
void findUserProfileByUserId() {
48+
// given
49+
UUID userId = UUID.randomUUID();
50+
UserCommonAttribute userCommonAttribute = UserCommonAttribute.createDefault(userId, UserRole.VOLUNTEER);
51+
userCommonAttributeRepository.save(userCommonAttribute);
52+
53+
// when
54+
Optional<UserProfileDto> result = userCommonAttributeRepository.findUserProfileByUserId(userId);
55+
56+
// then
57+
assertThat(result).isPresent();
58+
UserProfileDto userProfile = result.get();
59+
60+
assertThat(userProfile.id()).isNotNull();
61+
assertThat(userProfile.userId()).isEqualTo(userId);
62+
assertThat(userProfile.name()).isEqualTo(userCommonAttribute.getName());
63+
assertThat(userProfile.contactNumber()).isEqualTo(userCommonAttribute.getContactNumber());
64+
assertThat(userProfile.imgUrl()).isEqualTo(userCommonAttribute.getImgUrl());
65+
assertThat(userProfile.introduce()).isEqualTo(userCommonAttribute.getIntroduce());
66+
}
4267
}

src/test/java/com/somemore/user/service/UserQueryServiceTest.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88
import com.somemore.user.dto.UserAuthInfo;
99
import com.somemore.user.repository.user.UserRepository;
1010
import com.somemore.user.repository.usercommonattribute.UserCommonAttributeRepository;
11+
import com.somemore.user.repository.usercommonattribute.record.UserProfileDto;
1112
import org.junit.jupiter.api.BeforeEach;
1213
import org.junit.jupiter.api.DisplayName;
1314
import org.junit.jupiter.api.Test;
1415
import org.springframework.beans.factory.annotation.Autowired;
1516
import org.springframework.transaction.annotation.Transactional;
1617

18+
import java.util.UUID;
19+
1720
import static org.assertj.core.api.Assertions.assertThat;
1821

1922
@Transactional
@@ -108,4 +111,28 @@ void getIsCustomizedByUserId_ReturnsFalse_WhenDefaultValue() {
108111
// then
109112
assertThat(isCustomized).isFalse();
110113
}
114+
115+
@DisplayName("유저 id로 유저 프로필에 필요한 공통 속성을 조회할 수 있다.")
116+
@Test
117+
void getUserProfileByUserId() {
118+
119+
//given
120+
UUID userId = UUID.randomUUID();
121+
UserRole role = UserRole.VOLUNTEER;
122+
123+
UserCommonAttribute userCommonAttribute1 = UserCommonAttribute.createDefault(userId,role);
124+
userCommonAttributeRepository.save(userCommonAttribute1);
125+
126+
//when
127+
UserProfileDto result = userQueryService.getUserProfileByUserId(userId);
128+
129+
//then
130+
assertThat(result).isNotNull();
131+
assertThat(result.id()).isNotNull();
132+
assertThat(result.userId()).isEqualTo(userId);
133+
assertThat(result.name()).isEqualTo(userCommonAttribute1.getName());
134+
assertThat(result.contactNumber()).isEqualTo(userCommonAttribute1.getContactNumber());
135+
assertThat(result.imgUrl()).isEqualTo(userCommonAttribute1.getImgUrl());
136+
assertThat(result.introduce()).isEqualTo(userCommonAttribute1.getIntroduce());
137+
}
111138
}

0 commit comments

Comments
 (0)