package Ġcom . ind ram ah kota . data . source Ċ Ċ import Ġcom . ind ram ah kota . data . source . local . Local DataSource Ċ import Ġcom . ind ram ah kota . data . source . remote . Remote DataSource Ċ import Ġcom . ind ram ah kota . data . source . remote . network . ApiResponse Ċ import Ġcom . ind ram ah kota . data . source . remote . response . Movie Response Ċ import Ġcom . ind ram ah kota . data . domain . model . Movie Ċ import Ġcom . ind ram ah kota . data . domain . repository . IM ov ie App Repository Ċ import Ġcom . ind ram ah kota . data . utils . App Executors Ċ import Ġcom . ind ram ah kota . data . utils . toList Movie Ċ import Ġcom . ind ram ah kota . data . utils . toList Movie Entity Ċ import Ġcom . ind ram ah kota . data . utils . to Movie Entity Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . map Ċ Ċ class ĠMovie App Repository ( ĊĠĠĠ Ġprivate Ġval Ġremote DataSource : ĠRemote DataSource , ĊĠĠĠ Ġprivate Ġval Ġlocal DataSource : ĠLocal DataSource , ĊĠĠĠ Ġprivate Ġval Ġapp Executors : ĠApp Executors Ċ ) Ġ: ĠI Movie App Repository Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetAll Movies ( sort : ĠString ): ĠFlow < Resource < List < Movie >>> Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠNetwork Bound Resource < List < Movie >, ĠMovie Response >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave Call Result ( data : ĠMovie Response ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . insert Movies ( data . results . toList Movie Entity ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Fetch ( data : ĠList < Movie >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . isEmpty () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload From Db (): ĠFlow < List < Movie >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . getAll Movies ( sort ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList Movie () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Call (): ĠApiResponse < Movie Response > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote DataSource . get Movies () ĊĠĠĠĠĠĠĠ Ġ}. as Flow () ĊĊĠĠĠ Ġoverride Ġfun ĠgetAll Tv Shows ( sort : ĠString ): ĠFlow < Resource < List < Movie >>> Ġ= ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠNetwork Bound Resource < List < Movie >, ĠMovie Response >() Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġsave Call Result ( data : ĠMovie Response ) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . insert Movies ( data . results . toList Movie Entity ( true )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġshould Fetch ( data : ĠList < Movie >) Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . isEmpty () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġload From Db (): ĠFlow < List < Movie >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlocal DataSource . getAll Movies ( sort ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList Movie ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġcreate Call (): ĠApiResponse < Movie Response > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote DataSource . get Tv Shows () ĊĠĠĠĠĠĠĠ Ġ}. as Flow () ĊĊĠĠĠ Ġoverride Ġfun Ġget Favorite Movies ( sort : ĠString ): ĠFlow < List < Movie >> Ġ= ĊĠĠĠĠĠĠĠ Ġlocal DataSource . getAll Favorite Movies ( sort ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList Movie () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Favorite Tv Shows ( sort : ĠString ): ĠFlow < List < Movie >> Ġ= ĊĠĠĠĠĠĠĠ Ġlocal DataSource . getAll Favorite Tv Shows ( sort ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . toList Movie ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Movie Favorite ( movie : ĠMovie , Ġfavorite : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmovie Entity Ġ= Ġmovie . to Movie Entity ( movie . favorite ) ĊĠĠĠĠĠĠĠ Ġapp Executors . disk IO (). execute Ġ{ Ġlocal DataSource . set Movie Favorite ( movie Entity , Ġfavorite ) Ġ} ĊĠĠĠ Ġ} Ċ }