package Ġcom . al . data . repository Ċ Ċ import Ġcom . al . data . datasource . local . image . Image Local DataSource Ċ import Ġcom . al . data . datasource . remote . network . image . Image Remote DataSource Ċ import Ġcom . al . data . mapper . Image Mapper Ċ import Ġcom . al . domain . entity . Image Entity Ċ import Ġcom . al . domain . entity . Image Response Entity Ċ import Ġcom . al . domain . repository . Explore Images Repository Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠExplo re Images Repository Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġlocal Source : ĠImage Local DataSource , ĊĠĠĠ Ġprivate Ġval Ġremote DataSource : ĠImage Remote DataSource Ċ ) Ġ: ĠExplo re Images Repository Ġ{ ĊĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġfetch Images ( page No : ĠInt ): ĠFlow < Image Response Entity > Ġ= Ġflow Ġ{ ĊĠĠĠĠĠĠĠ Ġ// fetch Ġit , Ġmap Ġit Ġand Ġrelease Ġit Ġto ĠDomain Ġwith Ġflow ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġremote DataSource . get Fetch Images ( page No ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Source . delete All () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Source . save All ( data . hits ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlst Ġ= ĠArrayList < Image Entity >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// mapping Ġit Ġinto Ġdomain Ġtype Ġpo jo Ġconvention Ġand Ġemit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Source . get Images ( page No ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlst . add ( Image Mapper . from DataTo Domain Type ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĠImage Response Entity ( data . total , Ġdata . total Hits , Ġlst ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( response ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġdelete Saved Images () Ġ{ ĊĠĠĠĠĠĠĠ Ġlocal Source . delete All () ĊĠĠĠ Ġ} Ċ }