/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠC attle ĠNotes . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . pr 6 5 6 d . shared . data . user . info . datas ources Ċ Ċ import Ġcom . google . firebase . firestore . Firebase Fire store Ċ import Ġcom . google . firebase . firestore . Set Options Ċ import Ġcom . pr 6 5 6 d . shared . data . login . datas ources . Auth Id DataSource Ċ import Ġcom . pr 6 5 6 d . shared . data . user . info . Fire store UserInfo Ċ import Ġcom . pr 6 5 6 d . shared . di . Io Dispatcher Ċ import Ġcom . pr 6 5 6 d . shared . domain . result . Result Ċ import Ġcom . pr 6 5 6 d . shared . utils . Network Helper Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . suspend C ancellable Coroutine Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġtim ber . log . Tim ber Ċ import Ġjavax . inject . Inject Ċ import Ġkotlin . coroutines . resume Ċ Ċ class ĠUpdate Fire store UserInfo DataSource Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġauth Id DataSource : ĠAuth Id DataSource , ĊĠĠĠ Ġprivate Ġval Ġfire store : ĠFirebase Fire store , ĊĠĠĠ Ġprivate Ġval Ġnetwork Helper : ĠNetwork Helper , ĊĠĠĠ Ġ@ Io Dispatcher Ġprivate Ġval Ġio Dispatcher : ĠCor outine Dispatcher Ċ ) Ġ: ĠUpdate Fire store UserInfo DataSource Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate UserInfo ( userInfo : ĠFire store UserInfo ): ĠResult < Unit > Ġ= ĊĠĠĠĠĠĠĠ Ġwith Context ( io Dispatcher ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend C ancellable Coroutine < Result < Unit >> Ġ{ Ġcontinuation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġu Id Ġ= Ġauth Id DataSource . getUserId () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠU Id Ġis Ġrequired Ġto Ġwork . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( u Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Exception Ġon Ġupdate Ġof ĠUserInfo On Fire store ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResult . Error ( IllegalStateException (" User Ġid Ġnot Ġfound ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġfire store ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collection ( USERS _ COLLECTION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. document ( u Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( userInfo . as HashMap (), ĠSet Options . merge ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( network Helper . is Network Connected ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( Result . Success ( Unit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Exception Ġon Ġupdate Ġof ĠUserInfo On Fire store ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( Result . Error ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFirebase Ġoffline Ġpersistence Ġwill Ġreflect Ġchanges . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinuation . resume ( Result . Success ( Unit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠFire store UserInfo . as HashMap (): ĠHashMap < String , ĠAny ?> Ġ= ĊĠĠĠĠĠĠĠ Ġhash Map Of < String , ĠAny ?> (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( KEY _ F ARM _ NAME , Ġget Farm Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( KEY _ DA IR Y _ CODE , Ġget D air y Code ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( KEY _ DA IR Y _ CUSTOMER _ ID , Ġget D air y CustomerId ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( KEY _ F ARM _ ADDRESS , Ġget Farm Address ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( KEY _ G ENDER , Ġget Gender ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( KEY _ DO B , Ġget Date OfBirth ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( KEY _ ADDRESS , Ġget Address ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUSER S _ COLLECTION Ġ= Ġ" users " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ F ARM _ NAME Ġ= Ġ" farm Name " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ F ARM _ ADDRESS Ġ= Ġ" farm Address " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ G ENDER Ġ= Ġ" gender " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ DO B Ġ= Ġ" date OfBirth " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ ADDRESS Ġ= Ġ" address " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ DA IR Y _ CODE Ġ= Ġ" da iry Code " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠKEY _ DA IR Y _ CUSTOMER _ ID Ġ= Ġ" da iry CustomerId " ĊĠĠĠ Ġ} Ċ } Ċ