Skip to content

Commit e4912bc

Browse files
authored
Merge pull request #219 from kmw10693/refactor/#218
refactor: UserResponse에 학과 추가 (#218)
2 parents 3cb02cb + 611f399 commit e4912bc

File tree

5 files changed

+55
-11
lines changed

5 files changed

+55
-11
lines changed

src/main/java/ku_rum/backend/domain/auth/application/AuthService.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import ku_rum.backend.domain.auth.dto.request.ReissueRequest;
77
import ku_rum.backend.domain.auth.dto.response.AuthResponse;
88
import ku_rum.backend.domain.common.firebase.application.NotificationService;
9+
import ku_rum.backend.domain.department.application.UserDepartmentService;
10+
import ku_rum.backend.domain.department.domain.UserDepartment;
11+
import ku_rum.backend.domain.department.domain.repository.UserDepartmentRepository;
12+
import ku_rum.backend.domain.department.dto.DepartmentResponse;
913
import ku_rum.backend.domain.oauth.handler.TempTokenProvider;
1014
import ku_rum.backend.domain.user.domain.User;
1115
import ku_rum.backend.domain.user.domain.repository.UserRepository;
@@ -27,6 +31,9 @@
2731
import org.springframework.stereotype.Service;
2832
import org.springframework.transaction.annotation.Transactional;
2933

34+
import java.util.List;
35+
import java.util.stream.Collectors;
36+
3037
import static ku_rum.backend.global.support.status.BaseExceptionResponseStatus.*;
3138

3239
@Slf4j
@@ -42,6 +49,7 @@ public class AuthService {
4249
private final NotificationService notificationService;
4350
private final TempTokenProvider tempTokenProvider;
4451
private final UserRepository userRepository;
52+
private final UserDepartmentRepository userDepartmentRepository;
4553

4654
public AuthResponse login(LoginRequest authRequest) {
4755
try {
@@ -128,13 +136,20 @@ private User getUser(CustomUserDetails customUserDetails) {
128136
}
129137

130138
private UserResponse buildUserResponse(User user) {
139+
List<UserDepartment> byUserId = userDepartmentRepository.findByUserId(user.getId());
140+
List<DepartmentResponse> list = byUserId.stream()
141+
.map(UserDepartment::getDepartment)
142+
.map(DepartmentResponse::of)
143+
.toList();
144+
131145
return UserResponse.of(
132146
user.getId(),
133147
user.getOauthId(),
134148
user.getLoginId(),
135149
user.getEmail(),
136150
user.getNickname(),
137151
user.getStudentId(),
138-
user.getImageUrl());
152+
user.getImageUrl(),
153+
list);
139154
}
140155
}

src/main/java/ku_rum/backend/domain/department/domain/repository/UserDepartmentRepository.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@
33
import io.lettuce.core.dynamic.annotation.Param;
44
import jakarta.transaction.Transactional;
55
import ku_rum.backend.domain.department.domain.UserDepartment;
6+
import org.springframework.data.jpa.repository.EntityGraph;
67
import org.springframework.data.jpa.repository.JpaRepository;
78
import org.springframework.data.jpa.repository.Modifying;
89
import org.springframework.data.jpa.repository.Query;
910

11+
import java.util.List;
1012
import java.util.Optional;
1113

1214
public interface UserDepartmentRepository extends JpaRepository<UserDepartment, Long> {
1315
boolean existsByUserIdAndDepartmentId(Long userId, Long departmentId);
1416

15-
Optional<UserDepartment> findByUserIdAndDepartmentId(Long userId, Long departmentId);
16-
1717
@Modifying(clearAutomatically = true)
1818
@Transactional
1919
@Query("DELETE FROM UserDepartment ud WHERE ud.user.id = :userId AND ud.department.id = :deptId")
2020
int deleteByUserIdAndDepartmentId(Long userId, Long deptId);
21+
22+
@EntityGraph(attributePaths = {"user", "department"})
23+
List<UserDepartment> findByUserId(Long userId);
2124
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package ku_rum.backend.domain.department.dto;
2+
3+
import ku_rum.backend.domain.department.domain.Department;
4+
import ku_rum.backend.domain.department.domain.UserDepartment;
5+
6+
public record DepartmentResponse(Long departmentId, String departmentName) {
7+
public static DepartmentResponse of(Department department) {
8+
return new DepartmentResponse(department.getId(), department.getName());
9+
}
10+
}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package ku_rum.backend.domain.user.dto.response;
22

3+
import ku_rum.backend.domain.department.dto.DepartmentResponse;
4+
5+
import java.util.List;
6+
37
public record UserResponse(Long id, String oauthId, String loginId, String email, String nickname, String studentId,
4-
String imageUrl) {
8+
String imageUrl, List<DepartmentResponse> departmentResponse) {
59

6-
public static UserResponse of(Long id, String oauthId, String loginId, String email, String nickname, String studentId, String imageUrl) {
7-
return new UserResponse(id, oauthId, loginId, email, nickname, studentId, imageUrl);
10+
public static UserResponse of(Long id, String oauthId, String loginId, String email, String nickname, String studentId, String imageUrl, List<DepartmentResponse> departmentResponse) {
11+
return new UserResponse(id, oauthId, loginId, email, nickname, studentId, imageUrl, departmentResponse);
812
}
913
}

src/test/java/ku_rum/backend/domain/auth/presentation/AuthControllerTest.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@
66
import ku_rum.backend.domain.auth.dto.request.LoginRequest;
77
import ku_rum.backend.domain.auth.dto.request.ReissueRequest;
88
import ku_rum.backend.domain.auth.dto.response.AuthResponse;
9+
import ku_rum.backend.domain.building.domain.Building;
10+
import ku_rum.backend.domain.college.domain.College;
11+
import ku_rum.backend.domain.department.domain.Department;
12+
import ku_rum.backend.domain.department.dto.DepartmentResponse;
913
import ku_rum.backend.domain.user.dto.response.TokenResponse;
1014
import ku_rum.backend.domain.user.dto.response.UserResponse;
1115
import ku_rum.backend.global.batch.BatchScheduler;
@@ -23,6 +27,9 @@
2327
import org.springframework.transaction.annotation.Transactional;
2428
import org.testcontainers.shaded.org.yaml.snakeyaml.tokens.Token;
2529

30+
import java.util.ArrayList;
31+
import java.util.List;
32+
2633
import static com.epages.restdocs.apispec.ResourceDocumentation.resource;
2734
import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName;
2835
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch;
@@ -56,11 +63,11 @@ void login() throws Exception {
5663

5764
// TokenResponse 설정
5865
TokenResponse tokenResponse = TokenResponse.of("accessToken", "refreshToken", 1800000L, 604800000L);
59-
66+
List<DepartmentResponse> departmentResponses = List.of();
6067
// UserResponse 설정 (사용자 정보도 포함해야 하므로, 예시로 넣음)
6168
UserResponse userResponse = UserResponse.of(
6269
1L, "oauthId", "kmw10693", "[email protected]", "nickname", "studentId", "imageUrl"
63-
);
70+
, departmentResponses);
6471

6572
// AuthResponse 설정
6673
AuthResponse authResponse = AuthResponse.of(tokenResponse, userResponse);
@@ -142,7 +149,10 @@ void login() throws Exception {
142149
.description("사용자 인덱스"),
143150
fieldWithPath("data.userResponse.oauthId")
144151
.type(JsonType.STRING)
145-
.description("사용자 oauthId")
152+
.description("사용자 oauthId"),
153+
fieldWithPath("data.userResponse.departmentResponse")
154+
.type(JsonType.STRING)
155+
.description("사용자 학과")
146156
).build())));
147157
}
148158

