package Ġstats . local . double Ċ Ċ import Ġdatabase . movies . Movie Ċ import Ġdatabase . movies . Movie Details Ċ import Ġdatabase . movies . Movie Details With Rating Ċ import Ġdatabase . movies . Movie Queries Ċ import Ġdatabase . movies . Select Suggest ed Ċ import Ġdatabase . stats . Stat Type Ċ import Ġentities . Int Id Ċ import Ġentities . T mdb Id Ċ import Ġentities . model . Name Ċ import Ġentities . model . Video Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ Ċ fun Ġmock Movie Queries ( ĊĠĠĠ Ġmovies : ĠMutable List < Movie >, ĊĠĠĠ Ġmovie Act ors : ĠList < Pair < Int Id , ĠInt Id >>, ĊĠĠĠ Ġmovie Gen res : ĠList < Pair < Int Id , ĠInt Id >>, ĊĠĠĠ Ġmovie Videos : ĠList < Pair < Int Id , ĠInt Id >>, ĊĠĠĠ Ġactors : ĠMutable List < Pair < T mdb Id , ĠName >>, ĊĠĠĠ Ġgen res : ĠMutable List < Pair < T mdb Id , ĠName >>, ĊĠĠĠ Ġstats : ĠList < Triple < Int Id , ĠStat Type , ĠInt >>, ĊĠĠĠ Ġsuggestions : ĠSet < Int Id >, ĊĠĠĠ Ġvideos : ĠList < Video >, ĊĠĠĠ Ġwatch list : ĠList < Int Id > Ċ ): ĠMovie Queries Ġ= Ġmock k Ġ{ ĊĊĠĠĠ Ġevery Ġ{ ĊĠĠĠĠĠĠĠ Ġinsert ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt mdb Id Ġ= ĠT mdb Id ( any ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠName ( any ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġany < Int >(). to UInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage BaseUrl Ġ= Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Path Ġ= Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Path Ġ= Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvote Average Ġ= Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvote Count Ġ= Ġany (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverview Ġ= Ġany () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Arg Ġ= Ġfirst Arg < Int >() ĊĠĠĠĠĠĠĠ Ġval Ġt mdb Id Arg Ġ= ĠT mdb Id ( id Arg ) ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġmovies . indexOf Ġ{ Ġit . t mdb Id Ġ== Ġt mdb Id Arg Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmovie Ġ= ĠMovie ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠInt Id ( id Arg ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġt mdb Id Ġ= Ġt mdb Id Arg , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= ĠName ( second Arg ()), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġthird Arg < Int >(). to UInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage BaseUrl Ġ= Ġarg ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposter Path Ġ= Ġarg ( 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Path Ġ= Ġarg ( 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvote Average Ġ= Ġarg ( 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvote Count Ġ= Ġarg ( 7 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverview Ġ= Ġarg ( 8 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġmovies . insert ( index , Ġmovie ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġevery Ġ{ Ġselect Id By T mdb Id ( T mdb Id ( any ())) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt mdb Id Arg Ġ= ĠT mdb Id ( first Arg ()) ĊĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġexecute As One () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Id ( movies . indexOf Ġ{ Ġit . t mdb Id Ġ== Ġt mdb Id Arg Ġ} !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġexecute As One OrNull () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies . indexOf Ġ{ Ġit . t mdb Id Ġ== Ġt mdb Id Arg Ġ} ?. let (:: Int Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġevery Ġ{ Ġselect All R ated () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġexecute As List () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies . flatMap Indexed Ġ{ Ġindex : ĠInt , Ġmovie : ĠMovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Id Ġ= ĠInt Id ( index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Act ors Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Act ors . filter Ġ{ Ġ( m Id , Ġ_) Ġ-> Ġm Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġactors [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Gen res Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Gen res . filter Ġ{ Ġ( m Id , Ġ_) Ġ-> Ġm Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġgen res [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Videos Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Videos . filter Ġ{ Ġ( m Id , Ġ_) Ġ-> Ġm Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġvideos [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Empty Ġ{ ĠlistOf ( null ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Act ors . flatMap Ġ{ Ġactor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Gen res . flatMap Ġ{ Ġgenre Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Videos . map Ġ{ Ġvideo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Details With Rating ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmovie Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt mdb Id Ġ= Ġmovie . t mdb Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġmovie . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġmovie . year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage BaseUrl Ġ= Ġmovie . image BaseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Path Ġ= Ġmovie . poster Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Path Ġ= Ġmovie . backdrop Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Average Ġ= Ġmovie . vote Average , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Count Ġ= Ġmovie . vote Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview Ġ= Ġmovie . overview , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor T mdb Id Ġ= Ġactor . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor Name Ġ= Ġactor . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre T mdb Id Ġ= Ġgenre . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Name Ġ= Ġgenre . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo T mdb Id Ġ= Ġvideo ?. id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Name Ġ= Ġvideo ?. title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Site Ġ= Ġvideo ?. site , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Key Ġ= Ġvideo ?. key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Type Ġ= Ġvideo ?. type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Size Ġ= Ġvideo ?. size ?. to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrating Ġ= Ġstats . find Ġ{ Ġ( stat Id , Ġtype , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstat Id Ġ== Ġmovie Id Ġ&& Ġtype Ġ== ĠStat Type . MOV IE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ?. third Ġ?: Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġevery Ġ{ Ġselect Movie Rating By T mdb Id ( T mdb Id ( any ())) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt mdb Id Arg Ġ= ĠT mdb Id ( first Arg ()) ĊĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġexecute As One OrNull () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠInt Id ( movies . indexOf Ġ{ Ġt mdb Id Arg Ġ== Ġit . t mdb Id Ġ} !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats . find Ġ{ Ġ( stat Id , Ġtype , Ġ_) Ġ-> Ġstat Id Ġ== Ġid Ġ&& Ġtype Ġ== ĠStat Type . MOV IE Ġ} ?. third ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġevery Ġ{ Ġselect All In Watch list () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġexecute As List () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies . filter Ġ{ Ġmovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Id ( movies . indexOf Ġ{ Ġmovie . t mdb Id Ġ== Ġit . t mdb Id Ġ} !! ) Ġin Ġwatch list ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatMap Indexed Ġ{ Ġindex : ĠInt , Ġmovie : ĠMovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Id Ġ= ĠInt Id ( index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Act ors Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Act ors . filter Ġ{ Ġ( movie Id , Ġ_) Ġ-> Ġmovie Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġactors [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Gen res Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Gen res . filter Ġ{ Ġ( movie Id , Ġ_) Ġ-> Ġmovie Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġgen res [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Videos Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Videos . filter Ġ{ Ġ( m Id , Ġ_) Ġ-> Ġm Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġvideos [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Empty Ġ{ ĠlistOf ( null ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Act ors . flatMap Ġ{ Ġactor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Gen res . flatMap Ġ{ Ġgenre Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Videos . map Ġ{ Ġvideo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMovie Details ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmovie Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt mdb Id Ġ= Ġmovie . t mdb Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġmovie . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġmovie . year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage BaseUrl Ġ= Ġmovie . image BaseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Path Ġ= Ġmovie . poster Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Path Ġ= Ġmovie . backdrop Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Average Ġ= Ġmovie . vote Average , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Count Ġ= Ġmovie . vote Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview Ġ= Ġmovie . overview , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor T mdb Id Ġ= Ġactor . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor Name Ġ= Ġactor . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre T mdb Id Ġ= Ġgenre . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Name Ġ= Ġgenre . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo T mdb Id Ġ= Ġvideo ?. id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Name Ġ= Ġvideo ?. title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Site Ġ= Ġvideo ?. site , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Key Ġ= Ġvideo ?. key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Type Ġ= Ġvideo ?. type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Size Ġ= Ġvideo ?. size ?. to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġevery Ġ{ Ġselect In Watch list By T mdb Id ( T mdb Id ( any ())) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġt mdb Id Arg Ġ= ĠT mdb Id ( first Arg ()) ĊĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġexecute As One OrNull () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠInt Id ( movies . indexOf Ġ{ Ġt mdb Id Arg Ġ== Ġit . t mdb Id Ġ} !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġin Ġwatch list ) Ġid Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġevery Ġ{ Ġselect Suggest ed () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠ Ġmock k Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġexecute As List () Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies . filter Ġ{ Ġmovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt Id ( movies . indexOf Ġ{ Ġmovie . t mdb Id Ġ== Ġit . t mdb Id Ġ} !! ) Ġin Ġsuggestions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. flatMap Indexed Ġ{ Ġindex : ĠInt , Ġmovie : ĠMovie Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovie Id Ġ= ĠInt Id ( index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Act ors Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Act ors . filter Ġ{ Ġ( movie Id , Ġ_) Ġ-> Ġmovie Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġactors [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Gen res Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Gen res . filter Ġ{ Ġ( movie Id , Ġ_) Ġ-> Ġmovie Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġgen res [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmovies Videos Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Videos . filter Ġ{ Ġ( m Id , Ġ_) Ġ-> Ġm Id Ġ== Ġmovie Id Ġ}. map Ġ{ Ġit . second Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġvideos [ it . i ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. if Empty Ġ{ ĠlistOf ( null ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Act ors . flatMap Ġ{ Ġactor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Gen res . flatMap Ġ{ Ġgenre Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovies Videos . map Ġ{ Ġvideo Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSelect Suggest ed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġmovie Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid _ Ġ= Ġmovie Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmovie Id Ġ= Ġmovie Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġt mdb Id Ġ= Ġmovie . t mdb Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġmovie . title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġyear Ġ= Ġmovie . year , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage BaseUrl Ġ= Ġmovie . image BaseUrl , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposter Path Ġ= Ġmovie . poster Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback drop Path Ġ= Ġmovie . backdrop Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Average Ġ= Ġmovie . vote Average , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvote Count Ġ= Ġmovie . vote Count , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverview Ġ= Ġmovie . overview , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor T mdb Id Ġ= Ġactor . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactor Name Ġ= Ġactor . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre T mdb Id Ġ= Ġgenre . first , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgenre Name Ġ= Ġgenre . second , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo T mdb Id Ġ= Ġvideo ?. id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Name Ġ= Ġvideo ?. title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Site Ġ= Ġvideo ?. site , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Key Ġ= Ġvideo ?. key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Type Ġ= Ġvideo ?. type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Size Ġ= Ġvideo ?. size ?. to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