Skip to content

Instantly share code, notes, and snippets.

@raamcosta
Last active November 30, 2021 17:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save raamcosta/75d73a8ac053d489a9ebafedf73d7912 to your computer and use it in GitHub Desktop.
Save raamcosta/75d73a8ac053d489a9ebafedf73d7912 to your computer and use it in GitHub Desktop.
class PostNewDeckUseCase(
private val decksRepository: DecksRepository
) {
suspend operator fun invoke(newDeck: Deck) : Result<Unit, PostNewDeckUseCaseError> {
if (newDeck.cards.size != 60) {
return Failure(InvalidDeckSizeError)
}
//...
return decksRepository.createNewDeck(newDeck)
}
}
class DecksRepository(
private val someMagicTheGatheringApi : MagicTheGatheringApi
) {
suspend fun createNewDeck(newDeck : Deck) : Result<Unit, CreateNewDeckError> = withContect(Dispatchers.IO) {
someMagicTheGatheringApi.postNewDeck(newDeck.mapToDto())
//catch api exceptions and map them to `MagicTheGatheringApiCallError`
}
}
sealed interface PostNewDeckUseCaseError
object InvalidDeckSizeError: PostNewDeckUseCaseError
sealed interface CreateNewDeckError: PostNewDeckUseCaseError
object DeckAlreadyExistsError : CreateNewDeckError
sealed interface ApiCallError : GetSomethingUseCaseError, UpdateSomethingUseCaseError, CreateNewDeckError
//...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment