Skip to content

feat: 사용자 언어 설정 API 추가 및 device-user 병합 로직 개선#43

Merged
haeun9634 merged 1 commit into
devfrom
feat/#42
Apr 11, 2026
Merged

feat: 사용자 언어 설정 API 추가 및 device-user 병합 로직 개선#43
haeun9634 merged 1 commit into
devfrom
feat/#42

Conversation

@haeun9634

Copy link
Copy Markdown
Contributor

✨ Overview

사용자 언어 설정 API를 추가하고, 게스트 → 회원 전환 시 언어 병합 로직을 개선했습니다.

로그인 여부에 따라 언어 저장 위치를 분리하고, 로그인 이후에는 User.language를 기준으로 사용하도록 통일했습니다.


🔥 주요 변경

1. 언어 설정 API 추가

  • PATCH /api/users/language

    • 로그인: User.language 변경
    • 비로그인: Device.language 변경 (X-Device-Id 필수)
    • 로그인 + deviceUuid 전달 시 Device.language도 동기화
  • GET /api/users/language

    • 로그인: User.language 반환
    • 비로그인: Device.language 반환

2. 언어 처리 정책 정리

  • 게스트: Device.language 사용
  • 로그인 사용자: User.language 사용 (우선)
  • 로그인 이후에는 User.language를 기준으로 동작

3. DataMerge 로직 수정

  • 기존: Device.language → User.language 무조건 덮어쓰기
  • 변경: User.language가 null일 때만 1회 반영
if (targetUser.getLanguage() == null && device.getLanguage() != null) {
    targetUser.updateLanguage(device.getLanguage());
}```

###🎯 기대 효과
- 로그인 이후 언어 기준 일관성 확보
- 기존 사용자 언어  덮어쓰기 방지
- 게스트/회원 상태 전환  자연스러운 UX 제공

@haeun9634 haeun9634 self-assigned this Apr 11, 2026
@haeun9634 haeun9634 linked an issue Apr 11, 2026 that may be closed by this pull request
1 task
@haeun9634 haeun9634 requested a review from Copilot April 11, 2026 14:43
@github-actions

Copy link
Copy Markdown

🤖 GPT PR Review

결론: request-changes

요약: 파싱 실패

주요 지적

지적 없음

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds a dedicated language-preference API that works for both guests (device-based) and logged-in users (user-based), and adjusts guest→member merge behavior to avoid overwriting an existing user language—aligning language resolution across the backend.

Changes:

  • Added GET/PATCH /api/users/language to read/update language, using User.language when authenticated and Device.language when unauthenticated (via X-Device-Id).
  • Introduced a LanguagePreferenceService plus request/response DTOs to centralize the branching logic.
  • Updated guest→user merge to only copy Device.language to User.language when the user language is still unset.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated no comments.

Show a summary per file
File Description
src/main/java/com/example/konnect_backend/global/config/WebSecurityConfig.java Allows unauthenticated access to /api/users/language to support guest flows.
src/main/java/com/example/konnect_backend/domain/user/service/UserService.java Adds user-language read/write service methods.
src/main/java/com/example/konnect_backend/domain/user/service/LanguagePreferenceService.java Implements the guest vs. logged-in language selection/update policy.
src/main/java/com/example/konnect_backend/domain/user/service/DeviceService.java Adds device-language read/write helpers and deviceUuid validation; sets timestamps on device creation paths.
src/main/java/com/example/konnect_backend/domain/user/dto/UpdateLanguageRequest.java Defines request payload for language update.
src/main/java/com/example/konnect_backend/domain/user/dto/LanguageResponse.java Defines response payload indicating language + login state.
src/main/java/com/example/konnect_backend/domain/user/controller/UserController.java Exposes the new language endpoints under /api/users.
src/main/java/com/example/konnect_backend/domain/auth/service/DataMergeServiceImpl.java Prevents overwriting existing User.language during guest→member data merge.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@haeun9634 haeun9634 merged commit 23b614d into dev Apr 11, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feat] 사용자 언어 설정 변경 API 구현

2 participants