Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐛 強制リフレッシュ処理を追加 #113

Merged
merged 1 commit into from
Dec 4, 2023

Conversation

tatsutakein
Copy link
Member

@tatsutakein tatsutakein commented Dec 4, 2023

Issue

  • close #ISSUE_NUMBER 🦕

概要

強制リフレッシュ処理を追加します。

レビュー観点

特になし

レビューレベル

  • Lv0: まったく見ないで Approve する
  • Lv1: ぱっとみて違和感がないかチェックして Approve する
  • Lv2: 仕様レベルまで理解して、仕様通りに動くかある程度検証して Approve する
  • Lv3: 実際に環境で動作確認したうえで Approve する

レビュー優先度

  • すぐに見てもらいたい ( hotfix など ) 🚀
  • 今日中に見てもらいたい 🚗
  • 今日〜明日中で見てもらいたい 🚶
  • 数日以内で見てもらいたい 🐢

参考リンク

スクリーンショット

Before After

Summary by CodeRabbit

  • 新機能

    • セッションの自動更新機能を追加しました。認証済みの状態でセッションが古い場合、自動的に更新されます。
  • バグ修正

    • 認証状態を管理するフローを改善しました。
  • ドキュメント

    • 新しい認証関連の関数に関するドキュメントを更新しました。

@tatsutakein tatsutakein requested a review from a team as a code owner December 4, 2023 12:37
Copy link

coderabbitai bot commented Dec 4, 2023

Walkthrough

認証関連のコードベースにおいて、セッションのリフレッシュ機能が強化されました。DataStoreインターフェースに新しいメソッドが追加され、AuthRepositoryAuthRemoteDataSourceの実装がこれに合わせて更新されています。これにより、認証済みの状態がデータストアによってリフレッシュされていない場合、セッションを自動的に更新するようになりました。

Changes

ファイルパス 変更概要
core/data/.../DefaultAuthRepository.kt DataStore依存性の追加とauthStatusフローの変更
core/datastore/.../DataStore.kt
core/datastore/.../SettingsDataStore.kt
DataStoreインターフェースにsetRefreshedisRefreshedメソッドを追加
core/network/.../AuthRemoteDataSource.kt
core/network/.../FakeAuthRemoteDataSource.kt
core/network/.../SupabaseAuthRemoteDataSource.kt
新しいrefreshCurrentSessionメソッドの追加

🐰💻
新しい朝が来た、セッションは新鮮
データストアが目覚め、リフレッシュの兆し
コードのうさぎ、変更を祝う
バグは遠ざかり、機能は流れるように


Tips

Chat with CodeRabbit Bot (@coderabbitai)

  • If you reply to a review comment from CodeRabbit, the bot will automatically respond.
  • To engage with CodeRabbit bot directly around the specific lines of code in the PR, mention @coderabbitai in your review comment
  • Note: Review comments are made on code diffs or files, not on the PR overview.
  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger a review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai help to get help.

Note: For conversation with the bot, please use the review comments on code diffs or files.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • The JSON schema for the configuration file is available here.
  • 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/coderabbit-overrides.v2.json

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.

Review Status

Actionable comments generated: 3

Configuration used: CodeRabbit UI

Commits Files that changed from the base of the PR and between 6114350 and fd6a1b5.
Files selected for processing (6)
  • core/data/src/commonMain/kotlin/club/nito/core/data/DefaultAuthRepository.kt (1 hunks)
  • core/datastore/src/commonMain/kotlin/club/nito/core/datastore/DataStore.kt (1 hunks)
  • core/datastore/src/commonMain/kotlin/club/nito/core/datastore/SettingsDataStore.kt (1 hunks)
  • core/network/src/commonMain/kotlin/club/nito/core/network/auth/AuthRemoteDataSource.kt (1 hunks)
  • core/network/src/commonMain/kotlin/club/nito/core/network/auth/FakeAuthRemoteDataSource.kt (1 hunks)
  • core/network/src/commonMain/kotlin/club/nito/core/network/auth/SupabaseAuthRemoteDataSource.kt (1 hunks)
Additional comments: 3
core/datastore/src/commonMain/kotlin/club/nito/core/datastore/DataStore.kt (1)
  • 3-5: 新しいサスペンド関数setRefreshedisRefreshedDataStoreインターフェースに追加されました。これらの変更は、インターフェースを実装するクラスに新しいリフレッシュ状態管理メソッドを導入します。実装クラスがこれらの新しいメソッドを適切にサポートするように更新されていることを確認してください。
