Skip to content

Conversation

@leeseokchan00
Copy link
Contributor

@leeseokchan00 leeseokchan00 commented Jul 15, 2025

๐Ÿ“Œ PR ์š”์•ฝ

๐ŸŒฑ ์ž‘์—…ํ•œ ๋‚ด์šฉ

  • ์†Œ์…œ๋กœ๊ทธ์ธ, ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ, ์ƒ์„ฑ ํšŒ์› ํŒจ์น˜ api

๐ŸŒฑ PR ํฌ์ธํŠธ

๐Ÿ“ธ ์Šคํฌ๋ฆฐ์ƒท

์Šคํฌ๋ฆฐ์ƒท
ํŒŒ์ผ์ฒจ๋ถ€๋ฐ”๋žŒ

๐Ÿ“ฎ ๊ด€๋ จ ์ด์Šˆ

Summary by CodeRabbit

  • ์‹ ๊ทœ ๊ธฐ๋Šฅ

    • ์†Œ์…œ ๋กœ๊ทธ์ธ(OAuth) ๋ฐ JWT ํ† ํฐ ์ €์žฅ, ์‹ ๊ทœ ์‚ฌ์šฉ์ž ์—ฌ๋ถ€ ํ™•์ธ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๋‹‰๋„ค์ž„ ์ค‘๋ณต ํ™•์ธ ๋ฐ ์‚ฌ์šฉ์ž ์ •๋ณด(์„ ํ˜ธ ๋™๋„ค, ํŽ˜๋ฅด์†Œ๋‚˜, ๋‹‰๋„ค์ž„) ์ˆ˜์ • ๊ธฐ๋Šฅ์ด ์˜จ๋ณด๋”ฉ ํ”Œ๋กœ์šฐ์— ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ๋Šฅ ๊ฐœ์„ 

    • ์˜จ๋ณด๋”ฉ ๊ณผ์ •์—์„œ ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ๋ฐ ์ค‘๋ณต ์ƒํƒœ๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค.
    • ์˜จ๋ณด๋”ฉ ๋ฐ OAuth ํ”Œ๋กœ์šฐ์—์„œ Place ํ™”๋ฉด์œผ๋กœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ธฐ์กด ํšŒ์›๊ฐ€์ž… ๋กœ์ง์ด ์‚ฌ์šฉ์ž ์ •๋ณด ํŒจ์น˜ ๋ฐ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ๋กœ ์„ธ๋ถ„ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฒ„๊ทธ ์ˆ˜์ •

    • keystore ํŒŒ์ผ์ด Git์— ํฌํ•จ๋˜์ง€ ์•Š๋„๋ก ๋ฌด์‹œ ๊ทœ์น™์ด ๋ช…ํ™•ํžˆ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ ๋ฐ ์˜์กด์„ฑ

    • remote:oauth ๋ชจ๋“ˆ์ด ์‹ ๊ทœ๋กœ ์ถ”๊ฐ€๋˜์–ด ์†Œ์…œ ๋กœ๊ทธ์ธ ๋„คํŠธ์›Œํฌ ์—ฐ๋™์ด ๋ถ„๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๊ด€๋ จ ์˜์กด์„ฑ ๋ฐ DI ๋ชจ๋“ˆ์ด ํ”„๋กœ์ ํŠธ์— ๋ฐ˜์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@leeseokchan00 leeseokchan00 requested a review from a team July 15, 2025 13:38
@leeseokchan00 leeseokchan00 self-assigned this Jul 15, 2025
@leeseokchan00 leeseokchan00 added the ์„์ฐฌ๐Ÿš๐Ÿฆ ์ด์„ ์ฐฌ์ฐฌ์ฐฌ์ฐฌ ์ฐฌ์ด์•ผ ~ ์™„์ „ ์ฐฌ์ด์•ผ ~ label Jul 15, 2025
@coderabbitai
Copy link

coderabbitai bot commented Jul 15, 2025

Walkthrough

ํšŒ์›๊ฐ€์ž… API์™€ ๊ด€๋ จ๋œ ์˜จ๋ณด๋”ฉ ๋ฐ OAuth ์ธ์ฆ ํ”Œ๋กœ์šฐ๊ฐ€ ๋Œ€๋Œ€์ ์œผ๋กœ ๊ฐœํŽธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์˜ signUp ๋ฐฉ์‹์ด ์ œ๊ฑฐ๋˜๊ณ , ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ ๋ฐ ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ • API๋กœ ๋ถ„๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OAuth ์†Œ์…œ ๋กœ๊ทธ์ธ ์—ฐ๋™, JWT ์ €์žฅ, ์‹ ๊ทœ ์‚ฌ์šฉ์ž ๋ถ„๊ธฐ, DTO/Entity/Repository/RemoteDataSource/Service ๋“ฑ ๊ณ„์ธต๋ณ„๋กœ ์‹ ๊ทœ ์ฝ”๋“œ๊ฐ€ ๋Œ€๋Ÿ‰ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Changes

ํŒŒ์ผ/๊ฒฝ๋กœ ๊ทธ๋ฃน ๋ณ€๊ฒฝ ์š”์•ฝ
.gitignore, remote/oauth/.gitignore keystore ๋ฐ ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ๋ฌด์‹œ ๊ทœ์น™ ์ถ”๊ฐ€
app/build.gradle.kts, feature/onboarding/build.gradle.kts, settings.gradle.kts, remote/oauth/build.gradle.kts OAuth, ์˜จ๋ณด๋”ฉ ๊ด€๋ จ ๋ชจ๋“ˆ ๋ฐ ์˜์กด์„ฑ ์ถ”๊ฐ€, ๋นŒ๋“œ ์„ค์ • ๋ฐ ๋ชจ๋“ˆ ๋“ฑ๋ก
core/designsystem/.../SolplyTextField.kt ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ ์ฝœ๋ฐฑ โ†’ Boolean ํ”Œ๋ž˜๊ทธ๋กœ ๋ณ€๊ฒฝ
core/network/.../AccessTokenInterceptor.kt, TokenRefreshService.kt ํ† ํฐ ๋ฆฌํ”„๋ ˆ์‹œ ์—”๋“œํฌ์ธํŠธ ๋ฐ ํ—ค๋”๋ช… ๋ณ€๊ฒฝ, ๋””๋ฒ„๊ทธ ๋กœ๊ทธ ์กฐ๊ฑด ์ œ๊ฑฐ
data/oauth/..., domain/oauth/..., remote/oauth/... ์†Œ์…œ ๋กœ๊ทธ์ธ DTO/Entity/Repository/RemoteDataSource/Service/DI ๋“ฑ OAuth ์ธ์ฆ ์ „์ฒด ๊ณ„์ธต ์‹ ๊ทœ ๊ตฌํ˜„ ๋ฐ ์ธํ„ฐํŽ˜์ด์Šค ๋ณ€๊ฒฝ
data/onboarding/..., domain/onboarding/..., remote/onboarding/... ํšŒ์›๊ฐ€์ž… โ†’ ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •/๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ๋กœ ๋ถ„๋ฆฌ, ๊ด€๋ จ DTO/Entity/Repository/RemoteDataSource/Service ์ „๋ฉด ์ˆ˜์ •
feature/main/.../MainNavigator.kt, MainScreen.kt ์˜จ๋ณด๋”ฉ โ†’ ์Šคํ”Œ๋ž˜์‹œ๋กœ ์‹œ์ž‘์  ๋ณ€๊ฒฝ, Place ๋„ค๋น„๊ฒŒ์ด์…˜ ์ฝœ๋ฐฑ ์ถ”๊ฐ€
feature/oauth/... OAuthIntent/SideEffect/Screen/ViewModel/Navigation: ์†Œ์…œ ๋กœ๊ทธ์ธ โ†’ JWT ์ €์žฅ ๋ถ„๋ฆฌ, ์‹ ๊ทœ ์‚ฌ์šฉ์ž ๋ถ„๊ธฐ, Place ์ด๋™ ์ถ”๊ฐ€
feature/onboarding/... ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ๋ฐ ์ค‘๋ณต ์ฒดํฌ ์ƒํƒœ ์™ธ๋ถ€ ๊ด€๋ฆฌ, NamingScreen ๋“ฑ ์ปดํฌ์ €๋ธ” ํŒŒ๋ผ๋ฏธํ„ฐ/์ฝœ๋ฐฑ ๊ตฌ์กฐ ๊ฐœ์„ , ViewModel ๋ฆฌํŒฉํ„ฐ๋ง
๊ธฐํƒ€ ๋ถˆํ•„์š” import/ํฌ๋งทํŒ… ์ •๋ฆฌ ๋“ฑ

