/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġhttp :// 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 . app . play hv z . firebase . operations Ċ Ċ import Ġandroid . util . Log Ċ import Ġcom . app . play hv z . firebase . class models . Player Ċ import Ġcom . app . play hv z . firebase . class models . Player . Companion . FIELD __ AV AT AR _ URL Ċ import Ġcom . app . play hv z . firebase . class models . Player . Companion . FIELD __ CHAT _ MEMBER SH IPS Ċ import Ġcom . app . play hv z . firebase . class models . Player . Companion . FIELD __ CHAT _ MEMBER SHIP _ ALLOW _ NOTIFICATION S Ċ import Ġcom . app . play hv z . firebase . constants . Player Path Ċ import Ġcom . app . play hv z . firebase . constants . Universal Constants . Companion . UN IVER SAL _ FIELD __ USER _ ID Ċ import Ġcom . app . play hv z . firebase . firebase provider . Firebase Provider Ċ import Ġcom . google . firebase . firestore . Document Reference Ċ import Ġcom . google . firebase . firestore . Query Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ class ĠPlayer Database Operations Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠPlayer Database Operations :: class . qualified Name ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa ĠDocument Reference Ġfor Ġa ĠPlayer . Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġget Player Document Reference ( game Id : ĠString , Ġplayer Id : ĠString ): ĠDocument Reference Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPlayer Path . PLAY ERS _ COLLECTION ( game Id ). document ( player Id ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠUpdate Ġa Ġplayer 's Ġal leg iance . Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġset Player Al leg iance ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġal leg iance : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener : Ġ() Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" game Id " Ġto Ġgame Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" player Id " Ġto Ġplayer Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" al leg iance " Ġto Ġal leg iance ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Provider . get Firebase Functions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Https Callable (" change Player Al leg iance ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. call ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. continue With Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Could Ġnot Ġchange Ġal leg iance : Ġ${ task . exception }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ continue With ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠUpdate Ġa Ġplayer 's Ġal leg iance . Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġinf ect Player By Life Code ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinf ector Player Id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlife Code : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener : Ġ() Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġhash Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" game Id " Ġto Ġgame Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" inf ector Player Id " Ġto Ġinf ector Player Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" life Code " Ġto Ġlife Code ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFirebase Provider . get Firebase Functions () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Https Callable (" inf ect Player By Life Code ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. call ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. continue With Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Could Ġnot Ġinf ect Ġlife Ġcode : Ġ${ task . exception }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ continue With ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġa ĠQuery Ġlisting Ġall Ġplayers Ġin Ġthe Ġgiven Ġgame Ġthat Ġare Ġowned Ġby Ġthis Ġuser . Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Users Players Query ( game Id : ĠString ): ĠQuery ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserId Ġ= ĠFirebase Provider . get Firebase Auth (). uid Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠPlayer Path . PLAY ERS _ COLLECTION ( game Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where EqualTo ( UN IVER SAL _ FIELD __ USER _ ID , ĠuserId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠUpdates Ġthe Ġplayer Ġobject . Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġasync Update Player Chat Notification Setting ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Id : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchat Room Id : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Notification Setting : ĠBoolean , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener : Ġ() Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game Id Ġ== Ġnull Ġ|| Ġplayer Id Ġ== Ġnull Ġ|| Ġchat Room Id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Path . PLAY ERS _ COLLECTION ( game Id ). document ( player Id ). update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"$ FIELD __ CHAT _ MEMBER SH IPS .$ chat Room Id .$ FIELD __ CHAT _ MEMBER SHIP _ ALLOW _ NOTIFICATION S ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Notification Setting ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġupdate Ġplayer : Ġ" Ġ+ Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĠUpdates Ġthe Ġplayer Ġprofile Ġimage . Ġ*/ ĊĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġasync Update Player Profile Image ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgame Id : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer Id : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ImageUrl : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener : Ġ() Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( game Id Ġ== Ġnull Ġ|| Ġplayer Id Ġ== Ġnull Ġ|| Ġprofile ImageUrl Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPlayer Path . PLAY ERS _ COLLECTION ( game Id ). document ( player Id ). update ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFIELD __ AV AT AR _ URL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofile ImageUrl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). add On Success Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccess Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġupdate Ġplayer : Ġ" Ġ+ Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfailure Listener . invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }