-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2228948
commit 40de580
Showing
13 changed files
with
212 additions
and
71 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
32 changes: 30 additions & 2 deletions
32
app/src/main/java/com/pramodbharti/filmo/data/network/MoviesApiService.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,38 @@ | ||
package com.pramodbharti.filmo.data.network | ||
|
||
import com.pramodbharti.filmo.data.DISCOVER_MOVIES | ||
import com.pramodbharti.filmo.data.network.MoviesApiService.Companion.TRENDING_MOVIES | ||
import com.pramodbharti.filmo.data.network.models.MovieResponse | ||
import com.pramodbharti.filmo.data.network.models.MoviesResponse | ||
import retrofit2.http.GET | ||
import retrofit2.http.Path | ||
import retrofit2.http.Query | ||
|
||
interface MoviesApiService { | ||
@GET(DISCOVER_MOVIES) | ||
suspend fun getDiscoverMovies(): MoviesResponse | ||
@GET(TRENDING_MOVIES) | ||
suspend fun getTrendingMovies(@Query("page") page: Int = 1): MoviesResponse | ||
|
||
@GET(NOW_PLAYING_MOVIES) | ||
suspend fun getNowPlayingMovies(@Query("page") page: Int = 1): MoviesResponse | ||
|
||
@GET(POPULAR_MOVIES) | ||
suspend fun getPopularMovies(@Query("page") page: Int = 1): MoviesResponse | ||
|
||
@GET(TOP_RATED_MOVIES) | ||
suspend fun getTopRatedMovies(@Query("page") page: Int = 1): MoviesResponse | ||
|
||
@GET(UPCOMING_MOVIES) | ||
suspend fun getUpcomingMovies(@Query("page") page: Int = 1): MoviesResponse | ||
|
||
@GET(MOVIE_DETAILS) | ||
suspend fun getMovieDetails(@Path("movie_id") movieId: Int): MovieResponse | ||
|
||
companion object { | ||
const val TRENDING_MOVIES = "trending/movie/day" | ||
const val NOW_PLAYING_MOVIES = "movie/now_playing" | ||
const val POPULAR_MOVIES = "movie/popular" | ||
const val TOP_RATED_MOVIES = "movie/top_rated" | ||
const val UPCOMING_MOVIES = "movie/upcoming" | ||
const val MOVIE_DETAILS = "movie/{movie_id}" | ||
} | ||
} |
8 changes: 7 additions & 1 deletion
8
app/src/main/java/com/pramodbharti/filmo/data/repositories/MoviesRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,13 @@ | ||
package com.pramodbharti.filmo.data.repositories | ||
|
||
import com.pramodbharti.filmo.data.network.models.MovieResponse | ||
import com.pramodbharti.filmo.data.network.models.MoviesResponse | ||
|
||
interface MoviesRepository { | ||
suspend fun getDiscoverMovies(): MoviesResponse | ||
suspend fun getTrendingMovies(): MoviesResponse | ||
suspend fun getNowPlayingMovies(): MoviesResponse | ||
suspend fun getPopularMovies(): MoviesResponse | ||
suspend fun getUpcomingMovies(): MoviesResponse | ||
suspend fun getTopRatedMovies(): MoviesResponse | ||
suspend fun getMovieDetails(movieId: Int): MovieResponse | ||
} |
44 changes: 42 additions & 2 deletions
44
app/src/main/java/com/pramodbharti/filmo/data/repositories/NetworkMoviesRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,47 @@ | ||
package com.pramodbharti.filmo.data.repositories | ||
|
||
import com.pramodbharti.filmo.data.network.MoviesApiService | ||
import com.pramodbharti.filmo.data.network.models.MovieResponse | ||
import com.pramodbharti.filmo.data.network.models.MoviesResponse | ||
import kotlinx.coroutines.CoroutineDispatcher | ||
import kotlinx.coroutines.Dispatchers | ||
import kotlinx.coroutines.withContext | ||
|
||
class NetworkMoviesRepository(private val moviesApiService: MoviesApiService, private val dispatcher: CoroutineDispatcher) : MoviesRepository { | ||
override suspend fun getTrendingMovies(): MoviesResponse { | ||
return withContext(dispatcher) { | ||
moviesApiService.getTrendingMovies() | ||
} | ||
} | ||
|
||
override suspend fun getNowPlayingMovies(): MoviesResponse { | ||
return withContext(dispatcher) { | ||
moviesApiService.getNowPlayingMovies() | ||
} | ||
} | ||
|
||
override suspend fun getPopularMovies(): MoviesResponse { | ||
return withContext(dispatcher) { | ||
moviesApiService.getPopularMovies() | ||
} | ||
} | ||
|
||
override suspend fun getUpcomingMovies(): MoviesResponse { | ||
return withContext(dispatcher) { | ||
moviesApiService.getUpcomingMovies() | ||
} | ||
} | ||
|
||
override suspend fun getTopRatedMovies(): MoviesResponse { | ||
return withContext(dispatcher) { | ||
moviesApiService.getTopRatedMovies() | ||
} | ||
} | ||
|
||
override suspend fun getMovieDetails(movieId: Int): MovieResponse { | ||
return withContext(dispatcher) { | ||
moviesApiService.getMovieDetails(movieId) | ||
} | ||
} | ||
|
||
class NetworkMoviesRepository(private val moviesApiService: MoviesApiService) : MoviesRepository { | ||
override suspend fun getDiscoverMovies() = moviesApiService.getDiscoverMovies() | ||
} |
42 changes: 42 additions & 0 deletions
42
app/src/main/java/com/pramodbharti/filmo/domain/MoviesUseCase.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
package com.pramodbharti.filmo.domain | ||
|
||
import com.pramodbharti.filmo.R | ||
import com.pramodbharti.filmo.data.network.models.MovieResponse | ||
import com.pramodbharti.filmo.data.repositories.MoviesRepository | ||
import com.pramodbharti.filmo.ui.models.MediaItem | ||
import com.pramodbharti.filmo.ui.models.Movies | ||
import kotlinx.coroutines.async | ||
import kotlinx.coroutines.coroutineScope | ||
|
||
class MoviesUseCase(private val moviesRepository: MoviesRepository) { | ||
suspend fun getMovies(): Movies { | ||
return coroutineScope { | ||
val trendingMovies = | ||
async { moviesRepository.getTrendingMovies().results.take(7).map { it.toMovieItem() } } | ||
val popularMovies = | ||
async { moviesRepository.getPopularMovies().results.map { it.toMovieItem() } } | ||
val nowPlaying = | ||
async { moviesRepository.getNowPlayingMovies().results.map { it.toMovieItem() } } | ||
val topRatedMovies = | ||
async { moviesRepository.getTopRatedMovies().results.map { it.toMovieItem() } } | ||
val upcomingMovies = | ||
async { moviesRepository.getUpcomingMovies().results.map { it.toMovieItem() } } | ||
Movies( | ||
trendingMovies.await(), | ||
nowPlaying.await(), | ||
popularMovies.await(), | ||
topRatedMovies.await(), | ||
upcomingMovies.await() | ||
) | ||
} | ||
} | ||
} | ||
|
||
private fun MovieResponse.toMovieItem(): MediaItem = | ||
MediaItem( | ||
id = id, | ||
title = title, | ||
poster = posterPath, | ||
backdrop = backdropPath, | ||
releaseDate = releaseDate | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.