package Ġcom . example . ed v ora _ android _ assignment . common . network Ċ Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġkotlinx . coroutines . flow . flow On Ċ Ċ open Ġclass ĠBase Repo Ġ{ ĊĠĠĠ Ġprotected Ġsuspend Ġfun Ġ< T > Ġrefresh And Save ( ĊĠĠĠĠĠĠĠ Ġnetwork Call : Ġsuspend Ġ() Ġ-> ĠResource < T >, ĊĠĠĠĠĠĠĠ Ġsave Call Result : Ġsuspend Ġ( T ) Ġ-> ĠUnit ĊĠĠĠ Ġ) Ġ= Ġflow < Resource < T >> { ĊĠĠĠĠĠĠĠ Ġemit ( Resource . loading ()) ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġnetwork Call . invoke () ĊĠĠĠĠĠĠĠ Ġwhen Ġ( response . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . data ?. let Ġ{ Ġsave Call Result . invoke ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( response . data Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . success ( response . data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . error (" Something ĠW ent ĠWrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource . Status . ERROR Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġlogs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Resource . error (" Something ĠW ent ĠWrong ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}. flow On ( Dispatch ers . IO ) Ċ Ċ } Ċ