Skip to content

Commit

Permalink
#16 Add business logic for handling trakt sync history for movies
Browse files Browse the repository at this point in the history
  • Loading branch information
moallemi committed Jun 16, 2024
1 parent 150296b commit 8c0cf58
Show file tree
Hide file tree
Showing 11 changed files with 99 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package io.filmtime.data.model

data class TraktHistory(
val traktId: Int,
val isWatched: Boolean = false,
)
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,11 @@ package io.filmtime.data.trakt

import io.filmtime.data.model.GeneralError
import io.filmtime.data.model.Result
import io.filmtime.data.model.TraktHistory

interface TraktHistoryRepository {

suspend fun isWatched(tmdbId: Int): Result<TraktHistory, GeneralError>

suspend fun addToHistory(traktId: Int): Result<Unit, GeneralError>
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,29 @@
package io.filmtime.data.trakt

import io.filmtime.data.api.trakt.TraktSearchRemoteSource
import io.filmtime.data.api.trakt.TraktSyncRemoteSource
import io.filmtime.data.model.GeneralError
import io.filmtime.data.model.Result
import io.filmtime.data.model.TraktHistory
import javax.inject.Inject

class TraktHistoryRepositoryImpl @Inject constructor(
private val traktSyncRemoteSource: TraktSyncRemoteSource,
private val traktSearchRemoteSource: TraktSearchRemoteSource,
) : TraktHistoryRepository {

override suspend fun isWatched(tmdbId: Int): Result<TraktHistory, GeneralError> =
when (val traktIdResult = traktSearchRemoteSource.getByTmdbId(tmdbId)) {
is Result.Failure -> traktIdResult
is Result.Success -> {
val traktId = traktIdResult.data
traktSyncRemoteSource.getHistoryById(traktId)
.mapSuccess { isWatched ->
TraktHistory(traktId, isWatched)
}
}
}

override suspend fun addToHistory(traktId: Int): Result<Unit, GeneralError> {
return traktSyncRemoteSource.addToHistory(traktId)
}
Expand Down
1 change: 1 addition & 0 deletions domain/trakt/history/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,5 @@ android {
}

dependencies {
implementation(project(":data:trakt"))
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.filmtime.domain.trakt.history

import io.filmtime.data.model.GeneralError
import io.filmtime.data.model.Result

interface AddToHistoryUseCase {

suspend operator fun invoke(traktId: Int): Result<Unit, GeneralError>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.filmtime.domain.trakt.history

import io.filmtime.data.model.GeneralError
import io.filmtime.data.model.Result
import io.filmtime.data.trakt.TraktHistoryRepository
import javax.inject.Inject

internal class AddToHistoryUseCaseImpl @Inject constructor(
private val traktHistoryRepository: TraktHistoryRepository,
) : AddToHistoryUseCase {

override suspend fun invoke(traktId: Int): Result<Unit, GeneralError> =
traktHistoryRepository.addToHistory(traktId)
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.filmtime.domain.trakt.history

import io.filmtime.data.model.GeneralError
import io.filmtime.data.model.Result
import io.filmtime.data.model.TraktHistory

interface IsMovieWatchedUseCase {

suspend operator fun invoke(tmdbId: Int): Result<TraktHistory, GeneralError>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package io.filmtime.domain.trakt.history

import io.filmtime.data.model.GeneralError
import io.filmtime.data.model.Result
import io.filmtime.data.model.TraktHistory
import io.filmtime.data.trakt.TraktHistoryRepository
import javax.inject.Inject

internal class IsMovieWatchedUseCaseImpl @Inject constructor(
private val traktHistoryRepository: TraktHistoryRepository,
) : IsMovieWatchedUseCase {

override suspend fun invoke(tmdbId: Int): Result<TraktHistory, GeneralError> =
traktHistoryRepository.isWatched(tmdbId)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.filmtime.domain.trakt.history

import io.filmtime.data.model.GeneralError
import io.filmtime.data.model.Result

interface RemoveFromHistoryUseCase {

suspend operator fun invoke(id: String): Result<Boolean, GeneralError>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.filmtime.domain.trakt.history

import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent

@InstallIn(SingletonComponent::class)
@Module
internal abstract class TraktHistoryModule {

@Binds
internal abstract fun bindIsMovieWatchedUseCase(impl: IsMovieWatchedUseCaseImpl): IsMovieWatchedUseCase

@Binds
internal abstract fun bindAddToHistoryUseCase(impl: AddToHistoryUseCaseImpl): AddToHistoryUseCase
}

0 comments on commit 8c0cf58

Please sign in to comment.