package Ġfi . ri ista . common . group H unting Ċ Ċ import Ġco . touch lab . state ly . collections . Iso Mutable List Ċ import Ġfi . ri ista . common . group H unting . dto . H unting Group Members DTO Ċ import Ġfi . ri ista . common . group H unting . dto . to Member Ċ import Ġfi . ri ista . common . group H unting . model . H unting GroupId Ċ import Ġfi . ri ista . common . group H unting . model . H unting Group Member Ċ import Ġfi . ri ista . common . logging . Logger Ċ import Ġfi . ri ista . common . logging . getLogger Ċ import Ġfi . ri ista . common . network . Backend Api Provider Ċ import Ġfi . ri ista . common . network . Network Data Fetcher Ċ import Ġfi . ri ista . common . network . calls . Network Response Ċ import Ġfi . ri ista . common . network . calls . Network ResponseData Ċ import Ġfi . ri ista . common . util . Data Fetcher Ċ Ċ interface ĠH unting Group Members Provider : ĠData Fetcher Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThe Ġmembers Ġof Ġthe Ġh unting Ġgroup . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġvalue Ġshould Ġonly Ġbe Ġnull Ġif Ġmembers Ġhave Ġnot Ġbeen Ġloaded Ġsuccessfully Ġat Ġany Ġpoint . ĊĠĠĠĠ Ġ* ĠThis Ġmeans Ġthat Ġif Ġmembers Ġhave Ġbeen Ġsuccessfully Ġloaded Ġbut Ġsubsequent Ġload Ġrequests ĊĠĠĠĠ Ġ* Ġfail , Ġthe Ġlist Ġmay Ġstill Ġcontain Ġmembers Ġfrom Ġprevious Ġload Ġattempt . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġmembers : ĠList < H unting Group Member >? Ċ } Ċ Ċ /** Ċ Ġ* ĠProvides Ġh unting Ġgroup Ġmembers Ġby Ġfetching Ġthem Ġfrom Ġbackend . Ċ Ġ*/ Ċ internal Ġclass ĠH unting Group Members From Network Provider ( ĊĠĠĠ Ġbackend Api Provider : ĠBackend Api Provider , ĊĠĠĠ Ġprivate Ġval Ġh unting GroupId : ĠH unting GroupId , Ċ ) Ġ: ĠH unting Group Members Provider , ĊĠĠĠ ĠNetwork Data Fetcher < H unting Group Members DTO >(), ĊĠĠĠ ĠBackend Api Provider Ġby Ġbackend Api Provider Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġ_ members Ġ= ĠI so Mutable List < H unting Group Member >() ĊĠĠĠ Ġoverride Ġval Ġmembers : ĠList < H unting Group Member >? ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ_ members Ġmay Ġbe Ġempty Ġbecause Ġof Ġtwo Ġreasons : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . Ġthere Ġare Ġno Ġmembers ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . Ġthe Ġloading Ġfailed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġshould Ġreturn Ġnull Ġonly Ġin Ġthe Ġlatter Ġcase ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(_ members . isEmpty () Ġ&& Ġ! load Status . value . loaded ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ members ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch From Network (): ĠNetwork Response < H unting Group Members DTO > Ġ= ĊĠĠĠĠĠĠĠ Ġbackend API . fetch H unting Group Members ( h unting GroupId ) ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Success ( ĊĠĠĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠĠĠ Ġresponse Data : ĠNetwork ResponseData < out ĠH unting Group Members DTO > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Members Ġ= Ġresponse Data . typed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġmember DTO Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmember DTO . to Member () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ_ members . clear () ĊĠĠĠĠĠĠĠ Ġ_ members . addAll ( new Members Ġ?: ĠlistOf ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhandle Error 4 0 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ members . clear () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġlogger (): ĠLogger Ġ= Ġlogger ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġby Ġget Logger ( H unting Group Members From Network Provider :: class ) ĊĠĠĠ Ġ} Ċ }