Skip to content

Commit

Permalink
Convert to sealed interface
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisKruegerDev committed Jan 12, 2024
1 parent e415d9e commit 7edde62
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ import app.moviebase.tmdb.model.TmdbWatchProviderId

sealed interface DiscoverCategory {

object NowPlaying : DiscoverCategory
object Upcoming : DiscoverCategory
data object NowPlaying : DiscoverCategory
data object Upcoming : DiscoverCategory
data class Popular(val mediaType: TmdbMediaType) : DiscoverCategory
data class TopRated(val mediaType: TmdbMediaType) : DiscoverCategory
object AiringToday : DiscoverCategory
object OnTv : DiscoverCategory
data object AiringToday : DiscoverCategory
data object OnTv : DiscoverCategory
data class OnDvd(val mediaType: TmdbMediaType) : DiscoverCategory

data class Network(val network: Int) : DiscoverCategory {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,43 +31,43 @@ data class TmdbDiscoverFilter<T>(
}
}

sealed class TmdbDiscoverTimeRange {
sealed interface TmdbDiscoverTimeRange {

data class BetweenYears(
private val from: Int,
private val to: Int
) : TmdbDiscoverTimeRange() {
) : TmdbDiscoverTimeRange {
val firstDayOfYear: String get() = LocalDate(from, 1, 1).toString()
val lastDayOfYear: String get() = LocalDate(to, 12, 31).toString()
}

data class OneYear(
val year: Int
) : TmdbDiscoverTimeRange()
) : TmdbDiscoverTimeRange

data class Custom(
val firstDate: String? = null,
val lastDate: String? = null
) : TmdbDiscoverTimeRange()
) : TmdbDiscoverTimeRange
}