Sequence Diagram(s)

sequenceDiagram
actor User
participant NamingScreen
participant OnBoardingViewModel
participant OnBoardingRepository
participant OnBoardingRemoteDataSource
participant OnBoardingService

User->>NamingScreen: ๋‹‰๋„ค์ž„ ์ž…๋ ฅ
NamingScreen->>OnBoardingViewModel: ChangeInputNickname(intent)
OnBoardingViewModel->>OnBoardingRepository: checkNicknameDuplicate(nickname)
OnBoardingRepository->>OnBoardingRemoteDataSource: checkNicknameDuplicate(nickname)
OnBoardingRemoteDataSource->>OnBoardingService: checkNicknameDuplicate API ํ˜ธ์ถœ
OnBoardingService-->>OnBoardingRemoteDataSource: isDuplicated ๋ฐ˜ํ™˜
OnBoardingRemoteDataSource-->>OnBoardingRepository: isDuplicated ๋ฐ˜ํ™˜
OnBoardingRepository-->>OnBoardingViewModel: isDuplicated ๋ฐ˜ํ™˜
OnBoardingViewModel-->>NamingScreen: isNicknameDuplicate ์ƒํƒœ ์—…๋ฐ์ดํŠธ
Loading
sequenceDiagram
actor User
participant OauthScreen
participant OauthViewModel
participant OauthRepository
participant OauthRemoteDataSource
participant OauthService

User->>OauthScreen: ์†Œ์…œ ๋กœ๊ทธ์ธ ์„ฑ๊ณต (Kakao ๋“ฑ)
OauthScreen->>OauthViewModel: KakaoLoginSuccess(provider, accessToken)
OauthViewModel->>OauthRepository: postSocialLogin(provider, accessToken)
OauthRepository->>OauthRemoteDataSource: socialLogin(provider, accessToken)
OauthRemoteDataSource->>OauthService: postSocialLogin API ํ˜ธ์ถœ
OauthService-->>OauthRemoteDataSource: accessToken, refreshToken, isNewUser ๋ฐ˜ํ™˜
OauthRemoteDataSource-->>OauthRepository: SocialLoginResponseDto ๋ฐ˜ํ™˜
OauthRepository-->>OauthViewModel: TokenEntity ๋ฐ˜ํ™˜
OauthViewModel->>OauthRepository: saveJwtToken(accessToken, refreshToken)
OauthRepository-->>OauthViewModel: ์ €์žฅ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
OauthViewModel-->>OauthScreen: ์‹ ๊ทœ/๊ธฐ์กด ์‚ฌ์šฉ์ž ๋ถ„๊ธฐ(NavigateToOnBoarding or NavigateToPlace)
Loading

Assessment against linked issues