core/network/src/commonMain/kotlin/club/nito/core/network/auth/FakeAuthRemoteDataSource.kt (1)
  • 79-81: 現在の実装ではrefreshCurrentSessionメソッドは何も行わないプレースホルダーとして追加されています。将来的な実装やテストのためにこのメソッドが準備されていることを確認してください。また、このメソッドが呼び出される際には、適切な処理が実装されるまで何も行われないことを意識する必要があります。
core/network/src/commonMain/kotlin/club/nito/core/network/auth/SupabaseAuthRemoteDataSource.kt (1)
  • 59-59: 新しいメソッドrefreshCurrentSessionSupabaseAuthRemoteDataSourceクラスに追加されました。このメソッドはgoTrue.refreshCurrentSession()を直接呼び出しており、ロジック上の問題は見受けられません。ただし、セッションのリフレッシュが失敗した場合のエラーハンドリングについての情報が不足しています。この点については、コードベースの他の部分で管理されているかどうかを確認する必要があります。

Comment on lines +14 to +21
override val authStatus: Flow<AuthStatus> = remoteDataSource.authStatus.map {
if (it is AuthStatus.Authenticated && dataStore.isRefreshed().not()) {
remoteDataSource.refreshCurrentSession()
dataStore.setRefreshed(true)
}

it
}
Copy link

Choose a reason for hiding this comment

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

authStatusフローの変換ロジックに例外処理が含まれていません。remoteDataSource.refreshCurrentSession()の呼び出しに失敗した場合に備えて、エラーハンドリングを追加することを検討してください。また、セッションのリフレッシュが成功した後に新しいAuthStatusを発行する必要があるかどうかを確認してください。

+           try {
+           } catch (e: Exception) {
+               // Handle the exception, possibly by logging or rethrowing
+           }

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.

Suggested change
override val authStatus: Flow<AuthStatus> = remoteDataSource.authStatus.map {
if (it is AuthStatus.Authenticated && dataStore.isRefreshed().not()) {
remoteDataSource.refreshCurrentSession()
dataStore.setRefreshed(true)
}
it
}
override val authStatus: Flow<AuthStatus> = remoteDataSource.authStatus.map {
if (it is AuthStatus.Authenticated && dataStore.isRefreshed().not()) {
try {
remoteDataSource.refreshCurrentSession()
dataStore.setRefreshed(true)
} catch (e: Exception) {
// Handle the exception, possibly by logging or rethrowing
}
}
it
}

Comment on lines 11 to 15
public suspend fun logout()
public suspend fun modifyAuthUser(email: String?, password: String?): UserInfo
public suspend fun authIfNeeded()
public suspend fun refreshCurrentSession()
}
Copy link

Choose a reason for hiding this comment

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

💡 NOTE
Codebase verification is a beta feature.

AuthRemoteDataSourceインターフェースにrefreshCurrentSessionメソッドが追加されましたが、このインターフェースを実装するクラスに新しいメソッドの実装が見つかりませんでした。すべての実装クラスが新しいメソッドを適切に実装しているか確認する必要があります。

Comment on lines +9 to +25
@OptIn(ExperimentalSettingsApi::class)
public class SettingsDataStore(
private val settings: Settings,
@OptIn(ExperimentalSettingsApi::class)
private val suspendSettings: SuspendSettings = settings.toSuspendSettings(),
private val json: Json,
) : DataStore
) : DataStore {
override suspend fun setRefreshed(isRefreshed: Boolean) {
suspendSettings.putBoolean(REFRESHED_KEY, isRefreshed)
}

override suspend fun isRefreshed(): Boolean = suspendSettings.getBoolean(REFRESHED_KEY, false)

public companion object {
private const val REFRESHED_KEY = "refreshed-v0-3-3"
}
}
Copy link

Choose a reason for hiding this comment

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

💡 NOTE
Codebase verification is a beta feature.

SettingsDataStore クラスに対する変更は、DataStore インターフェースの実装と実験的な SuspendSettings API の使用を含んでいます。@OptIn(ExperimentalSettingsApi::class) アノテーションは、他の2つのファイルでも使用されていることが確認されましたが、DataStore インターフェースの setRefreshed および isRefreshed メソッドを実装している他のクラスは見つかりませんでした。このことは、新しいインターフェースメソッドが現在のコードベースで広く採用されていない可能性があることを示唆しています。この変更が他の部分にどのような影響を与えるかを検証する必要があります。

@tatsutakein tatsutakein merged commit bdcf48f into main Dec 4, 2023
4 checks passed
@tatsutakein tatsutakein deleted the rt/add-force-refresh branch December 4, 2023 12:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant