/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ 2 0 2 0 ĠC rist ian ĠMen Ã¡ rg ue z ĠG on z Ã¡ lez Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* Ġ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* Ġ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* Ġ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ Ċ package Ġcom . cri st ian mg . repositories Ċ Ċ import Ġcom . cri st ian mg . model . exception . Failure Ċ import Ġcom . cri st ian mg . common _ objects . functional . Either Ċ import Ġcom . cri st ian mg . database . dao . Task Dao Ċ import Ġcom . cri st ian mg . model . Task Ċ import Ġcom . cri st ian mg . model . User Ċ import Ġcom . cri st ian mg . repositories . mapper . Task Mapper Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . catch Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġjavax . inject . Inject Ċ Ċ interface ĠTask Repository Ġ{ ĊĊĠĠĠ Ġfun Ġtask (): ĠEither < Failure , ĠList < Task >> ĊĠĠĠ Ġfun Ġinsert Task To User ( task : ĠTask , Ġuser : ĠUser ): ĠEither < Failure , ĠUnit > ĊĠĠĠ Ġfun Ġobserve Task User Change ( userId : ĠString ): ĠFlow < Either < Failure , ĠList < Task >>> ĊĠĠĠ Ġfun Ġcomplete Task ( task : ĠTask ): ĠEither < Failure , ĠUnit > ĊĊĠĠĠ Ġclass ĠDisk Ġ@ Inject Ġconstructor ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġtask Mapper : ĠTask Mapper , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġcache : ĠTask Dao ) Ġ: ĠTask Repository Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtask (): ĠEither < Failure , ĠList < Task >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEither . wrap Function Ġ{ Ġtask Mapper . map List To Model ( cache . getAll ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinsert Task To User ( task : ĠTask , Ġuser : ĠUser ) Ġ= ĠEither . wrap Function Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask . userId Ġ= Ġuser . id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcache . insert ( task Mapper . map To Entity ( task )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcomplete Task ( task : ĠTask ): ĠEither < Failure , ĠUnit > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEither . wrap Function Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache . update Task ( task Mapper . map To Entity ( task )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠOne Ġof Ġthem Ġis Ġdeprecated Ġand Ġanother Ġis ĠExperimental ĠO _ O ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġobserve Task User Change ( userId : ĠString ): ĠFlow < Either < Failure , ĠList < Task >>> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcache . get Task ByUser Until Changed ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ ĠEither . Right ( task Mapper . map List To Model ( it )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. catch Ġ{ ĠEither . Left ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ } Ċ