package Ġcom . github . ll max im ll . m yst ory is my world . data . user . remote Ċ Ċ import Ġcom . github . ll max im ll . m yst ory is my world . data . user . map pers . to UserDetails Dto Ċ import Ġcom . github . ll max im ll . m yst ory is my world . data . user . map pers . to User Dto Ċ import Ġcom . parse . Function Callback Ċ import Ġcom . parse . Parse Cloud Ċ import Ġcom . parse . Parse Object Ċ import Ġcom . parse . Parse User Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . coroutines . resume Ċ import Ġkotlin . coroutines . suspend Coroutine Ċ Ċ interface ĠUser Remote DataSource Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġupdate User Remote ( updated User : ĠUser Dto ): ĠResult < Any ?> ĊĠĠĠ Ġsuspend Ġfun ĠgetCurrent User Remote ( username : ĠString ): ĠResult < User Dto > ĊĠĠĠ Ġsuspend Ġfun ĠgetUser Details Remote ( username : ĠString ): ĠResult < UserDetails Dto > ĊĠĠĠ Ġsuspend Ġfun ĠgetUser List Remote ( username : ĠString ): ĠResult < List < User Dto >> Ċ } Ċ Ċ class ĠUser Remote DataSource Impl Ġ@ Inject Ġconstructor () Ġ: ĠUser Remote DataSource Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate User Remote ( updated User : ĠUser Dto ): ĠResult < Any ?> Ġ= Ġsuspend Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠĠĠ ĠTim ber . v (" update User Remote :: Ġupdated User :$ updated User ") ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" firstName " Ġto Ġupdated User . firstName . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" lastName " Ġto Ġupdated User . lastName . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" about Me " Ġto Ġupdated User . about Me . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠParse Cloud . call Function In Background ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" update CurrentUser ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Callback < Parse Object > ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ` object `, Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( e Ġ!= Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" update User Remote :: failure Ġ| Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(` object ` Ġ== Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" update User Remote :: failure Ġ| Ġobject = null ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( Throwable ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" update User Remote :: success Ġ| Ġuser Object :$ ` object ` ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . success ( null )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetCurrent User Remote ( username : ĠString ): ĠResult < User Dto > Ġ= Ġsuspend Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠĠĠ ĠTim ber . v (" getUser :: ") ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġhash Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ ĠParse Cloud . call Function In Background ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" getCurrent User ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Callback < Parse User > ĊĠĠĠĠĠĠĠ Ġ{ Ġ` object `, Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( e Ġ!= Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser :: failure Ġ| Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(` object ` Ġ== Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser :: failure Ġ| Ġobject = null ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( Throwable ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser :: success Ġ| Ġuser Object :$ ` object ` ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Object : ĠUser Dto Ġ= Ġ` object `. to User Dto () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" user Object :$ user Object ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . success ( user Object )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetUser Details Remote ( ĊĠĠĠĠĠĠĠ Ġusername : ĠString ĊĠĠĠ Ġ): ĠResult < UserDetails Dto > Ġ= Ġsuspend Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠĠĠ ĠTim ber . v (" getUser Details Remote :: ") ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" username " Ġto Ġusername ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠParse Cloud . call Function In Background ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" getUser With Details ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Callback < Map < String , ĠAny >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġ` object `, Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( e Ġ!= Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser Details Remote :: failure Ġ| Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ(` object ` Ġ== Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser Details Remote :: failure Ġ| Ġobject = null ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( Throwable ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser Details Remote :: success Ġ| Ġuser Object :$ ` object ` ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Object : ĠUser Details Dto Ġ= Ġ` object `. to UserDetails Dto () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" user Object :$ user Object ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . success ( user Object )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun ĠgetUser List Remote ( username : ĠString ): ĠResult < List < User Dto >> Ġ= Ġsuspend Coroutine Ġ{ Ġcont Ġ-> ĊĠĠĠĠĠĠĠ ĠTim ber . v (" getUser List Remote :: ") ĊĠĠĠĠĠĠĠ Ġval Ġparameters Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" username " Ġto Ġusername ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠParse Cloud . call Function In Background ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" getUser List ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFunction Callback < ArrayList < Parse User >> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġobjects , Ġe Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( e Ġ!= Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser :: failure Ġ| Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( e )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( objects Ġ== Ġnull ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser :: failure Ġ| Ġobjects = null ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . failure ( Throwable ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Objects Ġ= Ġobjects . map Ġ{ Ġit . to User Dto () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . v (" getUser :: success Ġ| Ġuser Object :$ user Objects ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcont . resume ( Result . success ( user Objects )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }