package Ġto mo . show case . data Ċ Ċ import Ġretrofit 2 . Call Ċ import Ġretrofit 2 . Callback Ċ import Ġretrofit 2 . Response Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . mos hi . M oshi Converter Factory Ċ import Ġretrofit 2 . http . GET Ċ import Ġretrofit 2 . http . Query Ċ import Ġjava . net . URL Ċ import Ġkotlin . math . round ToInt Ċ Ċ class ĠTM DB Service ( private Ġval ĠapiKey : ĠString ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġservice Ġ= ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠ Ġ. baseUrl (" https :// api . the mov ied b . org / 3 /") ĊĠĠĠĠĠĠĠ Ġ. add Converter Factory ( M oshi Converter Factory . create ()) ĊĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġ. create ( API :: class . java ) ĊĊĠĠĠ Ġfun Ġget Pop ular Movies ( on Success : Ġ( List < Movie >) Ġ-> ĠUnit , ĠonError : Ġ( Throwable ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġservice . get Pop ular Movies ( apiKey ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. enqueue ( object Ġ: ĠCallback < Pop ular Movies Response M oshi > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall < Pop ular Movies Response M oshi >, Ġt : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError ( t ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcall : ĠCall < Pop ular Movies Response M oshi >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠResponse < Pop ular Movies Response M oshi > ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( response . body () !!. results ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonSuccess ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body () !!. results . map Ġ{ Ġit . to Domain () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠString . t mdb Path To FullPath () Ġ= Ġ" https :// image . t mdb . org / t / p / w 5 0 0 " Ġ+ Ġthis Ċ Ċ private Ġdata Ġclass ĠPop ular Movies Response M oshi ( val Ġresults : ĠList < Pop ular Movie M oshi >) Ċ Ċ private Ġdata Ġclass ĠPop ular Movie M oshi ( ĊĠĠĠ Ġval Ġid : ĠInt , ĊĠĠĠ Ġval Ġtitle : ĠString , ĊĠĠĠ Ġval Ġvote _ average : ĠFloat , ĊĠĠĠ Ġval Ġoverview : ĠString , ĊĠĠĠ Ġval Ġposter _ path : ĠString , ĊĠĠĠ Ġval Ġback drop _ path : ĠString , ĊĠĠĠ Ġval Ġgenre _ ids : ĠList < Int >, ĊĠĠĠ Ġval Ġrelease _ date : ĠString Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġto Domain () Ġ= ĊĠĠĠĠĠĠĠ ĠMovie ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Id Ġ= ĠMovie Id ( id ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠMovie Title ( title ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscore Ġ= ĠMovie Score ( vote _ average . round ToInt ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverview Ġ= ĠMovie Overview ( overview ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Url Ġ= ĠPost er Url ( URL ( poster _ path . t mdb Path To FullPath ())), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Url Ġ= ĠBack drop Url ( URL ( backdrop _ path . t mdb Path To FullPath ())), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgen res Ġ= Ġgenre _ ids . genre Ids To Domain (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Date Ġ= Ġrelease _ date . parse Release Date () ĊĠĠĠĠĠĠĠ Ġ) Ċ } Ċ Ċ private Ġinterface ĠAPI Ġ{ ĊĠĠĠ Ġ@ GET (" movie / popular ") ĊĠĠĠ Ġfun Ġget Pop ular Movies (@ Query (" api _ key ") ĠapiKey : ĠString ): ĠCall < Pop ular Movies Response M oshi > Ċ } Ċ Ċ private Ġfun ĠList < Int >. genre Ids To Domain () Ġ= Ġmap NotNull (:: genre Id To Domain ) Ċ Ċ private Ġfun ĠString . parse Release Date (): ĠRelease Date Ġ{ ĊĠĠĠ Ġval Ġsplit Ġ= Ġsplit ("- ") ĊĠĠĠ Ġif Ġ( split . size Ġ!= Ġ 3 ) Ġthrow ĠIllegalArgumentException (" Release Ġdate Ġformat Ġunknown Ġfor : Ġ$ this ") ĊĊĠĠĠ Ġreturn ĠRelease Date ( year Ġ= Ġsplit [ 0 ]. toInt (), Ġmonth Ġ= Ġsplit [ 1 ]. toInt (), Ġday Ġ= Ġsplit [ 2 ]. toInt ()) Ċ } Ċ Ċ private Ġfun Ġgenre Id To Domain ( genre Id : ĠInt ) Ġ= Ġwhen Ġ( genre Id ) Ġ{ ĊĠĠĠĠ 2 8 Ġ-> ĠGen re . Action ĊĠĠĠĠ 1 2 Ġ-> ĠGen re . Adventure ĊĠĠĠĠ 1 6 Ġ-> ĠGen re . Animation ĊĠĠĠĠ 3 5 Ġ-> ĠGen re . Come dy ĊĠĠĠĠ 8 0 Ġ-> ĠGen re . Cri me ĊĠĠĠĠ 9 9 Ġ-> ĠGen re . Document ary ĊĠĠĠĠ 1 8 Ġ-> ĠGen re . D ram a ĊĠĠĠĠ 1 0 7 5 1 Ġ-> ĠGen re . Family ĊĠĠĠĠ 1 4 Ġ-> ĠGen re . F antasy ĊĠĠĠĠ 3 6 Ġ-> ĠGen re . History ĊĠĠĠĠ 2 7 Ġ-> ĠGen re . Hor ror ĊĠĠĠĠ 1 0 4 0 2 Ġ-> ĠGen re . Music ĊĠĠĠĠ 9 6 4 8 Ġ-> ĠGen re . M yst ery ĊĠĠĠĠ 1 0 7 4 9 Ġ-> ĠGen re . Rom ance ĊĠĠĠĠ 8 7 8 Ġ-> ĠGen re . S ci Fi ĊĠĠĠĠ 1 0 7 7 0 Ġ-> ĠGen re . TV ĊĠĠĠĠ 5 3 Ġ-> ĠGen re . Th r iller ĊĠĠĠĠ 1 0 7 5 2 Ġ-> ĠGen re . War ĊĠĠĠĠ 3 7 Ġ-> ĠGen re . West ern ĊĠĠĠ Ġelse Ġ-> Ġnull Ċ }