package Ġcom . ready . lol champ s . repository Ċ Ċ import Ġcom . ready . lol champ s . db . Champ ion Dao Ċ import Ġcom . ready . lol champ s . exceptions . Empty Body Exception Ċ import Ġcom . ready . lol champ s . exceptions . Network FailureException Ċ import Ġcom . ready . lol champ s . model . Champ ion Ċ import Ġcom . ready . lol champ s . network . Champ ion Service Ċ import Ġcom . ready . lol champ s . ui . base . Ui State Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMain Repository Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġchamp ion Service : ĠCh amp ion Service , ĊĠĠĠ Ġprivate Ġval Ġchamp ion Dao : ĠCh amp ion Dao Ċ ) Ġ{ ĊĊĠĠĠ Ġfun ĠgetAll Champ ions () Ġ= Ġflow < Ui State > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchamp ions In DB Ġ= Ġchamp ion Dao . getAll Champ ion List () ĊĠĠĠĠĠĠĠ Ġif Ġ( champ ions In DB . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Ui State . Success ( champ ions In DB )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ flow ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġchamp ion Service . fetch All Champ ions () ĊĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchamp ions : ĠList < Champ ion > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. toList () Ġ?: Ġthrow ĠEmpty Body Exception ("[ ${ response . code ()} ] Ġ- Ġ${ response . raw () }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchamp ion Dao . insert Champ ion List ( champ ions ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( Ui State . Success ( champ ions )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠNetwork FailureException ("[ ${ response . code ()} ] Ġ- Ġ${ response . raw () }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. catch Ġ{ Ġemit ( Ui State . Error ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġ. flow On ( Dispatch ers . IO ) Ċ }