Skip to content

Commit dd2eb1b

Browse files
committed
Merge branch 'dev'
2 parents 3bf585e + 7ddbad1 commit dd2eb1b

File tree

3 files changed

+46
-12
lines changed

3 files changed

+46
-12
lines changed

backend/src/main/java/com/deliveranything/domain/user/profile/service/ProfileService.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ public Profile createProfile(User user, ProfileType profileType, Object profileD
5656
throw new CustomException(ErrorCode.PROFILE_ALREADY_EXISTS);
5757
}
5858

59+
// 이전 활성 프로필 ID 저장 (이벤트 발행용)
60+
Long oldProfileId = user.getCurrentActiveProfileId();
61+
5962
// 1단계: Profile 생성
6063
Profile profile = Profile.builder()
6164
.user(user)
@@ -66,16 +69,13 @@ public Profile createProfile(User user, ProfileType profileType, Object profileD
6669
// 2단계: 세부 프로필 생성 (CustomException은 그대로 전파)
6770
createDetailedProfile(profile, profileType, profileData);
6871

69-
// 3단계: 첫 프로필이면 자동으로 활성화
70-
if (!user.hasActiveProfile()) {
71-
user.setCurrentActiveProfile(profile);
72-
userRepository.save(user);
73-
log.info("첫 프로필 생성 및 활성화: userId={}, profileId={}, profileType={}",
74-
user.getId(), profile.getId(), profileType);
75-
} else {
76-
log.info("추가 프로필 생성 완료: userId={}, profileId={}, profileType={}",
77-
user.getId(), profile.getId(), profileType);
78-
}
72+
// 3단계: 프로필이면 자동으로 엑티브 프로필로
73+
user.setCurrentActiveProfile(profile);
74+
userRepository.save(user);
75+
76+
log.info("프로필 생성 및 활성화 완료: userId={}, profileId={}, profileType={}, " +
77+
"previousProfileId={}",
78+
user.getId(), profile.getId(), profileType, oldProfileId);
7979

8080
return profile;
8181
}

backend/src/main/java/com/deliveranything/domain/user/user/controller/UserController.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,8 +194,9 @@ public ResponseEntity<ApiResponse<Void>> changePassword(
194194
)
195195
public ResponseEntity<ApiResponse<CreateProfileResponse>> createProfile(
196196
@Valid @RequestBody CreateProfileRequest request) {
197-
198197
User currentUser = rq.getActor();
198+
String deviceId = rq.getDeviceId();
199+
String oldAccessToken = rq.getAccessTokenFromHeader();// ← rq에서 꺼냄
199200
log.info("프로필 생성 요청: userId={}, profileType={}",
200201
currentUser.getId(), request.profileType());
201202

@@ -206,13 +207,26 @@ public ResponseEntity<ApiResponse<CreateProfileResponse>> createProfile(
206207
request.profileData()
207208
);
208209

210+
SwitchProfileResult switchResult = authService.switchProfileWithTokenReissue(
211+
currentUser.getId(),
212+
request.profileType(),
213+
oldAccessToken,
214+
deviceId // ← rq에서 가져온 값 사용
215+
);
216+
217+
// 새 Access Token 설정
218+
rq.setAccessToken(switchResult.accessToken());
219+
220+
log.info("프로필 생성 및 토큰 재발급 완료: userId={}, profileId={}, profileType={}",
221+
currentUser.getId(), newProfile.getId(), request.profileType());
222+
209223
// 응답 생성
210224
CreateProfileResponse response = CreateProfileResponse.builder()
211225
.userId(currentUser.getId())
212226
.profileType(request.profileType())
213227
.profileId(newProfile.getId())
214228
.nickname(getNicknameFromProfileData(request.profileData()))
215-
.isActive(newProfile.isActive())
229+
.isActive(true)
216230
.message(String.format("%s 프로필이 생성되었습니다.",
217231
request.profileType().getDescription()))
218232
.build();

backend/src/main/java/com/deliveranything/global/common/Rq.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import jakarta.servlet.http.HttpServletResponse;
1313
import java.util.Arrays;
1414
import java.util.Optional;
15+
import java.util.UUID;
1516
import lombok.RequiredArgsConstructor;
1617
import lombok.SneakyThrows;
1718
import org.springframework.beans.factory.annotation.Value;
@@ -249,4 +250,23 @@ public void deleteRefreshToken() {
249250
public void sendRedirect(String url) {
250251
resp.sendRedirect(url);
251252
}
253+
254+
/**
255+
* X-Device-ID 헤더 조회 및 자동 생성
256+
*
257+
* - 헤더에 Device ID가 있으면 그대로 반환
258+
* - 없으면 UUID 생성 후 응답 헤더에 추가
259+
*
260+
* @return Device ID (항상 null 아님)
261+
*/
262+
public String getDeviceId() {
263+
String deviceId = getHeader("X-Device-ID", null);
264+
265+
if (deviceId == null || deviceId.isBlank()) {
266+
deviceId = UUID.randomUUID().toString();
267+
resp.addHeader("X-Device-ID", deviceId);
268+
}
269+
270+
return deviceId;
271+
}
252272
}

0 commit comments

Comments
 (0)