Objective (์ด์Šˆ ๋ฒˆํ˜ธ) Addressed Explanation
ํšŒ์›๊ฐ€์ž… API ์‹ ๊ทœ ๊ตฌํ˜„ (#74) โœ…
๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ API ์—ฐ๋™ (#74) โœ…
์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •(ํŒจ์น˜) API ์—ฐ๋™ (#74) โœ…
๊ธฐ์กด signUp ๊ตฌ์กฐ ์ œ๊ฑฐ/์ด๊ด€ (#74) โœ…

Assessment against linked issues: Out-of-scope changes

ํ•ด๋‹น ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ค‘ ์ด์Šˆ #74์˜ "ํšŒ์›๊ฐ€์ž… API" ๋ชฉ์ ๊ณผ ๋ฌด๊ด€ํ•œ ๊ธฐ๋Šฅ์  ์ฝ”๋“œ ๋ณ€๊ฒฝ์€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

Possibly related PRs

  • [Feature/#5] module settingย #6: OAuth ๋ชจ๋“ˆ ์ดˆ๊ธฐ ์„ค์ • ๋ฐ ์†Œ์…œ ๋กœ๊ทธ์ธ ์—ฐ๋™ ๊ธฐ๋ฐ˜์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋ณธ PR์˜ OAuth ์ธ์ฆ ํ”Œ๋กœ์šฐ ํ™•์žฅ๊ณผ ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ด€๋จ.
  • [Feature/#29] shared componenet3ย #30: SolplyNicknameTextField์˜ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ ๋กœ์ง ๊ด€๋ จ ๋ณ€๊ฒฝ์ด ๋ณธ PR๊ณผ ์œ ์‚ฌ/์ค‘๋ณต๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์Œ.
  • [Feature/#66] refactor onboardingย #69: ๋‹‰๋„ค์ž„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋กœ์ง ๊ฐœ์„  ๊ด€๋ จ, ๋ณธ PR์˜ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ ๊ตฌ์กฐ์™€ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์—ฐ๊ด€๋จ.

Suggested labels

๋‚˜๊ฒฝ๐Ÿน๐Ÿ™

Suggested reviewers

  • 88guri

Poem

๐Ÿ‡
๋‹‰๋„ค์ž„ ์ค‘๋ณต, ์ด์ œ ๊ฑฑ์ • ๋งˆ!
์†Œ์…œ ๋กœ๊ทธ์ธ ํ•œ ๋ฒˆ์— ์™,
์‹ ๊ทœ ์œ ์ €๋ฉด ์˜จ๋ณด๋”ฉ ์ฝ•!
API ์—ฐ๊ฒฐ, ๋ฐ์ดํ„ฐ ํ๋ฆ„
์ฝ”๋“œ ์†์— ๋ด„๋ฐ”๋žŒ์ด ์Šค์œฝโ€”
์†”ํ”Œ๋ผ์ด, ๊ฐ€์ž…๊ธธ ํ™œ์ง ์—ด๋ ธ๋„ค!

โœจ Finishing Touches
  • ๐Ÿ“ Generate Docstrings

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

โค๏ธ Share
๐Ÿชง Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

๐Ÿงน Nitpick comments (7)
data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PatchUserInfoRequestDto.kt (1)

7-14: DTO ๊ตฌ์กฐ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SignUpRequestDto์—์„œ PatchUserInfoRequestDto๋กœ์˜ ๋ฆฌ๋„ค์ด๋ฐ๊ณผ ์ƒˆ๋กœ์šด ์†์„ฑ๋“ค(favoriteTown, persona) ์ถ”๊ฐ€๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์†์„ฑ์ด ์˜ฌ๋ฐ”๋ฅธ ์ง๋ ฌํ™” ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–ฅํ›„ ๊ฐœ์„ ์„ ์œ„ํ•ด ๋‹ค์Œ์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”:

  • ์ž…๋ ฅ ๊ฐ’ ๊ฒ€์ฆ ๋กœ์ง ์ถ”๊ฐ€ (์˜ˆ: nickname ๊ธธ์ด ์ œํ•œ, persona ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ)
  • ๋ฌธ์„œํ™” ์ฃผ์„ ์ถ”๊ฐ€๋กœ ๊ฐ ํ•„๋“œ์˜ ์šฉ๋„ ๋ช…์‹œ
app/build.gradle.kts (1)

14-14: ํ‚ค์Šคํ† ์–ด ๊ฒฝ๋กœ ํ•˜๋“œ์ฝ”๋”ฉ ๊ฐœ์„  ์ œ์•ˆ

ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

gradle.properties์— ํ‚ค์Šคํ† ์–ด ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•˜๊ณ  ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

-            storeFile = File("${project.rootDir.absolutePath}/keystore/debug.keystore")
+            storeFile = File(findProperty("DEBUG_KEYSTORE_PATH") ?: "${project.rootDir.absolutePath}/keystore/debug.keystore")
core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/textfield/SolplyTextField.kt (1)

157-157: ์ค‘๋ณต ๊ฒ€์‚ฌ ํƒ€์ด๋ฐ ๊ฐœ์„ ์„ ๊ณ ๋ คํ•ด๋ณด์„ธ์š”.

ํ˜„์žฌ isNicknameDuplicate๋ฅผ ์ฆ‰์‹œ ํ™•์ธํ•˜๋Š”๋ฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ง ์ž…๋ ฅ ์ค‘์ด๊ฑฐ๋‚˜ ๊ฒ€์ฆ์ด ์ง„ํ–‰ ์ค‘์ผ ๋•Œ์˜ ์ƒํƒœ๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

 validationState =
-    if (isNicknameDuplicate) NickNameValidateState.Duplicate else NickNameValidateState.Valid
+    if (isNicknameDuplicate) NickNameValidateState.Duplicate 
+    else if (isTyping) NickNameValidateState.Typing 
+    else NickNameValidateState.Valid
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt (1)

57-62: TODO ๋ฉ”์„œ๋“œ๋ฅผ ์™„์„ฑํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•ด์ฃผ์„ธ์š”.

patchUserInfo ๋ฉ”์„œ๋“œ๊ฐ€ TODO ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์ด ํ•„์š”ํ•˜์‹œ๋ฉด ํšŒ์›๊ฐ€์ž… API ํ˜ธ์ถœ ๋กœ์ง์„ ์ž‘์„ฑํ•ด๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (1)

58-63: ํ•˜๋“œ์ฝ”๋”ฉ๋œ provider ๋ฌธ์ž์—ด์„ ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•ด์ฃผ์„ธ์š”.

"KAKAO" ๋ฌธ์ž์—ด์ด ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•ด ์ƒ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

+private const val KAKAO_PROVIDER = "KAKAO"

 onSuccess = { accessToken, _ ->
     viewModel.sendIntent(
         OauthIntent.KakaoLoginSuccess(
-            provider = "KAKAO",
+            provider = KAKAO_PROVIDER,
             accessToken = accessToken
         )
     )
 }
feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt (1)

62-62: ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋””๋ฒ„๊ทธ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋กœ "asdasdasd"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ „๋ฌธ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜๋ฏธ์žˆ๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-                Log.d("asdasdasd", it.toString())
+                Log.e("OauthViewModel", "Social login failed: ${it.message}", it)
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt (1)

43-43: ๋””๋ฒ„๊ทธ ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

"asdasdasd"๋ฅผ ํƒœ๊ทธ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์ „๋ฌธ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜๋ฏธ์žˆ๋Š” ํƒœ๊ทธ๋กœ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๋•์…˜์—์„œ๋Š” ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-    Log.d("asdasdasd", "${state.selectedTownId} ${state.selectedPersona} ${state.userNickname}")
+    Log.d("OnBoardingRoute", "State: townId=${state.selectedTownId}, persona=${state.selectedPersona}, nickname=${state.userNickname}")
๐Ÿ“œ Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 37c1b3c and 20f1fd5.

๐Ÿ“’ Files selected for processing (42)
  • .gitignore (1 hunks)
  • app/build.gradle.kts (2 hunks)
  • core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/textfield/SolplyTextField.kt (4 hunks)
  • core/network/src/main/java/com/teamsolply/solply/network/AccessTokenInterceptor.kt (1 hunks)
  • core/network/src/main/java/com/teamsolply/solply/network/service/TokenRefreshService.kt (1 hunks)
  • data/oauth/src/main/java/com/teamsolply/solply/oauth/dto/request/SocialLoginRequestDto.kt (1 hunks)
  • data/oauth/src/main/java/com/teamsolply/solply/oauth/dto/response/SocialLoginResponseDto.kt (1 hunks)
  • data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt (1 hunks)
  • data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthRemoteDataSource.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/request/PatchUserInfoRequestDto.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/response/NicknameDuplicateResponseDto.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/response/PatchUserInfoResponseDto.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepositoryImpl.kt (1 hunks)
  • data/onboarding/src/main/java/com/teamsolply/solply/onboarding/source/OnBoardingRemoteDataSource.kt (1 hunks)
  • domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt (1 hunks)
  • domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt (1 hunks)
  • domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/SignUpEntity.kt (0 hunks)
  • domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/UserInfoEntity.kt (1 hunks)
  • domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepository.kt (1 hunks)
  • feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt (1 hunks)
  • feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt (1 hunks)
  • feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt (1 hunks)
  • feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (2 hunks)
  • feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt (2 hunks)
  • feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt (1 hunks)
  • feature/onboarding/build.gradle.kts (1 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt (2 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt (8 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt (2 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/component/BackHeader.kt (0 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt (1 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/NamingScreen.kt (3 hunks)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectPersonaScreen.kt (0 hunks)
  • remote/oauth/.gitignore (1 hunks)
  • remote/oauth/build.gradle.kts (1 hunks)
  • remote/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthRemoteDataSourceImpl.kt (1 hunks)
  • remote/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthRemoteDataModule.kt (1 hunks)
  • remote/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthServiceModule.kt (1 hunks)
  • remote/oauth/src/main/java/com/teamsolply/solply/oauth/service/OauthService.kt (1 hunks)
  • remote/onboarding/src/main/java/com/teamsolply/solply/onboarding/datasource/OnBoardingRemoteDataSourceImpl.kt (1 hunks)
  • remote/onboarding/src/main/java/com/teamsolply/solply/onboarding/service/OnBoardingService.kt (1 hunks)
  • settings.gradle.kts (1 hunks)
๐Ÿ’ค Files with no reviewable changes (3)
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/component/BackHeader.kt
  • feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/SelectPersonaScreen.kt
  • domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/SignUpEntity.kt
๐Ÿงฐ Additional context used
๐Ÿงฌ Code Graph Analysis (4)
feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt (1)
feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (1)
  • OauthRoute (43-77)
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt (1)
core/ui/src/main/java/com/teamsolply/solply/ui/base/BaseViewModel.kt (1)
  • reduce (44-46)
feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (1)
feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt (1)
  • navigateToPlace (79-81)
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt (2)
core/ui/src/main/java/com/teamsolply/solply/ui/lifecycle/LaunchedEffectWithLifecycle.kt (1)
  • LaunchedEffectWithLifecycle (11-24)
feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt (1)
  • navigateToPlace (79-81)
๐Ÿ”‡ Additional comments (49)
remote/oauth/.gitignore (1)

1-1: ํ‘œ์ค€ ๊ด€๋ก€์— ๋”ฐ๋ฅธ ์˜ฌ๋ฐ”๋ฅธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด remote/oauth ๋ชจ๋“ˆ์— ๋Œ€ํ•œ .gitignore ํŒŒ์ผ์ด /build ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ฌด์‹œํ•˜๋„๋ก ์ ์ ˆํžˆ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

.gitignore (1)

32-33: ๋ณด์•ˆ์„ ์œ„ํ•œ ์ ์ ˆํ•œ ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ ์ œ์™ธ ์„ค์ •์ž…๋‹ˆ๋‹ค.

์•ฑ ์„œ๋ช…์— ์‚ฌ์šฉ๋˜๋Š” ๋ฏผ๊ฐํ•œ ํ‚ค์Šคํ† ์–ด ํŒŒ์ผ๋“ค์ด Git ์ถ”์ ์—์„œ ์ œ์™ธ๋˜๋„๋ก ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณด์•ˆ ๋ชจ๋ฒ” ์‚ฌ๋ก€์— ๋ถ€ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

feature/onboarding/build.gradle.kts (1)

10-10: ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ์›์น™์— ๋”ฐ๋ฅธ ์˜ฌ๋ฐ”๋ฅธ ์˜์กด์„ฑ ์ถ”๊ฐ€์ž…๋‹ˆ๋‹ค.

ํ”ผ์ฒ˜ ๋ชจ๋“ˆ์ด ๋„๋ฉ”์ธ ๊ณ„์ธต์˜ ์˜จ๋ณด๋”ฉ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์˜์กด์„ฑ์ด ์ ์ ˆํžˆ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

settings.gradle.kts (1)

53-53: ์ƒˆ๋กœ์šด OAuth ๋ชจ๋“ˆ์˜ ํ‘œ์ค€์ ์ธ ์ถ”๊ฐ€์ž…๋‹ˆ๋‹ค.

remote:oauth ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ remote ๋ชจ๋“ˆ๋“ค๊ณผ ํ•จ๊ป˜ ์ ์ ˆํ•œ ์œ„์น˜์— ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ํ”„๋กœ์ ํŠธ์˜ ํ‘œ์ค€ ๊ด€๋ก€๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

remote/oauth/build.gradle.kts (1)

1-13: OAuth ๋ชจ๋“ˆ ๋นŒ๋“œ ์„ค์ •์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด OAuth ๋ชจ๋“ˆ์˜ Gradle ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ์˜์กด์„ฑ๋“ค(network, model, data.oauth)์ด ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/navigation/OnBoardingNavigation.kt (1)

21-23: ์ฝ”๋“œ ํฌ๋งทํŒ… ๊ฐœ์„ ์ด ์ž˜ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ถˆํ•„์š”ํ•œ trailing comma๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ธŒ๋ ˆ์ด์Šค ์œ„์น˜๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

domain/oauth/src/main/java/com/teamsolply/solply/oauth/model/TokenEntity.kt (1)

5-6: TokenEntity ์‚ฌ์šฉ์ฒ˜ ํ™•์ธ ์™„๋ฃŒ

  • data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt (22โ€“26)์—์„œ isNewUser๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ๋งคํ•‘๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ถ”๊ฐ€ ๊ฒ€ํ† ๋‚˜ ์ˆ˜์ • ์—†์ด ํ•„๋“œ ์ถ”๊ฐ€๋ฅผ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค.
domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/model/UserInfoEntity.kt (1)

3-8: ์‚ฌ์šฉ์ž ์ •๋ณด ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๊ฐ€ ์ž˜ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

UserInfoEntity๋Š” ์˜จ๋ณด๋”ฉ ํ”„๋กœ์„ธ์Šค์—์„œ ํ•„์š”ํ•œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์ ์ ˆํžˆ ๋ชจ๋ธ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. favoriteTownId๋งŒ nullable๋กœ ์„ค์ •ํ•œ ๊ฒƒ์ด ์ ์ ˆํ•˜๋ฉฐ, ๋ชจ๋“  ํ•„๋“œ์˜ ํƒ€์ž…๊ณผ ๋ช…๋ช…์ด ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/response/NicknameDuplicateResponseDto.kt (1)

6-10: ๊ตฌํ˜„์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด DTO๋Š” ๊ฐ„๋‹จํ•˜๊ณ  ๋ช…ํ™•ํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, Kotlin ์ง๋ ฌํ™” ๋ชจ๋ฒ” ์‚ฌ๋ก€๋ฅผ ์ž˜ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @SerialName ์–ด๋…ธํ…Œ์ด์…˜์„ ํ†ตํ•œ JSON ๋งคํ•‘๋„ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

data/oauth/src/main/java/com/teamsolply/solply/oauth/dto/request/SocialLoginRequestDto.kt (1)

6-10: ์†Œ์…œ ๋กœ๊ทธ์ธ ์š”์ฒญ DTO๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœํ•˜๊ณ  ๋ช…ํ™•ํ•˜๋ฉฐ, ์ง๋ ฌํ™” ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์ ˆํžˆ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์†์„ฑ๋ช…๋„ ๋ช…ํ™•ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

data/oauth/src/main/java/com/teamsolply/solply/oauth/source/OauthRemoteDataSource.kt (1)

5-7: OAuth ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ž˜ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ์›์น™์„ ์ž˜ ๋”ฐ๋ฅด๊ณ  ์žˆ์œผ๋ฉฐ, suspend ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ์ ์ ˆํžˆ ๊ณ ๋ ค๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋„ ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

feature/main/src/main/java/com/teamsolply/solply/main/MainScreen.kt (1)

134-142: OAuth ๋„ค๋น„๊ฒŒ์ด์…˜ ๊ทธ๋ž˜ํ”„์— Place ํ™”๋ฉด์œผ๋กœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜์ด ์ ์ ˆํžˆ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๋„ค๋น„๊ฒŒ์ด์…˜ ํŒจํ„ด๊ณผ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ, ๋„ค๋น„๊ฒŒ์ด์…˜ ์˜ต์…˜ ์„ค์ •๋„ ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ์ฝœ๋ฐฑ๋“ค๊ณผ ๋™์ผํ•œ ๊ตฌ์กฐ๋ฅผ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

app/build.gradle.kts (1)

54-54: OAuth ์›๊ฒฉ ๋ชจ๋“ˆ ์˜์กด์„ฑ ์ถ”๊ฐ€ ์Šน์ธ

OAuth ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์›๊ฒฉ ๋ชจ๋“ˆ ์˜์กด์„ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

feature/oauth/src/main/java/com/teamsolply/solply/oauth/navigation/OauthNavigation.kt (1)

20-21: ๋„ค๋น„๊ฒŒ์ด์…˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ถ”๊ฐ€๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋จ

OAuth ํ”Œ๋กœ์šฐ์—์„œ Place ํ™”๋ฉด์œผ๋กœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”๊ฐ€๋˜๊ณ  ์ „๋‹ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Also applies to: 26-27

remote/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthServiceModule.kt (1)

12-19: Dagger Hilt ๋ชจ๋“ˆ ๊ตฌ์„ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋จ

OAuth ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ ์˜์กด์„ฑ ์ฃผ์ž… ๋ชจ๋“ˆ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. @NoneAccessToken ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ ์—†๋Š” ์š”์ฒญ์„ ์œ„ํ•œ Retrofit ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

data/oauth/src/main/java/com/teamsolply/solply/oauth/dto/response/SocialLoginResponseDto.kt (1)

6-14: ์†Œ์…œ ๋กœ๊ทธ์ธ ์‘๋‹ต DTO๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋จ

์†Œ์…œ ๋กœ๊ทธ์ธ ์‘๋‹ต์„ ์œ„ํ•œ DTO๊ฐ€ ์ ์ ˆํ•œ ์ง๋ ฌํ™” ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ํ•จ๊ป˜ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ๋ช…๊ณผ ๊ตฌ์กฐ๊ฐ€ OAuth ์‘๋‹ต ํ˜•์‹์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

core/network/src/main/java/com/teamsolply/solply/network/service/TokenRefreshService.kt (1)

8-10: ํ† ํฐ ์ƒˆ๋กœ๊ณ ์นจ ์„œ๋น„์Šค ๊ตฌ์„ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋จ

API ์—”๋“œํฌ์ธํŠธ์™€ ํ—ค๋” ๊ตฌ์„ฑ์ด ๋ฐฑ์—”๋“œ API ๊ทœ๊ฒฉ์— ๋งž๊ฒŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "Refresh-Token" ํ—ค๋” ์‚ฌ์šฉ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/dto/response/PatchUserInfoResponseDto.kt (1)

1-16: ๊น”๋”ํ•œ Response DTO ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.

Kotlin serialization์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ชจ๋“  ํ•„๋“œ์— ์ ์ ˆํ•œ @SerialName ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํƒ€์ž… ์ •์˜๋„ ๋ช…ํ™•ํ•˜๊ณ  ๊ตฌ์กฐ๊ฐ€ ๊ฐ„๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingContract.kt (2)

23-24: ์ƒํƒœ ๊ด€๋ฆฌ ๊ฐœ์„ ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

userNickname์„ null์ด ์•„๋‹Œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  isNicknameDuplicate ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์€ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ ํ”Œ๋กœ์šฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋„ ์•ˆ์ „์„ฑ๋„ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


35-35: Intent ์ด๋ฆ„ ๊ฐœ์„ ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

ChangeInputNickname์œผ๋กœ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด ๋” ๋ช…ํ™•ํ•˜๊ณ  ์˜๋„๋ฅผ ์ž˜ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

remote/oauth/src/main/java/com/teamsolply/solply/oauth/di/OauthRemoteDataModule.kt (1)

11-17: ํ‘œ์ค€์ ์ธ Dagger Hilt ๋ชจ๋“ˆ ๊ตฌํ˜„์ž…๋‹ˆ๋‹ค.

SingletonComponent ์Šค์ฝ”ํ”„์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์น˜๋˜์–ด ์žˆ๊ณ , ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ตฌํ˜„์ฒด์˜ ๋ฐ”์ธ๋”ฉ์ด ์ ์ ˆํ•˜๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž… ํŒจํ„ด์„ ์ •ํ™•ํžˆ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

core/designsystem/src/main/java/com/teamsolply/solply/designsystem/component/textfield/SolplyTextField.kt (2)

117-117: UI ์ปดํฌ๋„ŒํŠธ ์ฑ…์ž„ ๋ถ„๋ฆฌ๊ฐ€ ์ž˜ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ค‘๋ณต ๊ฒ€์‚ฌ ๋กœ์ง์„ UI ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ„๋ฆฌํ•˜์—ฌ ์™ธ๋ถ€ ์ƒํƒœ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„ ์ž…๋‹ˆ๋‹ค. ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ์Šต๋‹ˆ๋‹ค.


140-144: ์ตœ์†Œ ๊ธธ์ด ๊ฒ€์ฆ ์ถ”๊ฐ€๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.

TooShort ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ตœ์†Œ ๊ธธ์ด ๊ฒ€์ฆ์„ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒ€์ฆ ๋กœ์ง์ด ๋” ๋ช…ํ™•ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthScreen.kt (1)

69-69: Place ํ™”๋ฉด์œผ๋กœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ฒ˜๋ฆฌ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด NavigateToPlace ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

domain/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepository.kt (1)

6-7: ์ธํ„ฐํŽ˜์ด์Šค ๋ฆฌํŒฉํ† ๋ง์ด ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์†Œ์…œ ๋กœ๊ทธ์ธ๊ณผ JWT ํ† ํฐ ์ €์žฅ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋˜์—ˆ๊ณ , Result ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹๋„ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

remote/onboarding/src/main/java/com/teamsolply/solply/onboarding/datasource/OnBoardingRemoteDataSourceImpl.kt (1)

13-17: ์˜จ๋ณด๋”ฉ ๋ฐ์ดํ„ฐ ์†Œ์Šค ๋ฆฌํŒฉํ† ๋ง์ด ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ํšŒ์›๊ฐ€์ž… ๋ฉ”์„œ๋“œ๋ฅผ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ์™€ ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋”์šฑ ์„ธ๋ถ„ํ™”๋œ API ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ ํŒจํ„ด๋„ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

domain/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepository.kt (2)

3-3: ์ž„ํฌํŠธ ๋ณ€๊ฒฝ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

SignUpEntity์—์„œ UserInfoEntity๋กœ์˜ ์ž„ํฌํŠธ ๋ณ€๊ฒฝ์ด ์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ตฌ์กฐ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.


6-11: ๋ฉ”์†Œ๋“œ ๋ถ„๋ฆฌ๊ฐ€ ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ๋”ฐ๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด signUp ๋ฉ”์†Œ๋“œ๋ฅผ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ์™€ ์‚ฌ์šฉ์ž ์ •๋ณด ํŒจ์น˜๋กœ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค. ๊ฐ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ช…ํ™•ํ•œ ์ฑ…์ž„์„ ๊ฐ€์ง€๋ฉฐ, ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/source/OnBoardingRemoteDataSource.kt (2)

3-5: ์ƒˆ๋กœ์šด DTO ์ž„ํฌํŠธ๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

PatchUserInfoRequestDto, NicknameDuplicateResponseDto, PatchUserInfoResponseDto์˜ ์ž„ํฌํŠธ๊ฐ€ ์ƒˆ๋กœ์šด API ๊ตฌ์กฐ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.


8-9: ๋ฉ”์†Œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๊ฐ€ ์ ์ ˆํ•˜๊ฒŒ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ช…ํ™•ํ•œ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ๊ฐ€์ง€๋ฉฐ, ์ ์ ˆํ•œ DTO๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ suspend ํ•จ์ˆ˜๋กœ ์ •์˜๋œ ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค.

data/oauth/src/main/java/com/teamsolply/solply/oauth/repository/OauthRepositoryImpl.kt (4)

5-5: ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์˜์กด์„ฑ ์ถ”๊ฐ€๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

OAuth ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์†Œ์Šค ์˜์กด์„ฑ์ด ์ถ”๊ฐ€๋˜์–ด ์†Œ์…œ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.


9-10: ์ƒ์„ฑ์ž ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆœ์„œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€ํ•˜์„ธ์š”.

๋กœ์ปฌ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์†Œ์Šค์˜ ์ˆœ์„œ๊ฐ€ ์ผ๊ด€๋˜๊ฒŒ ์œ ์ง€๋˜์–ด ๊ฐ€๋…์„ฑ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


13-27: ์†Œ์…œ ๋กœ๊ทธ์ธ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž˜ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

runCatching๊ณผ mapCatching์„ ์‚ฌ์šฉํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ์ ์ ˆํ•˜๋ฉฐ, DTO์—์„œ ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋กœ์˜ ๋งคํ•‘์ด ์˜ฌ๋ฐ”๋ฆ…๋‹ˆ๋‹ค. isNewUser ํ•„๋“œ๋ฅผ ํฌํ•จํ•œ ๊ฒƒ๋„ ์ข‹์€ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.


29-35: JWT ํ† ํฐ ์ €์žฅ ๋ฉ”์†Œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ณ„ ํ† ํฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๋„๋ก ๋ณ€๊ฒฝํ•œ ๊ฒƒ์ด ๋” ์œ ์—ฐํ•˜๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด API๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/screen/NamingScreen.kt (3)

24-26: ์ œ์–ดํ˜• ์ปดํฌ๋„ŒํŠธ๋กœ์˜ ๋ฆฌํŒฉํ† ๋ง์ด ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค.

inputNickname, isNicknameDuplicate ํŒŒ๋ผ๋ฏธํ„ฐ์™€ changeInputNickname ์ฝœ๋ฐฑ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์™„์ „ํžˆ ์ œ์–ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“  ๊ฒƒ์€ ์ข‹์€ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ์™ธ๋ถ€ํ™”ํ•˜์—ฌ ๋” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฌ์šด ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.


50-52: ์™ธ๋ถ€ ์ƒํƒœ ์‚ฌ์šฉ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

inputNickname๊ณผ changeInputNickname ์ฝœ๋ฐฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๊ด€๋ฆฌ๊ฐ€ ์™ธ๋ถ€ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. state.isNicknameDuplicate๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ๋„ ์ผ๊ด€๋œ ์ƒํƒœ ๊ด€๋ฆฌ ํŒจํ„ด์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.


64-70: ๋ฒ„ํŠผ ํ™œ์„ฑํ™” ๋กœ์ง์ด ์ผ๊ด€๋˜๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

state.userNickname์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํŠผ ํ™œ์„ฑํ™” ์ƒํƒœ์™€ ํ…์ŠคํŠธ ์ƒ‰์ƒ์„ ์ผ๊ด€๋˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. UI ์ƒํƒœ๊ฐ€ ๋ช…ํ™•ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

data/onboarding/src/main/java/com/teamsolply/solply/onboarding/repository/OnBoardingRepositoryImpl.kt (3)

3-4: ์ƒˆ๋กœ์šด ์ž„ํฌํŠธ๊ฐ€ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

PatchUserInfoRequestDto์™€ UserInfoEntity ์ž„ํฌํŠธ๊ฐ€ ์ƒˆ๋กœ์šด API ๊ตฌ์กฐ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.


11-13: ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

runCatching์„ ์‚ฌ์šฉํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๊ฐ€ ์ ์ ˆํ•˜๋ฉฐ, ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๋ฐ›์€ isDuplicated ๊ฐ’์„ ์ง์ ‘ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.


15-34: ์‚ฌ์šฉ์ž ์ •๋ณด ํŒจ์น˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž˜ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

DTO ์ƒ์„ฑ, ์›๊ฒฉ ๋ฐ์ดํ„ฐ ์†Œ์Šค ํ˜ธ์ถœ, ๋„๋ฉ”์ธ ์—”ํ‹ฐํ‹ฐ๋กœ์˜ ๋งคํ•‘์ด ์ˆœ์„œ๋Œ€๋กœ ์ ์ ˆํ•˜๊ฒŒ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. runCatching๊ณผ mapCatching์„ ์‚ฌ์šฉํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋„ ์˜ฌ๋ฐ”๋ฆ…๋‹ˆ๋‹ค.

feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthContract.kt (3)

13-13: OAuth ํ† ํฐ๊ณผ JWT ํ† ํฐ ์ฒ˜๋ฆฌ ๋ถ„๋ฆฌ๊ฐ€ ์ž˜ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

KakaoLoginSuccess์—์„œ refreshToken์„ ์ œ๊ฑฐํ•˜๊ณ  provider์™€ accessToken๋งŒ ํฌํ•จํ•˜๋„๋ก ๋ณ€๊ฒฝํ•œ ๊ฒƒ์€ OAuth ํ† ํฐ ๊ตํ™˜๊ณผ JWT ํ† ํฐ ์ €์žฅ์„ ๋ถ„๋ฆฌํ•˜๋Š” ์ข‹์€ ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค.


15-19: ์ƒˆ๋กœ์šด JWT ํ† ํฐ ์ €์žฅ ์ธํ…ํŠธ๊ฐ€ ์ž˜ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SaveJwtToken ์ธํ…ํŠธ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด(accessToken, refreshToken, isNewUser)๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์–ด JWT ํ† ํฐ ์ €์žฅ๊ณผ ์‹ ๊ทœ ์‚ฌ์šฉ์ž ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.


25-25: Place ํ™”๋ฉด ๋„ค๋น„๊ฒŒ์ด์…˜์„ ์œ„ํ•œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ์ ์ ˆํžˆ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

NavigateToPlace ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋Š” ๊ธฐ์กด ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ ํ›„ ๋ฉ”์ธ ํ™”๋ฉด์œผ๋กœ ์ด๋™ํ•˜๋Š” ํ”Œ๋กœ์šฐ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

remote/onboarding/src/main/java/com/teamsolply/solply/onboarding/service/OnBoardingService.kt (2)

14-17: ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ API๊ฐ€ ์ž˜ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

GET ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹‰๋„ค์ž„ ์ค‘๋ณต์„ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์€ REST ์›์น™์— ๋งž์œผ๋ฉฐ, ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํ†ตํ•œ ๋‹‰๋„ค์ž„ ์ „๋‹ฌ๋„ ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.


19-22: ์‚ฌ์šฉ์ž ์ •๋ณด ์—…๋ฐ์ดํŠธ API๊ฐ€ ์ ์ ˆํžˆ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

PATCH ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ถ€๋ถ„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅด๋ฉฐ, ์š”์ฒญ DTO๋ฅผ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ๋„ ํƒ€์ž… ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

feature/oauth/src/main/java/com/teamsolply/solply/oauth/OauthViewModel.kt (2)

19-22: OAuth ํ† ํฐ ๊ตํ™˜๊ณผ JWT ํ† ํฐ ์ €์žฅ์ด ์ž˜ ๋ถ„๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

KakaoLoginSuccess ์ฒ˜๋ฆฌ์—์„œ postSocialLogin์„ ํ˜ธ์ถœํ•˜์—ฌ OAuth ํ† ํฐ์„ JWT ํ† ํฐ์œผ๋กœ ๊ตํ™˜ํ•˜๋Š” ๋‹จ๊ณ„์  ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ช…ํ™•ํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


28-41: JWT ํ† ํฐ ์ €์žฅ๊ณผ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋กœ์ง์ด ์ ์ ˆํžˆ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SaveJwtToken ์ธํ…ํŠธ ์ฒ˜๋ฆฌ์—์„œ ์‹ ๊ทœ ์‚ฌ์šฉ์ž ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์˜จ๋ณด๋”ฉ ๋˜๋Š” Place ํ™”๋ฉด์œผ๋กœ ๋ถ„๊ธฐํ•˜๋Š” ๋กœ์ง์ด ๋ช…ํ™•ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฆ…๋‹ˆ๋‹ค.

feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingScreen.kt (2)

71-73: ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ์ฝœ๋ฐฑ์ด ์ ์ ˆํžˆ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

changeInputNickname ์ฝœ๋ฐฑ์„ ํ†ตํ•ด ๋‹‰๋„ค์ž„ ์ž…๋ ฅ์„ ์™ธ๋ถ€์—์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ๋ณ€๊ฒฝํ•œ ๊ฒƒ์€ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ViewModel๋กœ ์ง‘์ค‘ํ™”ํ•˜๋Š” ์ข‹์€ ์•„ํ‚คํ…์ฒ˜ ๊ฒฐ์ •์ž…๋‹ˆ๋‹ค.


176-178: NamingScreen ํŒŒ๋ผ๋ฏธํ„ฐ ์ „๋‹ฌ์ด ์ž˜ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

inputNickname, isNicknameDuplicate, changeInputNickname ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๋‹‰๋„ค์ž„ ์ค‘๋ณต ์ฒดํฌ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

Comment on lines +35 to +39
Log.d(TAG, "Request URL: ${newRequest.url}")
Log.d(
TAG,
"Authorization header: ${if (newRequest.header("Authorization") != null) "Bearer [REDACTED]" else "null"}"
)
Copy link

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue

ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด ๋กœ๊น…์˜ ๋ณด์•ˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์กฐ๊ฑด๋ถ€ ๋””๋ฒ„๊ทธ ๋กœ๊น…์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ชจ๋“  ์š”์ฒญ์— ๋Œ€ํ•ด URL๊ณผ ์ธ์ฆ ํ—ค๋” ์ •๋ณด๋ฅผ ๋ฌด์กฐ๊ฑด ๋กœ๊น…ํ•˜๋Š” ๊ฒƒ์€ ๋ณด์•ˆ์ƒ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ์—์„œ๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด๊ฐ€ ๋กœ๊ทธ์— ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•˜์—ฌ ๋””๋ฒ„๊ทธ ๋นŒ๋“œ์—์„œ๋งŒ ๋กœ๊น…ํ•˜๋„๋ก ๊ฐœ์„ ํ•˜์„ธ์š”:

-        Log.d(TAG, "Request URL: ${newRequest.url}")
-        Log.d(
-            TAG,
-            "Authorization header: ${if (newRequest.header("Authorization") != null) "Bearer [REDACTED]" else "null"}"
-        )
+        if (BuildConfig.DEBUG) {
+            Log.d(TAG, "Request URL: ${newRequest.url}")
+            Log.d(
+                TAG,
+                "Authorization header: ${if (newRequest.header("Authorization") != null) "Bearer [REDACTED]" else "null"}"
+            )
+        }
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Log.d(TAG, "Request URL: ${newRequest.url}")
Log.d(
TAG,
"Authorization header: ${if (newRequest.header("Authorization") != null) "Bearer [REDACTED]" else "null"}"
)
if (BuildConfig.DEBUG) {
Log.d(TAG, "Request URL: ${newRequest.url}")
Log.d(
TAG,
"Authorization header: ${if (newRequest.header("Authorization") != null) "Bearer [REDACTED]" else "null"}"
)
}
๐Ÿค– Prompt for AI Agents
In
core/network/src/main/java/com/teamsolply/solply/network/AccessTokenInterceptor.kt
around lines 35 to 39, the current code logs request URLs and authorization
headers unconditionally, which risks exposing sensitive information in
production logs. Modify the code to wrap these log statements inside a check
that ensures they only execute in debug builds, such as using a build
configuration flag or a debug mode check, to prevent sensitive data from being
logged in production environments.

.currentBackStackEntryAsState().value?.destination

val startDestination = OnBoarding
val startDestination = Splash
Copy link

Choose a reason for hiding this comment

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

๐Ÿ’ก Verification agent

๐Ÿงฉ Analysis chain

์‹œ์ž‘ ํ™”๋ฉด ๋ณ€๊ฒฝ์ด ์•ฑ ํ”Œ๋กœ์šฐ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๊ฒ€์ฆํ•˜์„ธ์š”.

์‹œ์ž‘ ํ™”๋ฉด์„ OnBoarding์—์„œ Splash๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์•ฑ์˜ ์ดˆ๊ธฐ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํฌ๊ฒŒ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์—์„œ ์ ์ ˆํ•œ ์‹œ์ ์— ์˜จ๋ณด๋”ฉ์ด๋‚˜ OAuth ๋กœ๊ทธ์ธ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋กœ์ง์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์—์„œ ์˜จ๋ณด๋”ฉ/OAuth๋กœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋กœ์ง์„ ํ™•์ธํ•˜์„ธ์š”:


๐Ÿ Script executed:

#!/bin/bash
# ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด์—์„œ ๋‹ค๋ฅธ ํ™”๋ฉด์œผ๋กœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋กœ์ง ๊ฒ€์ƒ‰
fd -t f -e kt | xargs grep -l "Splash" | xargs grep -A 10 -B 5 "navigate"

Length of output: 17757


Splash ํ™”๋ฉด์—์„œ ์˜จ๋ณด๋”ฉ ๋กœ์ง ๋ˆ„๋ฝ ํ™•์ธ ๋ฐ ๋ณด์™„ ํ•„์š”

Splash๋ฅผ ์‹œ์ž‘ ํ™”๋ฉด์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ์‹ค์ œ๋กœ OnBoarding์œผ๋กœ์˜ ๋„ค๋น„๊ฒŒ์ด์…˜์ด ๋น ์ ธ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. MainNavigator์—๋Š” ์—ฌ์ „ํžˆ navigateToOnboarding ๋ฉ”์„œ๋“œ(import ํฌํ•จ)๊ฐ€ ๋‚จ์•„ ์žˆ์œผ๋‚˜, SplashNavigation ๋ฐ SplashScreen ์ชฝ์— ์˜จ๋ณด๋”ฉ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์ฝœ๋ฐฑ์ด ์ „๋‹ฌยท์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์กฐ์น˜๊ฐ€ ํ•„์š”ํ•œ ์œ„์น˜:

  • feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt
    โ€ข fun navigateToOnboarding(navOptions: NavOptions) ์กด์žฌ
  • feature/main/src/main/java/com/teamsolply/solply/main/splash/SplashNavigation.kt
    โ€ข splashNavGraph ํ˜ธ์ถœ๋ถ€์— OnBoarding ์ฝœ๋ฐฑ ์ „๋‹ฌ๋ถ€ ์—†์Œ
  • feature/main/src/main/java/com/teamsolply/solply/main/splash/SplashScreen.kt
    โ€ข SplashSideEffect์— OnBoarding ๊ด€๋ จ ์ผ€์ด์Šค๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

์ œ์•ˆ

  • ์‹ ๊ทœ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ OnBoarding์œผ๋กœ ๋ถ„๊ธฐํ•˜๋„๋ก SplashViewModel์—์„œ SideEffect๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , SplashNavigation์— navigateToOnboarding ์ฝœ๋ฐฑ์„ ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜
  • ์˜จ๋ณด๋”ฉ ํ”Œ๋กœ์šฐ ์ž์ฒด๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋ ค๋ฉด MainNavigator ๋ฐ ๊ด€๋ จ import๋ฅผ ์ •๋ฆฌ

์œ„ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•ด ์•ฑ ํ”Œ๋กœ์šฐ๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ ๋™์ž‘ํ•˜๋Š”์ง€ ๊ฒ€์ฆ ํ›„ ์ˆ˜์ • ๋ฐ”๋ž๋‹ˆ๋‹ค.

๐Ÿค– Prompt for AI Agents
In feature/main/src/main/java/com/teamsolply/solply/main/MainNavigator.kt at
line 29 and related files, the navigation from Splash screen to OnBoarding is
missing despite the presence of navigateToOnboarding method. Fix this by adding
a SideEffect in SplashViewModel to trigger OnBoarding navigation for new users,
passing the navigateToOnboarding callback through SplashNavigation's
splashNavGraph, and handling the OnBoarding case in SplashScreen's
SplashSideEffect. Alternatively, if OnBoarding is to be removed, clean up
MainNavigator and imports accordingly. Verify the app flow works as intended
after these changes.

Comment on lines +22 to +26
release {
signingConfig = signingConfigs.getByName("debug")
isMinifyEnabled = false
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
Copy link

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue

๋ฆด๋ฆฌ์ฆˆ ๋นŒ๋“œ์—์„œ ๋””๋ฒ„๊ทธ ํ‚ค์Šคํ† ์–ด ์‚ฌ์šฉ ๋ฐ ๋‚œ๋…ํ™” ๋น„ํ™œ์„ฑํ™” ๋ฌธ์ œ

๋ฆด๋ฆฌ์ฆˆ ๋นŒ๋“œ์—์„œ ๋””๋ฒ„๊ทธ ํ‚ค์Šคํ† ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ฝ”๋“œ ๋‚œ๋…ํ™”๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ณด์•ˆ์ƒ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ˆ˜์ •์‚ฌํ•ญ์„ ์ ์šฉํ•˜์„ธ์š”:

+        create("release") {
+            keyAlias = "release"
+            keyPassword = "your_release_password"
+            storeFile = File("${project.rootDir.absolutePath}/keystore/release.keystore")
+        }
    }

    buildTypes {
        debug {
            signingConfig = signingConfigs.getByName("debug")
        }
        release {
-            signingConfig = signingConfigs.getByName("debug")
+            signingConfig = signingConfigs.getByName("release")
-            isMinifyEnabled = false
+            isMinifyEnabled = true
+            isShrinkResources = true
            proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
        }
๐Ÿค– Prompt for AI Agents
In app/build.gradle.kts around lines 22 to 26, the release build is incorrectly
using the debug signingConfig and has minify (code obfuscation) disabled, which
poses security risks. Change the signingConfig to use the proper release
keystore configuration instead of "debug" and enable minify by setting
isMinifyEnabled to true. Also, ensure the proguardFiles are correctly configured
for release builds to enable code obfuscation and optimization.

Comment on lines +11 to +15
@POST("api/auth/social/{soicialPlatform}/login")
suspend fun postSocialLogin(
@Path("soicialPlatform") soicialPlatform: String,
@Body oauthAccessToken: SocialLoginRequestDto
): BaseResponse<SocialLoginResponseDto>
Copy link

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue

๊ฒฝ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ช… ์˜คํƒ€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@Path("soicialPlatform")์—์„œ "soicialPlatform"์€ "socialPlatform"์œผ๋กœ ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋ช…๋„ ํ•จ๊ป˜ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

-    @POST("api/auth/social/{soicialPlatform}/login")
+    @POST("api/auth/social/{socialPlatform}/login")
     suspend fun postSocialLogin(
-        @Path("soicialPlatform") soicialPlatform: String,
+        @Path("socialPlatform") socialPlatform: String,
         @Body oauthAccessToken: SocialLoginRequestDto
     ): BaseResponse<SocialLoginResponseDto>
๐Ÿค– Prompt for AI Agents
In
remote/oauth/src/main/java/com/teamsolply/solply/oauth/service/OauthService.kt
lines 11 to 15, there is a typo in the path parameter name "soicialPlatform"
which should be corrected to "socialPlatform". Update both the @Path annotation
and the corresponding function parameter name to "socialPlatform" to ensure
consistency and correct routing.

provider: String,
oauthAccessToken: String
): SocialLoginResponseDto = oauthService.postSocialLogin(
soicialPlatform = provider,
Copy link

Choose a reason for hiding this comment

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

โš ๏ธ Potential issue

๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์˜คํƒ€๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์„ธ์š”.

soicialPlatform โ†’ socialPlatform์œผ๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

-        soicialPlatform = provider,
+        socialPlatform = provider,
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
soicialPlatform = provider,
socialPlatform = provider,
๐Ÿค– Prompt for AI Agents
In
remote/oauth/src/main/java/com/teamsolply/solply/oauth/datasource/OauthRemoteDataSourceImpl.kt
at line 16, there is a typo in the parameter name 'soicialPlatform'. Correct the
spelling to 'socialPlatform' to fix the issue.

Comment on lines +46 to +51
viewModelScope.launch {
onBoardingRepository.checkNicknameDuplicate(nickname = intent.nickname)
.onSuccess {
reduce { copy(isNicknameDuplicate = it) }
}
}
Copy link

Choose a reason for hiding this comment

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

๐Ÿ› ๏ธ Refactor suggestion

๋น„๋™๊ธฐ ์ž‘์—…์˜ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

๋‹‰๋„ค์ž„ ์ค‘๋ณต ๊ฒ€์‚ฌ์—์„œ ์‹คํŒจ ์ผ€์ด์Šค์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜๋‚˜ ์„œ๋ฒ„ ์˜ค๋ฅ˜ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ ์ ˆํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 viewModelScope.launch {
     onBoardingRepository.checkNicknameDuplicate(nickname = intent.nickname)
         .onSuccess {
             reduce { copy(isNicknameDuplicate = it) }
         }
+        .onFailure {
+            // ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€ (์˜ˆ: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ)
+        }
 }
๐Ÿ“ Committable suggestion

โ€ผ๏ธ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
viewModelScope.launch {
onBoardingRepository.checkNicknameDuplicate(nickname = intent.nickname)
.onSuccess {
reduce { copy(isNicknameDuplicate = it) }
}
}
viewModelScope.launch {
onBoardingRepository.checkNicknameDuplicate(nickname = intent.nickname)
.onSuccess {
reduce { copy(isNicknameDuplicate = it) }
}
.onFailure {
// ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋กœ์ง ์ถ”๊ฐ€ (์˜ˆ: ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ํ‘œ์‹œ)
}
}
๐Ÿค– Prompt for AI Agents
In
feature/onboarding/src/main/java/com/teamsolply/solply/onboarding/OnBoardingViewModel.kt
lines 46 to 51, the coroutine launched for checking nickname duplication handles
only the success case but lacks error handling. Add an onFailure block to handle
errors from checkNicknameDuplicate, and update the state or notify the user
appropriately to provide feedback on network or server errors.

@leeseokchan00 leeseokchan00 merged commit de904be into develop Jul 15, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

์„์ฐฌ๐Ÿš๐Ÿฆ ์ด์„ ์ฐฌ์ฐฌ์ฐฌ์ฐฌ ์ฐฌ์ด์•ผ ~ ์™„์ „ ์ฐฌ์ด์•ผ ~

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] ํšŒ์›๊ฐ€์ž… api

2 participants