/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . ĠChristian ĠGr ach Ġ< ch rist ian . gr ach @ cm g apps . com > Ċ Ġ* Ċ Ġ* Ġ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 . cm g apps . android . cur riculum vit ae . infra . di Ċ Ċ import Ġandroidx . datastore . core . DataStore Ċ import Ġcom . cm g apps . android . cur riculum vit ae . data . datastore . as DataStore Model Ċ import Ġcom . cm g apps . android . cur riculum vit ae . data . datastore . as Domain Model Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . db . Employ ment Queries Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . domain . employment Mapper Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . network . Cv ApiService Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . network . as Database Model Ċ import Ġcom . dropbox . android . external . store 4 . Fetcher Ċ import Ġcom . dropbox . android . external . store 4 . Source Of Truth Ċ import Ġcom . dropbox . android . external . store 4 . Store Ċ import Ġcom . dropbox . android . external . store 4 . Store Builder Ċ import Ġcom . squareup . sql de light . runtime . coroutines . as Flow Ċ import Ġcom . squareup . sql de light . runtime . coroutines . map ToList Ċ import Ġcom . squareup . sql de light . runtime . coroutines . map ToOne Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġdagger . h ilt . Install In Ċ import Ġdagger . h ilt . components . Singleton Component Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . Flow Preview Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġjavax . inject . Singleton Ċ import Ġcom . cm g apps . android . cur riculum vit ae . data . datastore . Profile Ġas ĠData Store Profile Ċ import Ġcom . cm g apps . android . cur riculum vit ae . data . datastore . Skills Ġas ĠData Store Skills Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . db . Employ ment Ġas ĠDatabase Employ ment Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . domain . Employ ment Ġas ĠDomain Employ ment Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . domain . Profile Ġas ĠDomain Profile Ċ import Ġcom . cm g apps . common . cur riculum vit ae . data . domain . Skill Ġas ĠDomain Skill Ċ Ċ @ Module Ċ @ Install In ( Singleton Component :: class ) Ċ object ĠStore Module Ġ{ ĊĊĠĠĠ Ġ@ Opt In ( Flow Preview :: class , ĠExperimental Cor outines Api :: class ) ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Profile Store ( ĊĠĠĠĠĠĠĠ Ġdata Store : ĠData Store < DataStore Profile ? >, ĊĠĠĠĠĠĠĠ Ġapi : ĠC v ApiService ĊĠĠĠ Ġ): ĠStore < String , ĠDomain Profile > Ġ= ĠStore Builder . from ( ĊĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of < String , ĠData Store Profile > Ġ{ Ġapi . get Profile (). as DataStore Model () Ġ}, ĊĠĠĠĠĠĠĠ Ġsource Of Truth Ġ= ĠSource Of Truth . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader Ġ= Ġ{ Ġdata Store . data . map Ġ{ Ġit ?. as Domain Model () Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġ_, Ġdata Ġ-> Ġdata Store . update Data Ġ{ Ġdata Ġ} Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Opt In ( Flow Preview :: class , ĠExperimental Cor outines Api :: class ) ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Employ ment List Store ( ĊĠĠĠĠĠĠĠ Ġemploy ment Queries : ĠEmploy ment Queries , ĊĠĠĠĠĠĠĠ Ġapi : ĠC v ApiService ĊĠĠĠ Ġ): ĠStore < String , ĠList < Domain Employ ment >> Ġ= ĊĠĠĠĠĠĠĠ ĠStore Builder . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of < String , ĠList < Database Employ ment >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapi . get Employ ments (). as Database Model () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsource Of Truth Ġ= ĠSource Of Truth . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreader Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemploy ment Queries . selectAll Ordered By StartDate (:: employment Mapper ). as Flow () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map ToList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġ_, Ġemploy ments Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemploy ment Queries . transaction Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemploy ments . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemploy ment Queries . insert Employ ment ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Opt In ( Flow Preview :: class , ĠExperimental Cor outines Api :: class ) ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Employ ment Store ( ĊĠĠĠĠĠĠĠ Ġemploy ment Queries : ĠEmploy ment Queries , ĊĠĠĠ Ġ): ĠStore < Int , ĠDomain Employ ment > Ġ= ĊĠĠĠĠĠĠĠ ĠStore Builder . from ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of Flow Ġ{ Ġid : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġemploy ment Queries . get Employ ment ( id , Ġ:: employment Mapper ). as Flow (). map ToOne () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). build () ĊĊĠĠĠ Ġ@ Opt In ( Flow Preview :: class , ĠExperimental Cor outines Api :: class ) ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Skills Store ( ĊĠĠĠĠĠĠĠ Ġdata Store : ĠData Store < DataStore Skills ? >, ĊĠĠĠĠĠĠĠ Ġapi : ĠC v ApiService ĊĠĠĠ Ġ): ĠStore < String , ĠList < Domain Skill >> Ġ= ĠStore Builder . from ( ĊĠĠĠĠĠĠĠ Ġfetch er Ġ= ĠFetch er . of < String , ĠData Store Skills > Ġ{ Ġapi . get Skills (). as DataStore Model () Ġ}, ĊĠĠĠĠĠĠĠ Ġsource Of Truth Ġ= ĠSource Of Truth . of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreader Ġ= Ġ{ Ġdata Store . data . map Ġ{ Ġit ?. as Domain Model () Ġ} Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwriter Ġ= Ġ{ Ġ_, Ġdata Ġ-> Ġdata Store . update Data Ġ{ Ġdata Ġ} Ġ}, ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ). build () Ċ } Ċ