package Ġfi . ri ista . common . group H unting Ċ Ċ import Ġfi . ri ista . common . group H unting . model .* Ċ import Ġfi . ri ista . common . group H unting . validation . isValid Ċ import Ġfi . ri ista . common . model . LocalDate Ċ import Ġfi . ri ista . common . network . Backend Api Provider Ċ import Ġfi . ri ista . common . util . LocalDateTime Provider Ċ import Ġkotlinx . coroutines . coroutine Scope Ċ import Ġkotlinx . coroutines . join All Ċ import Ġkotlinx . coroutines . launch Ċ Ċ enum Ġclass ĠH unting Club GroupData Piece Ġ{ ĊĠĠĠ ĠMEMBER S , ĊĠĠĠ ĠH UNT ING _ AREA , ĊĠĠĠ ĠSTATUS , ĊĠĠĠ ĠH UNT ING _ DAYS , ĊĠĠĠ ĠDI ARY , Ċ } ĊĊ Ċ /** Ċ Ġ* ĠA Ġgroup Ġh unting Ġcontext Ġfor Ġa Ġsingle Ġclub Ġgroup Ġ( e . g . ĠH irv ip or uk ka Ġ 2 0 2 1 ). Ċ Ġ*/ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ class ĠGroup H unting Club Group Context Ġinternal Ġconstructor ( ĊĠĠĠ Ġbackend Api Provider : ĠBackend Api Provider , ĊĠĠĠ Ġval Ġh unting Group : ĠH unting Group , Ċ ): ĠBackend Api Provider Ġby Ġbackend Api Provider Ġ{ ĊĊĠĠĠ Ġval Ġmembers Provider : ĠH unting Group Members Provider Ġ= ĠH unting Group Members From Network Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackend Api Provider , Ġh unting Group . id ) ĊĊĠĠĠ Ġval Ġh unting Area Provider : ĠH unting Group Area Provider Ġ= ĠH unting Group Area From Network Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackend Api Provider , Ġh unting Group . id ) ĊĊĠĠĠ Ġval Ġh unting Status Provider : ĠH unting Group Status Provider Ġ= ĠH unting Group Status From Network Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackend Api Provider , Ġh unting Group . id ) ĊĊĠĠĠ Ġprivate Ġval Ġ_ h unting Days Provider Ġ= ĠGroup H unting Day From Network Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackend Api Provider , Ġh unting Group . id ) ĊĠĠĠ Ġval Ġh unting Days Provider : ĠGroup H unting Day Provider Ġ= Ġ_ h unting Days Provider ĊĊĠĠĠ Ġval Ġh unting Day Updater : ĠGroup H unting Day Updater Ġ= ĠGroup H unting Day Network Updater ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackend Api Provider , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġdi ary Provider : ĠGroup H unting Di ary Provider Ġ= ĠGroup H unting Di ary Network Provider ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackend Api Provider , Ġh unting Group . id ) ĊĊĠĠĠ Ġval Ġhar vest Updater : ĠGroup H unting Har vest Updater Ġ= ĠGroup H unting Har vest Network Updater ( ĊĠĠĠĠĠĠĠ Ġbackend Api Provider , Ġh unting Group . id ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġobservation Updater : ĠGroup H unting Observation Updater Ġ= ĠGroup H unting Observation Network Updater ( ĊĠĠĠĠĠĠĠ Ġbackend Api Provider , Ġh unting Group . id ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġval Ġtarget : ĠH unting Group Target ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġh unting Group . getTarget () ĊĊĠĠĠ Ġsuspend Ġfun Ġfetch All Data ( refresh : ĠBoolean ) Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġfetch Data Pieces ( H unting Club GroupData Piece . values (). toList (), Ġrefresh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġfetch Data Pieces ( data Pieces : ĠList < H unting Club GroupData Piece >, Ġrefresh : ĠBoolean ) Ġ= Ġcoroutine Scope Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfetch Jobs Ġ= Ġdata Pieces . map Ġ{ Ġdata Piece Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfetch Data ( data Piece , Ġrefresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfetch Jobs . join All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Har vest ] Ġthat Ġhas Ġthe Ġsame Ġid Ġas Ġspecified Ġby ĊĠĠĠĠ Ġ* Ġgiven Ġ[ ident ifies Har vest ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Har vest ( ident ifies Har vest : ĠIdent ifies Group H unting Har vest ): ĠGroup H unting Har vest ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdi ary Provider . di ary . har v ests ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġhar vest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhar vest . id Ġ== Ġidentifies Har vest . har vest Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġdi ary Provider . di ary . rejected Har v ests ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġhar vest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhar vest . id Ġ== Ġidentifies Har vest . har vest Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Har vest ] Ġthat Ġhas Ġthe Ġsame Ġid Ġas Ġspecified Ġby ĊĠĠĠĠ Ġ* Ġgiven Ġ[ ident ifies Har vest ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDep ending Ġon Ġthe Ġvalue Ġof Ġ[ allow Cached ] Ġmay Ġreturn Ġalready Ġfetched Ġhar vest Ġor ĊĠĠĠĠ Ġ* Ġfetch Ġall Ġthe Ġnecessary Ġdata Ġand Ġthen Ġtry Ġto Ġfind Ġthe Ġhar vest Ġfrom Ġfetched Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġfetch Har vest ( ident ifies Har vest : ĠIdent ifies Group H unting Har vest , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Cached : ĠBoolean ): ĠGroup H unting Har vest ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( allow Cached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Har vest ( ident ifies Har vest ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġhar vest Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġhar vest ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfind Har vest ( ident ifies Har vest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġfetch H unting Day For De er ( ident ifies H unting Group : ĠIdent ifies H unting Group , Ġdate : ĠLocalDate ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠGroup H unting Day For De er Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġh unting Day Updater . fetch H unting Day For De er ( ident ifies H unting Group , Ġdate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġcreate Har vest ( har vest : ĠGroup H unting Har vest Data ): ĠGroup H unting Har vest Operation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Response Ġ= Ġhar vest Updater . create Har vest ( har vest ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( create Response Ġis ĠGroup H unting Har vest Operation Response . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdi ary Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġaccept Ġgiven Ġ[ har vest ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġis Ġa Ġconvenience Ġfunction Ġfor Ġupdating Ġthe Ġhar vest ĊĠĠĠĠ Ġ* Ġ( accept Ġhar vest Ġ== Ġupdate Ġhar vest ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġaccept Har vest ( har vest : ĠGroup H unting Har vest ): ĠGroup H unting Har vest Operation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġupdate Har vest ( har vest ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate Har vest ( har vest : ĠGroup H unting Har vest ): ĠGroup H unting Har vest Operation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccept Response Ġ= Ġhar vest Updater . update Har vest ( har vest ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( accept Response Ġis ĠGroup H unting Har vest Operation Response . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġconsider Ġreplacing Ġjust Ġone Ġhar vest Ġinstead Ġof Ġfetching Ġall Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdi ary Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġaccept Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġreject Har vest ( har vest : ĠGroup H unting Har vest ): ĠGroup H unting Har vest Operation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreject Response Ġ= Ġhar vest Updater . reject Har vest ( har vest ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( reject Response Ġis ĠGroup H unting Har vest Operation Response . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġconsider Ġreplacing Ġjust Ġone Ġhar vest Ġinstead Ġof Ġfetching Ġall Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdi ary Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġreject Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Observation ] Ġthat Ġhas Ġthe Ġsame Ġid Ġas Ġspecified Ġby ĊĠĠĠĠ Ġ* Ġgiven Ġ[ ident ifies Observation ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind Observation ( ident ifies Observation : ĠIdent ifies Group H unting Observation ): ĠGroup H unting Observation ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġdi ary Provider . di ary . observations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġobservation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservation . id Ġ== Ġidentifies Observation . observation Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġdi ary Provider . di ary . rejected Ob servations ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġobservation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobservation . id Ġ== Ġidentifies Observation . observation Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Observation ] Ġthat Ġhas Ġthe Ġsame Ġid Ġas Ġspecified Ġby ĊĠĠĠĠ Ġ* Ġgiven Ġ[ ident ifies Observation ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDep ending Ġon Ġthe Ġvalue Ġof Ġ[ allow Cached ] Ġmay Ġreturn Ġalready Ġfetched Ġobservation Ġor ĊĠĠĠĠ Ġ* Ġfetch Ġall Ġthe Ġnecessary Ġdata Ġand Ġthen Ġtry Ġto Ġfind Ġthe Ġobservation Ġfrom Ġfetched Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġfetch Observation ( ident ifies Observation : ĠIdent ifies Group H unting Observation , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Cached : ĠBoolean ): ĠGroup H unting Observation ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ( allow Cached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Observation ( ident ifies Observation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġobservation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobservation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfind Observation ( ident ifies Observation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġaccept Ġa Ġgiven Ġ[ Group H unting Observation ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġsuccessful , Ġdi ary Ġwill Ġbe Ġupdated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġaccept Observation ( observation : ĠGroup H unting Observation ): ĠGroup H unting Observation Operation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaccept Response Ġ= Ġobservation Updater . accept Observation ( observation ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( accept Response Ġis ĠGroup H unting Observation Operation Response . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġconsider Ġreplacing Ġjust Ġone Ġobservation Ġinstead Ġof Ġfetching Ġall Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdi ary Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġaccept Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġreject Ġa Ġgiven Ġ[ Group H unting Observation ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġsuccessful , Ġdi ary Ġwill Ġbe Ġupdated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġreject Observation ( observation : ĠGroup H unting Observation ): ĠGroup H unting Observation Operation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreject Response Ġ= Ġobservation Updater . reject Observation ( observation ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( reject Response Ġis ĠGroup H unting Observation Operation Response . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġconsider Ġreplacing Ġjust Ġone Ġobservation Ġinstead Ġof Ġfetching Ġall Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdi ary Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġreject Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġcreate Ġa Ġnew Ġ[ Group H unting Observation ] ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġsuccessful , Ġdi ary Ġwill Ġbe Ġupdated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate Observation ( observation : ĠGroup H unting Observation Data ): ĠGroup H unting Observation Operation Response Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Response Ġ= Ġobservation Updater . create Observation ( observation ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( create Response Ġis ĠGroup H unting Observation Operation Response . Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġconsider Ġreplacing Ġjust Ġone Ġobservation Ġinstead Ġof Ġfetching Ġall Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdi ary Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Day ] Ġthat Ġhas Ġthe Ġsame Ġid Ġas Ġspecified Ġby ĊĠĠĠĠ Ġ* Ġgiven Ġ[ ident ifies H unting Day ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind H unting Day ( ident ifies H unting Day : ĠIdent ifies Group H unting Day ): ĠGroup H unting Day ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġh unting Days Provider . h unting Days ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġh unting Day Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unting Day . id Ġ== Ġidentifies H unting Day . h unting Day Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Day ] Ġthat Ġhas Ġthe Ġgiven Ġdate Ġas Ġstart Ġdate . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġfind H unting Day ( startDate : ĠLocalDate ): ĠGroup H unting Day ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġh unting Days Provider . h unting Days ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . first OrNull Ġ{ Ġh unting Day Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unting Day . start DateTime . date Ġ== ĠstartDate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġcreate Ġa Ġnew Ġ[ Group H unting Day ] Ġon Ġthe Ġbackend . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġmain Ġpurpose Ġof Ġthis Ġfunction Ġis Ġto Ġcoordinate Ġwork Ġbetween Ġ[ h unting Day Updater ] Ġand ĊĠĠĠĠ Ġ* Ġ[ h unting Days Provider ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġcreate H unting Day ( ĊĠĠĠĠĠĠĠ Ġh unting Day : ĠGroup H unting Day , ĊĠĠĠĠĠĠĠ ĠcurrentTime Provider : ĠLocalDateTime Provider ĊĠĠĠ Ġ): ĠGroup H unting Day Update Response Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! h unting Day . isValid ( h unting Group . permit , ĠcurrentTime Provider )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGroup H unting Day Update Response . Error ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMark Ġh unting Ġdays Ġto Ġbe Ġupdated Ġupon Ġnext Ġfetch . ĠThis Ġway Ġthey Ġget Ġupdated Ġwhen ĊĠĠĠĠĠĠĠ Ġ// Ġcreating Ġthe Ġh unting Ġday Ġsucceeds Ġon Ġthe Ġbackend Ġbut Ġwe Ġfail Ġto Ġreceive Ġthe Ġresponse . ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġnext Ġh unting Ġday Ġfetch Ġwill Ġthen Ġfetch Ġthe Ġdays Ġeven Ġif Ġnot Ġexplicitly Ġrefresh ing . ĊĠĠĠĠĠĠĠ Ġ_ h unting Days Provider . should Refresh Up onNext Fetch () ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Response Ġ= Ġh unting Day Updater . create H unting Day ( h unting Day ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( update Response Ġis ĠGroup H unting Day Update Response . Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh unting Days Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġupdate Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġupdate Ġ[ Group H unting Day ] Ġon Ġthe Ġbackend . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġmain Ġpurpose Ġof Ġthis Ġfunction Ġis Ġto Ġcoordinate Ġwork Ġbetween Ġ[ h unting Day Updater ] Ġand ĊĠĠĠĠ Ġ* Ġ[ h unting Days Provider ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġupdate H unting Day ( ĊĠĠĠĠĠĠĠ Ġh unting Day : ĠGroup H unting Day , ĊĠĠĠĠĠĠĠ ĠcurrentTime Provider : ĠLocalDateTime Provider ĊĠĠĠ Ġ): ĠGroup H unting Day Update Response Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! h unting Day . isValid ( h unting Group . permit , ĠcurrentTime Provider )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠGroup H unting Day Update Response . Error ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMark Ġh unting Ġdays Ġto Ġbe Ġupdated Ġupon Ġnext Ġfetch . ĠThis Ġway Ġthey Ġget Ġupdated Ġwhen ĊĠĠĠĠĠĠĠ Ġ// Ġupdating Ġthe Ġh unting Ġday Ġsucceeds Ġon Ġthe Ġbackend Ġbut Ġwe Ġfail Ġto Ġreceive Ġthe Ġresponse . ĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġnext Ġh unting Ġday Ġfetch Ġwill Ġthen Ġfetch Ġthe Ġdays Ġeven Ġif Ġnot Ġexplicitly Ġrefresh ing . ĊĠĠĠĠĠĠĠ Ġ_ h unting Days Provider . should Refresh Up onNext Fetch () ĊĊĠĠĠĠĠĠĠ Ġval Ġupdate Response Ġ= Ġh unting Day Updater . update H unting Day ( h unting Day ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( update Response Ġis ĠGroup H unting Day Update Response . Updated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġtodo : Ġconsider Ġreplacing Ġjust Ġone Ġh unting Ġday Ġinstead Ġof Ġfetching Ġall Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġh unting Days Provider . fetch ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġupdate Response ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Day ] Ġthat Ġhas Ġthe Ġsame Ġid Ġas Ġspecified Ġby Ġthe ĊĠĠĠĠ Ġ* Ġgiven Ġ[ ident ifies H unting Day ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDep ending Ġon Ġthe Ġvalue Ġof Ġ[ allow Cached ] Ġmay Ġreturn Ġalready Ġfetched Ġh unting Ġday Ġor ĊĠĠĠĠ Ġ* Ġfetch Ġall Ġthe Ġnecessary Ġdata Ġand Ġthen Ġtry Ġto Ġfind Ġthe Ġh unting Ġday Ġfrom Ġfetched Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġfetch H unting Day ( ident ifies H unting Day : ĠIdent ifies Group H unting Day , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Cached : ĠBoolean ): ĠGroup H unting Day ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( allow Cached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind H unting Day ( ident ifies H unting Day ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġh unting Day Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġh unting Day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfind H unting Day ( ident ifies H unting Day ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAt tempts Ġto Ġfind Ġa Ġ[ Group H unting Day ] Ġthat Ġhas Ġthe Ġsame Ġstart Ġdate Ġas Ġspecified Ġby Ġthe ĊĠĠĠĠ Ġ* Ġgiven Ġ[ startDate ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠDep ending Ġon Ġthe Ġvalue Ġof Ġ[ allow Cached ] Ġmay Ġreturn Ġalready Ġfetched Ġh unting Ġday Ġor ĊĠĠĠĠ Ġ* Ġfetch Ġall Ġthe Ġnecessary Ġdata Ġand Ġthen Ġtry Ġto Ġfind Ġthe Ġh unting Ġday Ġfrom Ġfetched Ġdata . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġsuspend Ġfun Ġfetch H unting Day ( startDate : ĠLocalDate , Ġallow Cached : ĠBoolean ): ĠGroup H unting Day ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( allow Cached ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind H unting Day ( startDate ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġh unting Day Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġh unting Day ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch All Data ( refresh Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġfind H unting Day ( startDate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġfetch Data ( data : ĠH unting Club GroupData Piece , Ġrefresh : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( data ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH unting Club GroupData Piece . MEMBER S Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmembers Provider . fetch ( refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH unting Club GroupData Piece . H UNT ING _ AREA Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unting Area Provider . fetch ( refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH unting Club GroupData Piece . STATUS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unting Status Provider . fetch ( refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH unting Club GroupData Piece . H UNT ING _ DAYS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh unting Days Provider . fetch ( refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠH unting Club GroupData Piece . DI ARY Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdi ary Provider . fetch ( refresh ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