UpdateFavoriteStatusUseCase.kt

package com.gyleedev.githubsearch.domain.usecase

import com.gyleedev.githubsearch.domain.model.UpdateFavoriteResult
import com.gyleedev.githubsearch.domain.model.UserModel
import com.gyleedev.githubsearch.domain.repository.GitHubRepository
import javax.inject.Inject

class UpdateFavoriteStatusUseCase @Inject constructor(
    private val repository: GitHubRepository,
) {
    suspend operator fun invoke(user: UserModel): UpdateFavoriteResult = try {
        val updateUser = user.copy(favorite = !user.favorite)
        val updatedId = repository.upsertUser(updateUser)
        if (updateUser.id == updatedId) {
            UpdateFavoriteResult.Success
        } else {
            UpdateFavoriteResult.Fail
        }
    } catch (e: Exception) {
        UpdateFavoriteResult.Fail
    }
}