Skip to content

Instantly share code, notes, and snippets.

View MkhytarMkhoian's full-sized avatar
🏠
Working from home

Mkhytar Mkhoian MkhytarMkhoian

🏠
Working from home
View GitHub Profile
class FirebaseDynamicLinkDataSource(
private val host: String,
private val firebaseDynamicLinks: FirebaseDynamicLinks,
private val backgroundDispatcher: CoroutineDispatcher = Dispatchers.IO,
) {
suspend fun parseLink(uri: String): String? = withContext(backgroundDispatcher) {
if (uri.matchesPattern(host).not()) return@withContext null
try {
firebaseDynamicLinks.getDynamicLink(Uri.parse(uri)).await().link?.toString()
class DynamicLinkDataRepository(
private val dataSource: FirebaseDynamicLinkDataSource,
) : DynamicLinkRepository {
override suspend fun parseLink(uri: String): String? {
return dataSource.parseLink(uri)
}
}
interface DynamicLinkRepository {
suspend fun parseLink(uri: String): String?
}
class GetDynamicLinkUseCase(
private val dynamicLinkRepository: DynamicLinkRepository,
) {
suspend operator fun invoke(uri: String): String? {
return dynamicLinkRepository.parseLink(uri)
}
}
class AppDeepLinkLocalDataSource(
private val backgroundDispatcher: CoroutineDispatcher = Dispatchers.IO,
) {
companion object {
private const val RYDER_ID = "ryderId"
private const val PRICE = "price"
const val HOME = "moove://app/home"
const val FARE_LIST = "moove://app/fare_list"
class DeeplinkDataRepository(
private val localDataSource: AppDeepLinkLocalDataSource,
) : DeeplinkRepository {
override suspend fun getDeepLink(uri: String): DeepLink {
return localDataSource.getDeepLinkData(uri)
}
}
interface DeeplinkRepository {
suspend fun getDeepLink(uri: String): DeepLink
}
class GetDeeplinkUseCase(
private val deeplinkRepository: DeeplinkRepository,
) {
suspend operator fun invoke(uri: String): DeepLink {
val deepLink = deeplinkRepository.getDeepLink(parsedUri)
return deepLink
}
}