All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.com.harmony.kotlin.library.oauth.data.OAuthTokenRepository.kt Maven / Gradle / Ivy

package com.harmony.kotlin.library.oauth.data

import com.harmony.kotlin.data.datasource.GetDataSource
import com.harmony.kotlin.data.datasource.PutDataSource
import com.harmony.kotlin.data.operation.Operation
import com.harmony.kotlin.data.query.KeyQuery
import com.harmony.kotlin.data.query.Query
import com.harmony.kotlin.data.repository.GetRepository
import com.harmony.kotlin.data.repository.PutRepository
import com.harmony.kotlin.error.notSupportedOperation
import com.harmony.kotlin.error.notSupportedQuery
import com.harmony.kotlin.library.oauth.data.entity.OAuthTokenEntity
import com.harmony.kotlin.library.oauth.data.query.OAuthQuery

internal class OAuthTokenRepository(
  private val putNetworkDataSource: PutDataSource,
  private val getStorageDataSource: GetDataSource,
  private val putStorageDataSource: PutDataSource
) : GetRepository, PutRepository {

  override suspend fun get(query: Query, operation: Operation): OAuthTokenEntity {
    when (query) {
      is KeyQuery -> {
        val tokenEntity = getStorageDataSource.get(query)
        return if (!tokenEntity.isValid()) {
          tokenEntity.refreshToken?.let {
            put(OAuthQuery.RefreshToken(query.key, tokenEntity.refreshToken), null)
          } ?: tokenEntity
        } else {
          tokenEntity
        }
      }
      else -> notSupportedQuery()
    }
  }

  @Deprecated("Use get instead")
  override suspend fun getAll(query: Query, operation: Operation): List = notSupportedOperation()

  override suspend fun put(query: Query, value: OAuthTokenEntity?, operation: Operation): OAuthTokenEntity {
    return putNetworkDataSource.put(query, value).let {
      putStorageDataSource.put(query, it)
    }
  }

  @Deprecated("Use put instead")
  override suspend fun putAll(query: Query, value: List?, operation: Operation): List = notSupportedOperation()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy