package Ġcom . g rom yk . last f ma f . domain . repository Ċ Ċ import Ġcom . g rom yk . api . Api Ċ import Ġcom . g rom yk . api . On Response Ċ import Ġcom . g rom yk . api . d tos . album . Album Response Ċ import Ġcom . g rom yk . api . d tos . artist . Artist Info Ċ import Ġcom . g rom yk . api . d tos . search . Search Artist Response Ċ import Ġcom . g rom yk . api . d tos . top albums . Top Album s Ċ import Ġcom . g rom yk . last f ma f . helpers . clear And Insert Ċ import Ġcom . g rom yk . persistence . artist . Artist Ċ import Ġcom . g rom yk . persistence . composed album . Album Object Ċ import Ġcom . g rom yk . persistence . db . App Database Ċ import Ġorg . k oin . core . K oin Component Ċ import Ġorg . k oin . core . inject Ċ Ċ class ĠData Repository Ġ: ĠK oin Component Ġ{ ĊĠĠĠ Ġprivate Ġval Ġapi : ĠApi Ġby Ġinject () ĊĠĠĠ Ġprivate Ġval Ġdatabase : ĠApp Database Ġby Ġinject () ĊĊĠĠĠ Ġprivate Ġval Ġlocal Album s Ġ= Ġmutable ListOf < Album Object >() ĊĊĠĠĠ Ġfun Ġget Local Album s (): ĠList < Album Object > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalbum s Ġ= Ġdatabase . getAll Album s (). to Mutable List () ĊĠĠĠĠĠĠĠ Ġlocal Album s . clear And Insert ( albums ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlocal Album s ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Artist ( artist : ĠArtist ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġartists Ġ= Ġdatabase . getAll Art ists () ĊĠĠĠĠĠĠĠ Ġartists . find Ġ{ Ġit . url Ġ== Ġartist . url Ġ} ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġit . id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġartist Id Ġ= Ġartists . map Ġ{ Ġit . id Ġ}. max () Ġ?: Ġ 0 L ĊĠĠĠĠĠĠĠ Ġdatabase . save Artist ( artist . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġartist Id Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġreturn Ġartist . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Artist ById ( artist Id : ĠLong ) Ġ= ĊĠĠĠĠĠĠĠ Ġdatabase . getAll Art ists (). first OrNull Ġ{ Ġit . id Ġ== Ġartist Id Ġ} ĊĊĠĠĠ Ġfun Ġsave Album ( album : ĠAlbum Object ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalbum Id Ġ= Ġlocal Album s . map NotNull Ġ{ Ġit . album ?. album Id Ġ}. max () Ġ?: Ġ 0 L ĊĠĠĠĠĠĠĠ Ġval Ġis Saved Ġ= Ġdatabase . save Album ( album . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . album ?. album Id Ġ= Ġalbum Id Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Saved ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocal Album s . add ( album ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Album By ( artist : ĠString , Ġname : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Saved Album By ( artist , Ġname )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdatabase . remove Album s ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Saved Album By ( artist Name : ĠString , Ġalbum Name : ĠString ): ĠAlbum Object ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġartist Ġ= Ġdatabase . get Artist By ( artist Name ) ĊĠĠĠĠĠĠĠ Ġreturn Ġlocal Album s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . album ?. artist Id Ġ== Ġartist . id Ġ&& Ġit . album ?. name Ġ== Ġalbum Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Album Info ( ĊĠĠĠĠĠĠĠ Ġartist : ĠString , ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġon Response : ĠOn Response < Album Response > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġapi . artist Service . get Album Info ( artist , Ġname ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . on Success ( response ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . onError ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġsearch Artist By ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġon Response : ĠOn Response < Search Artist Response > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Response Ġ= Ġapi . search Service . search Artist ( name ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . on Success ( search Response ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . onError ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Artist Info ( name : ĠString , Ġon Response : ĠOn Response < Artist Info >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Info Ġ= Ġapi . artist Service . get Artist Info ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . on Success ( artist Info ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . onError ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġget Top Album s For ( name : ĠString , Ġon Response : ĠOn Response < Top Album s >) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġartist Info Ġ= Ġapi . artist Service . get Top Album s For ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . on Success ( artist Info . top Album s ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Response . onError ( exception ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }