🚧 prepare class for the movie details request

features/api/requests/2
Jordan ARTZET 2 years ago
parent 724e6cb75c
commit 76130b9358

@ -1,7 +1,7 @@
package fr.iut.pm.movieapplication.api
import fr.iut.pm.movieapplication.api.dtos.MovieDTO
import fr.iut.pm.movieapplication.api.dtos.MovieResultDTO
import fr.iut.pm.movieapplication.api.dtos.MovieDetailsDTO
import fr.iut.pm.movieapplication.api.dtos.PopularDTO
import fr.iut.pm.movieapplication.utils.Constants.Companion.API_KEY
import retrofit2.Call
@ -25,18 +25,25 @@ interface MovieApplicationAPI {
@GET("movie/top_rated")
suspend fun getTopRatedMovies(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response<PopularDTO>
// Movie details
@GET("movie/{movie_id}")
fun getMovieDetails(@Path("movie_id") movieId : Int, @Query("api_key") apiKey: String = API_KEY) : Response<MovieDetailsDTO>
// TvShow
@GET("tv/popular")
suspend fun getPopularTvShow(@Query("api_key") apiKey : String = API_KEY, @Query("page") page : Int = 1) : Response<PopularDTO>
suspend fun getPopularTvShows(@Query("api_key") apiKey : String = API_KEY, @Query("page") page : Int = 1) : Response<PopularDTO>
@GET("tv/airing_today")
suspend fun getAiringTodayTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response<PopularDTO>
@GET("tv/on_the_air")
suspend fun getTvOnTheAirTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response<PopularDTO>
@GET("tv/top_rated")
suspend fun getTopRatedTvShows(@Query("api_key") apiKey: String = API_KEY, @Query("page") page : Int = 1) : Response<PopularDTO>
@GET("trending/{media_type}/{time_window}")
fun getTrending(@Path("media_type") mediaType : String = "all", @Path("time_window") timeWindow : String = "day", @Query("api_key") apiKey: String = API_KEY ) : Call<PopularDTO>
@GET("movie/{movie_id")
fun getMovieDetails(@Path("movie_id") movieId : Int, @Query("api_key") apiKey: String = API_KEY) : Call<MovieDTO>
@GET("tv/{tv_id}")
fun getShowDetails(@Path("tv_id") tvId : Int, @Query("api_key") apiKey: String = API_KEY)

@ -0,0 +1,8 @@
package fr.iut.pm.movieapplication.api.dtos
data class GenreDTO(
val id : Int,
val name : String
) {
}

@ -4,23 +4,23 @@ import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@Json(name = "results")
data class MediaResultDTO(
open class MediaResultDTO(
@Json(name = "poster_path")
val posterPath : String?,
val adult : Boolean?,
val overview : String,
val overview : String? = null,
@Json(name = "first_air_date")
val firstAirDate : String?,
val firstAirDate : String? = null,
@Json(name = "release_date")
val releaseDate : String?,
val releaseDate : String? = null,
@Json(name = "origin_country")
val originCountry : List<String>?,
@Json(name = "genre_ids")
val genreIds : List<Int>,
val originCountry : List<String>? = null,
// @Json(name = "genre_ids")
// val genreIds : List<Int>,
val id : Int,
@Json(name = "original_title")
val originalTitle : String?,
val originalTitle : String? = null,
@Json(name = "original_language")
val originalLanguage : String,
val title : String?,
@ -29,14 +29,14 @@ data class MediaResultDTO(
val popularity : Double,
@Json(name = "vote_count")
val voteCount : Int,
val video : Boolean?,
//val video : Boolean?,
@Json(name = "vote_average")
val voteAverage : Double,
val name: String?,
val name: String? = null,
@Json(name = "original_name")
val originalName : String?,
val originalName : String? = null,
@Json(name = "media_type")
val mediaType : String?
val mediaType : String? = null
) {
}

@ -0,0 +1,48 @@
package fr.iut.pm.movieapplication.api.dtos
import fr.iut.pm.movieapplication.model.Genre
class MovieDetailsDTO(
adult : Boolean?,
backdropPath : String?,
val budget : Int,
val genres : List<GenreDTO>,
val homepage : String?,
id : Int,
originalLanguage : String,
originalTitle : String,
overview : String?,
popularity : Double,
posterPath : String?,
//prod companies
//prod countries
releaseDate : String?,
val revenue : Int,
//spoken language
val status : String,
title : String,
voteAverage : Double,
voteCount : Int
) : MediaResultDTO(
adult = adult,
backdropPath = backdropPath,
id = id,
originalLanguage = originalLanguage,
originalTitle = originalTitle,
overview = overview,
popularity = popularity,
posterPath = posterPath,
releaseDate = releaseDate,
title = title,
voteAverage = voteAverage,
voteCount = voteCount,
) {
}

@ -2,7 +2,7 @@ package fr.iut.pm.movieapplication.api.dtos
import com.squareup.moshi.Json
open class TvShowDTO(
open class TvShowDetailsDTO(
@Json(name = "poster_path")
open val posterPath: String?,

@ -7,7 +7,7 @@ data class MediaResult(
val overview: String,
val releaseDate: String,
val originCountry: List<String>? = null,
val genreIds: List<Int>,
// val genreIds: List<Int>,
val id: Int,
val originalTitle: String,
val originalLanguage: String,

@ -5,7 +5,7 @@ open class Movie(
open val adult: Boolean,
open val overview: String,
open val releaseDate: String,
open val genreIds: List<Int>,
// open val genreIds: List<Int>,
open val id: Int,
open val originalTitle: String,
open val originalLanguage: String,
@ -13,8 +13,8 @@ open class Movie(
open val backdropPath: String?,
open val popularity: Double,
open val voteCount: Int,
open val video: Boolean?,
open val voteAverage: Double,
//open val video: Boolean?,
open val voteAverage: Double
)
{
override fun equals(other: Any?): Boolean {
@ -27,7 +27,7 @@ open class Movie(
if (adult != other.adult) return false
if (overview != other.overview) return false
if (releaseDate != other.releaseDate) return false
if (genreIds != other.genreIds) return false
// if (genreIds != other.genreIds) return false
if (id != other.id) return false
if (originalTitle != other.originalTitle) return false
if (originalLanguage != other.originalLanguage) return false
@ -35,7 +35,6 @@ open class Movie(
if (backdropPath != other.backdropPath) return false
if (popularity != other.popularity) return false
if (voteCount != other.voteCount) return false
if (video != other.video) return false
if (voteAverage != other.voteAverage) return false
return true
@ -46,7 +45,7 @@ open class Movie(
result = 31 * result + adult.hashCode()
result = 31 * result + overview.hashCode()
result = 31 * result + releaseDate.hashCode()
result = 31 * result + genreIds.hashCode()
// result = 31 * result + genreIds.hashCode()
result = 31 * result + id
result = 31 * result + originalTitle.hashCode()
result = 31 * result + originalLanguage.hashCode()
@ -54,7 +53,6 @@ open class Movie(
result = 31 * result + (backdropPath?.hashCode() ?: 0)
result = 31 * result + popularity.hashCode()
result = 31 * result + voteCount
result = 31 * result + (video?.hashCode() ?: 0)
result = 31 * result + voteAverage.hashCode()
return result
}

@ -10,7 +10,7 @@ data class MovieDetails(
override val adult: Boolean,
override val overview: String,
override val releaseDate: String,
override val genreIds : List<Int>,
// override val genreIds : List<Int>,
override val id: Int,
override val originalTitle: String,
override val originalLanguage: String,
@ -18,7 +18,7 @@ data class MovieDetails(
override val backdropPath: String?,
override val popularity: Double,
override val voteCount: Int,
override val video: Boolean?,
// override val video: Boolean?,
override val voteAverage: Double,
val mediaType: String,
@ -35,7 +35,7 @@ data class MovieDetails(
adult,
overview,
releaseDate,
genreIds,
// genreIds,
id,
originalTitle,
originalLanguage,
@ -43,7 +43,7 @@ data class MovieDetails(
backdropPath,
popularity,
voteCount,
video,
// video,
voteAverage) {

@ -9,7 +9,7 @@ open class TvShow(
open val overview: String,
open val firstAirDate: String?,
open val originCountry: List<String>,
open val genreIds: List<Int>,
// open val genreIds: List<Int>,
open val originalLanguage: String,
open val voteCount: Int,
open val name: String,
@ -32,7 +32,7 @@ open class TvShow(
if (overview != other.overview) return false
if (firstAirDate != other.firstAirDate) return false
if (originCountry != other.originCountry) return false
if (genreIds != other.genreIds) return false
// if (genreIds != other.genreIds) return false
if (originalLanguage != other.originalLanguage) return false
if (voteCount != other.voteCount) return false
if (name != other.name) return false
@ -51,7 +51,7 @@ open class TvShow(
result = 31 * result + overview.hashCode()
result = 31 * result + (firstAirDate?.hashCode() ?: 0)
result = 31 * result + originCountry.hashCode()
result = 31 * result + genreIds.hashCode()
// result = 31 * result + genreIds.hashCode()
result = 31 * result + originalLanguage.hashCode()
result = 31 * result + voteCount
result = 31 * result + name.hashCode()

@ -7,11 +7,71 @@ import fr.iut.pm.movieapplication.utils.MediaResultMapper
class TvShowRepository {
suspend fun getPopularTvShow(page : Int = 1 ) : List<TvShow> {
suspend fun getPopularTvShows(page : Int = 1 ) : List<TvShow> {
val listMovie : MutableList<TvShow> = mutableListOf()
val response = RetrofitInstance.api.getPopularTvShow(page = page)
val response = RetrofitInstance.api.getPopularTvShows(page = page)
if (response.isSuccessful) {
Log.d("List :", response.body().toString())
val popularDTO = response.body()
val listMoviesDTO = popularDTO?.results
listMoviesDTO?.forEach {
val tvShow = MediaResultMapper.mapToTvShow(it)
listMovie.add(tvShow)
Log.d("Movie ", tvShow.name )
}
}
else Log.d("Error failure", response.message())
return listMovie
}
suspend fun getAiringTodayTvShows(page : Int = 1 ) : List<TvShow> {
val listMovie : MutableList<TvShow> = mutableListOf()
val response = RetrofitInstance.api.getAiringTodayTvShows(page = page)
if (response.isSuccessful) {
Log.d("List :", response.body().toString())
val popularDTO = response.body()
val listMoviesDTO = popularDTO?.results
listMoviesDTO?.forEach {
val tvShow = MediaResultMapper.mapToTvShow(it)
listMovie.add(tvShow)
Log.d("Movie ", tvShow.name )
}
}
else Log.d("Error failure", response.message())
return listMovie
}
suspend fun getTvOnTheAirTvShows(page : Int = 1 ) : List<TvShow> {
val listMovie : MutableList<TvShow> = mutableListOf()
val response = RetrofitInstance.api.getTvOnTheAirTvShows(page = page)
if (response.isSuccessful) {
Log.d("List :", response.body().toString())
val popularDTO = response.body()
val listMoviesDTO = popularDTO?.results
listMoviesDTO?.forEach {
val tvShow = MediaResultMapper.mapToTvShow(it)
listMovie.add(tvShow)
Log.d("Movie ", tvShow.name )
}
}
else Log.d("Error failure", response.message())
return listMovie
}
suspend fun getTopRatedTvShows(page : Int = 1 ) : List<TvShow> {
val listMovie : MutableList<TvShow> = mutableListOf()
val response = RetrofitInstance.api.getTopRatedTvShows(page = page)
if (response.isSuccessful) {
Log.d("List :", response.body().toString())
val popularDTO = response.body()

@ -27,7 +27,16 @@ class TvShowVM : ViewModel() {
currentPage = 1
when(currentFilter) {
"Populaires" -> viewModelScope.launch {
tvShowLiveData.postValue(tvShowRepository.getPopularTvShow())
tvShowLiveData.postValue(tvShowRepository.getPopularTvShows())
}
"Diffusées aujourd\'hui" -> viewModelScope.launch {
tvShowLiveData.postValue(tvShowRepository.getAiringTodayTvShows())
}
"En cours de diffusion" -> viewModelScope.launch {
tvShowLiveData.postValue(tvShowRepository.getTvOnTheAirTvShows())
}
"Les mieux notées" -> viewModelScope.launch {
tvShowLiveData.postValue(tvShowRepository.getTopRatedTvShows())
}
}
}

@ -14,10 +14,10 @@ object MediaResultMapper {
id = mediaResultDTO.id,
backdropPath = mediaResultDTO.backdropPath ?: "",
voteAverage = mediaResultDTO.voteAverage,
overview = mediaResultDTO.overview,
overview = mediaResultDTO.overview ?: "",
firstAirDate = mediaResultDTO.firstAirDate,
originCountry = mediaResultDTO.originCountry!!,
genreIds = mediaResultDTO.genreIds,
// genreIds = mediaResultDTO.genreIds,
originalLanguage = mediaResultDTO.originalLanguage,
voteCount = mediaResultDTO.voteCount,
name = mediaResultDTO.name!!,
@ -29,9 +29,9 @@ object MediaResultMapper {
return Movie(
posterPath = mediaResultDTO.posterPath,
adult = mediaResultDTO.adult!!,
overview = mediaResultDTO.overview,
overview = mediaResultDTO.overview ?: "",
releaseDate = mediaResultDTO.releaseDate ?: "",
genreIds = mediaResultDTO.genreIds,
// genreIds = mediaResultDTO.genreIds,
id = mediaResultDTO.id,
originalTitle = mediaResultDTO.originalTitle!!,
originalLanguage = mediaResultDTO.originalLanguage,
@ -39,7 +39,7 @@ object MediaResultMapper {
backdropPath = mediaResultDTO.backdropPath,
popularity = mediaResultDTO.popularity,
voteCount = mediaResultDTO.voteCount,
video = mediaResultDTO.video,
//video = mediaResultDTO.video,
voteAverage = mediaResultDTO.voteAverage
)
}
@ -48,10 +48,10 @@ object MediaResultMapper {
return MediaResult(
posterPath = mediaResultDTO.posterPath,
adult = mediaResultDTO.adult!!,
overview = mediaResultDTO.overview,
overview = mediaResultDTO.overview ?: "",
releaseDate = mediaResultDTO.releaseDate ?: mediaResultDTO.firstAirDate!! ,
originCountry = mediaResultDTO.originCountry,
genreIds = mediaResultDTO.genreIds,
// genreIds = mediaResultDTO.genreIds,
id = mediaResultDTO.id,
originalTitle = mediaResultDTO.originalTitle ?: mediaResultDTO.originalName!!, //if it's not a movie also it's a tvshow
originalLanguage = mediaResultDTO.originalLanguage,

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>

@ -13,7 +13,9 @@
<string name="home_page_popularity_section_title">Populaires</string>
<string name="home_page_free_section_title">Gratuits</string>
<string name="section_nested_scroll_view">section_nested_scroll_view</string>
<!-- Filter name for movie category -->
<!-- Category page -->
<string-array name="movie_filter">
<item>Populaires</item>

Loading…
Cancel
Save