package Ġcom . mi . m vi . cache . source Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġcom . mi . m vi . cache . db . Account Dao Ċ import Ġcom . mi . m vi . cache . mapper . User Entity Mapper Ċ import Ġcom . mi . m vi . data . datasource . cache . Account Cache DataSource Ċ import Ġcom . mi . m vi . data . entity . User Entity Ċ Ċ const Ġval ĠPRE V IOUS _ AUTH _ USER : ĠString Ġ= Ġ" com . mi . m vi . PREVIOUS _ AUTH _ USER " Ċ Ċ class ĠAccount Cache DataSource Impl ( ĊĠĠĠ Ġprivate Ġval Ġaccount Dao : ĠAccount Dao , ĊĠĠĠ Ġprivate Ġval Ġuser Entity Mapper : ĠUser Entity Mapper , ĊĠĠĠ Ġprivate Ġval Ġshared Preferences : ĠSharedPreferences , ĊĠĠĠ Ġprivate Ġval Ġshared Prefs Editor : ĠSharedPreferences . Editor Ċ ) Ġ: ĠAccount Cache DataSource Ġ{ ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġinsert Or Ignore ( user Entity : ĠUser Entity ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġaccount Dao . insert Or Ignore ( user Entity Mapper . map To Cached ( user Entity )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch By Pk ( pk : ĠInt ): ĠUser Entity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġaccount Dao . search By Pk ( pk )?. let Ġ{ Ġcached User Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Entity Mapper . map From Cached ( cached User ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġsearch By Email ( email : ĠString ): ĠUser Entity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġaccount Dao . search By Email ( email )?. let Ġ{ Ġcached User Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġuser Entity Mapper . map From Cached ( cached User ) ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġupdate Account Properties ( pk : ĠInt , Ġemail : ĠString ?, Ġusername : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġaccount Dao . update Account Properties ( pk , Ġemail , Ġusername ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget LoggedIn Email (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġshared Preferences . getString ( PREVIOUS _ AUTH _ USER , Ġnull ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsave LoggedIn Email ( email : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġshared Prefs Editor . putString ( PREVIOUS _ AUTH _ USER , Ġemail ) ĊĠĠĠĠĠĠĠ Ġshared Prefs Editor . apply () ĊĠĠĠ Ġ} Ċ } Ċ