package Ġcom . ako ch dev . data . datasource Ċ Ċ import Ġcom . ako ch dev . data . Build Config . MAR VEL _ API _ KEY _ PRIVATE Ċ import Ġcom . ako ch dev . data . Build Config . MAR VEL _ API _ KEY _ PUBLIC Ċ import Ġcom . ako ch dev . data . model . Character ListResponse Model Ċ import Ġcom . ako ch dev . domain . model . Result Ċ import Ġcom . ako ch dev . domain . model . Result . Success Ċ import Ġcom . ako ch dev . domain . model . Result . Failure Ċ import Ġcom . ako ch dev . data . extensions . to Mar vel Hash Ċ import Ġcom . ako ch dev . data . model . Character Detail Response Model Ċ import Ġcom . ako ch dev . data . service . Mar vel Service Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . flow Ċ import Ġjava . lang . Exception Ċ import Ġjava . util . Date Ċ Ċ import Ġjavax . inject . Inject Ċ Ċ private Ġconst Ġval ĠUNKNOWN _ RESPONSE _ CODE Ġ= Ġ- 1 Ċ Ċ interface ĠRemote DataSource Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġget Mar vel Characters ( limit : ĠInt , Ġoffset : ĠInt , Ġtimestamp : ĠLong Ġ= ĠDate (). time ): ĠResult < Character ListResponse Model > ĊĠĠĠ Ġsuspend Ġfun Ġget Character Detail ( character Id : ĠString , Ġtimestamp : ĠLong Ġ= ĠDate (). time ): ĠFlow < Result < Character Detail Response Model >> Ċ } Ċ Ċ class ĠRemote DataSource Impl Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠMar vel Service Ċ ) Ġ: ĠRemote DataSource Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Mar vel Characters ( ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt , ĊĠĠĠĠĠĠĠ Ġoffset : ĠInt , ĊĠĠĠĠĠĠĠ Ġtimestamp : ĠLong ĊĠĠĠ Ġ): ĠResult < Character ListResponse Model > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġ"$ timestamp $ MAR VEL _ API _ KEY _ PRIVATE $ MAR VEL _ API _ KEY _ PUBLIC ". to Mar vel Hash () ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . get Character List ( MAR VEL _ API _ KEY _ PUBLIC , Ġhash , Ġtimestamp , Ġlimit , Ġoffset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuccess ( response . body ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFailure ( response . code (), Ġresponse . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFailure ( UNKNOWN _ RESPONSE _ CODE , Ġe . localized Message , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġget Character Detail ( character Id : ĠString , Ġtimestamp : ĠLong ): ĠFlow < Result < Character Detail Response Model >> Ġ{ Ġ// ĠUsing Ġflow Ġjust Ġto Ġshow case ĊĠĠĠĠĠĠĠ Ġval Ġhash Ġ= Ġ"$ timestamp $ MAR VEL _ API _ KEY _ PRIVATE $ MAR VEL _ API _ KEY _ PUBLIC ". to Mar vel Hash () ĊĠĠĠĠĠĠĠ Ġreturn Ġflow Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemit ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġservice . get Character Detail ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠM AR VEL _ API _ KEY _ PUBLIC , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhash , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSuccess ( response . body ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFailure ( response . code (), Ġresponse . message ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFailure ( UNKNOWN _ RESPONSE _ CODE , Ġe . localized Message , Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