package com.suno.android.common_data.use_case import com.suno.android.common_core_utils.SunoLogger import com.suno.android.common_data.user.UserService import com.suno.android.common_networking.remote.session.User import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.joinAll import kotlinx.coroutines.launch import javax.inject.Inject class SetUserToServicesUseCase @Inject constructor( loggerFactory: SunoLogger.Factory, private val userServices: Set<@JvmSuppressWildcards UserService>, ) { private val logger = loggerFactory.create(this@SetUserToServicesUseCase) suspend operator fun invoke( user: User?, ) = coroutineScope { userServices.map { service -> launch { runCatching { service.setUserInfo(user) }.onFailure { error -> logger.e(error) } } }.joinAll() } }