@@ -245,7 +255,8 @@ void reissue() throws Exception {
245255
void exchangeToken() throws Exception {
246256
// given
247257
String tempToken = "temporary_token_value";
248-
UserResponse userResponse = new UserResponse(1L, "oauthId", "loginId", "email", "nickname", "studentId", "imageUrl");
258+
List<DepartmentResponse> list = new ArrayList<>();
259+
UserResponse userResponse = new UserResponse(1L, "oauthId", "loginId", "email", "nickname", "studentId", "imageUrl", list);
249260
TokenResponse tokenResponse = new TokenResponse("accessToken", "refreshToken", 1800000L, 604800000L);
250261
AuthResponse authResponse = new AuthResponse(
251262
tokenResponse,
@@ -293,7 +304,8 @@ void exchangeToken() throws Exception {
293304
fieldWithPath("data.userResponse.email").description("사용자 이메일"),
294305
fieldWithPath("data.userResponse.nickname").description("사용자 닉네임"),
295306
fieldWithPath("data.userResponse.studentId").description("사용자 학생 ID"),
296-
fieldWithPath("data.userResponse.imageUrl").description("사용자 이미지 URL")
307+
fieldWithPath("data.userResponse.imageUrl").description("사용자 이미지 URL"),
308+
fieldWithPath("data.userResponse.departmentResponse").description("사용자 학과 정보")
297309
)
298310
.build()
299311
)

0 commit comments

Comments
 (0)