sealed class TmdbDiscover {
sealed interface TmdbDiscover {

abstract val sortOrder: TmdbSortOrder
abstract val voteAverageGte: Float?
abstract val voteAverageLte: Float?
abstract val voteCountGte: Int?
abstract val voteCountLte: Int?
val sortOrder: TmdbSortOrder
val voteAverageGte: Float?
val voteAverageLte: Float?
val voteCountGte: Int?
val voteCountLte: Int?

abstract val withGenres: List<String>
abstract val withoutGenres: List<String>
abstract val withWatchProviders: TmdbDiscoverFilter<Int>?
abstract val watchRegion: String? // ISO 3166-1 code
abstract val withWatchMonetizationTypes: List<TmdbWatchMonetizationType>
val withGenres: List<String>
val withoutGenres: List<String>
val withWatchProviders: TmdbDiscoverFilter<Int>?
val watchRegion: String? // ISO 3166-1 code
val withWatchMonetizationTypes: List<TmdbWatchMonetizationType>

abstract fun buildParameters(): Map<String, String?>
fun buildParameters(): Map<String, String?>

protected fun newParameterMap(): HashMap<String, String?> {
fun newParameterMap(): HashMap<String, String?> {
val params = HashMap<String, String?>()
voteAverageGte?.let {
params[DiscoverParam.VOTE_AVERAGE_GTE] = it.toString()
Expand Down Expand Up @@ -122,7 +122,7 @@ sealed class TmdbDiscover {
override val withWatchProviders: TmdbDiscoverFilter<Int>? = null,
override val watchRegion: String? = null,
override val withWatchMonetizationTypes: List<TmdbWatchMonetizationType> = emptyList()
) : TmdbDiscover() {
) : TmdbDiscover {

override fun buildParameters(): Map<String, String?> {
val params = newParameterMap()
Expand Down Expand Up @@ -174,7 +174,7 @@ sealed class TmdbDiscover {
override val withWatchProviders: TmdbDiscoverFilter<Int>? = null,
override val watchRegion: String? = null,
override val withWatchMonetizationTypes: List<TmdbWatchMonetizationType> = emptyList()
) : TmdbDiscover() {
) : TmdbDiscover {

override fun buildParameters(): Map<String, String?> {
val params = newParameterMap()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ interface TmdbRatingItem {
*/
@Polymorphic
@Serializable
sealed class TmdbMediaListItem : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia, TmdbRatingItem {
abstract val overview: String
abstract val genresIds: List<Int>
abstract val popularity: Float
abstract val originalLanguage: String
sealed interface TmdbMediaListItem : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia, TmdbRatingItem {
val overview: String
val genresIds: List<Int>
val popularity: Float
val originalLanguage: String
}

@Serializable
Expand All @@ -77,7 +77,7 @@ data class TmdbMovie(
@SerialName("vote_count") override val voteCount: Int,
@SerialName("video") val video: Boolean,
@SerialName("vote_average") override val voteAverage: Float
) : TmdbMediaListItem(), TmdbSearchable
) : TmdbMediaListItem, TmdbSearchable

@Serializable
data class TmdbMoviePageResult(
Expand Down Expand Up @@ -105,7 +105,7 @@ data class TmdbShow(
@SerialName("vote_count") override val voteCount: Int,
@SerialName("name") val name: String,
@SerialName("original_name") val originalName: String
) : TmdbMediaListItem(), TmdbSearchable
) : TmdbMediaListItem, TmdbSearchable

@Serializable
data class TmdbShowPageResult(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -224,22 +224,22 @@ data class TmdbPersonShowCredits(
@SerialName("crew") val crew: List<TmdbPersonCredit.Show.Crew>
)

sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia {
sealed interface TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia {

abstract val voteAverage: Float
abstract val voteCount: Int
abstract val overview: String
abstract val genresIds: List<Int>
abstract val popularity: Float
abstract val originalLanguage: String
val voteAverage: Float
val voteCount: Int
val overview: String
val genresIds: List<Int>
val popularity: Float
val originalLanguage: String

sealed class Movie : TmdbPersonCredit() {
sealed interface Movie : TmdbPersonCredit {

abstract val adult: Boolean
abstract val releaseDate: LocalDate?
abstract val originalTitle: String?
abstract val title: String?
abstract val video: Boolean
val adult: Boolean
val releaseDate: LocalDate?
val originalTitle: String?
val title: String?
val video: Boolean

@Serializable
data class Cast(
Expand All @@ -259,11 +259,10 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("video") override val video: Boolean = false,
@SerialName("vote_average") override val voteAverage: Float,
@SerialName("vote_count") override val voteCount: Int,

@SerialName("character") val character: String,
@SerialName("credit_id") val creditId: String,
@SerialName("order") val order: Int? = null
) : TmdbPersonCredit.Movie()
) : Movie

@Serializable
data class Crew(
Expand All @@ -283,19 +282,18 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("video") override val video: Boolean = false,
@SerialName("vote_count") override val voteCount: Int,
@SerialName("vote_average") override val voteAverage: Float,

@SerialName("credit_id") val creditId: String,
@SerialName("department") val department: String,
@SerialName("job") val job: String
) : TmdbPersonCredit.Movie()
) : Movie
}

sealed class Show : TmdbPersonCredit() {
sealed interface Show : TmdbPersonCredit {

abstract val firstAirDate: LocalDate?
abstract val originCountry: List<String>
abstract val name: String
abstract val originalName: String
val firstAirDate: LocalDate?
val originCountry: List<String>
val name: String
val originalName: String

@Serializable
data class Cast(
Expand All @@ -317,7 +315,7 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("character") val character: String,
@SerialName("credit_id") val creditId: String,
@SerialName("order") val order: Int? = null
) : TmdbPersonCredit.Show()
) : Show

@Serializable
data class Crew(
Expand All @@ -336,10 +334,9 @@ sealed class TmdbPersonCredit : TmdbAnyMedia, TmdbBackdropMedia, TmdbPosterMedia
@SerialName("vote_count") override val voteCount: Int,
@SerialName("name") override val name: String,
@SerialName("original_name") override val originalName: String,

@SerialName("credit_id") val creditId: String,
@SerialName("department") val department: String,
@SerialName("job") val job: String
) : TmdbPersonCredit.Show()
) : Show
}
}

0 comments on commit 7edde62

Please sign in to comment.