package com.suno.android.common_data.repos import arrow.core.Either import arrow.core.flatMap import com.suno.android.common_core_utils.SunoLogger import com.suno.android.common_core_utils.model.UserHandle import com.suno.android.common_data.metadata.RecommendationMetadata import com.suno.android.common_data.metadata.toRemoteMetadata import com.suno.android.common_networking.extensions.toThrowable import com.suno.android.common_networking.remote.entities.RemoteHideCreatorBody import com.suno.android.common_networking.remote.recommendations.RecommendationsService import javax.inject.Inject interface RecommendationsRepository { suspend fun toggleHideCreator( creatorHandle: UserHandle, contentType: HideCreatorContentType, hide: Boolean, recommendationMetadata: RecommendationMetadata?, ): Either } class DefaultRecommendationsRepository @Inject constructor( loggerFactory: SunoLogger.Factory, private val recommendationsService: RecommendationsService, ) : RecommendationsRepository { private val logger = loggerFactory.create(this@DefaultRecommendationsRepository) override suspend fun toggleHideCreator( creatorHandle: UserHandle, contentType: HideCreatorContentType, hide: Boolean, recommendationMetadata: RecommendationMetadata?, ): Either { val requestBody = RemoteHideCreatorBody( userHandle = creatorHandle.handle, contentType = contentType.value, unhide = !hide, recommendationMetadata = recommendationMetadata?.toRemoteMetadata(), ) return recommendationsService.hideCreator(requestBody) .mapLeft { error -> val throwable = error.toThrowable() logger.e(throwable) { "Failed to toggle hide creator" } throwable } .flatMap { response -> if (response.success) { Either.Right(Unit) } else { val throwable = Throwable("API returned success=false for hide creator request") logger.e(throwable) Either.Left(throwable) } } } } enum class HideCreatorContentType( val value: String, ) { Hook("HOOK"), }