package Ġcom . be esh am . weather app . data . db Ċ Ċ import Ġcom . be esh am . weather app . domain . dataSource . Forecast DataSource Ċ import Ġcom . be esh am . weather app . domain . model . Forecast Ċ import Ġcom . be esh am . weather app . domain . model . Forecast List Ċ import Ġcom . be esh am . weather app . extensions .* Ċ import Ġorg . jetbrains . ank o . db . insert Ċ import Ġorg . jetbrains . ank o . db . select Ċ Ċ class ĠFore cast Db ( ĊĠĠĠĠĠĠĠ Ġval Ġforecast Db Helper : ĠFore cast Db Helper Ġ= ĠFore cast Db Helper . instance , ĊĠĠĠĠĠĠĠ Ġval Ġdata Mapper : ĠDb Data Mapper Ġ= ĠDb Data Mapper ()): ĠFore cast DataSource Ġ{ ĊĊĊĊĠĠĠ Ġoverride Ġfun Ġrequest Forecast By Zip Code ( zip Code : ĠLong , Ġdate : ĠLong ) Ġ= Ġforecast Db Helper . use { ĊĠĠĠĠĠĠĠ Ġval Ġdaily Request Ġ= Ġ"${ Day Forecast Table . C ITY _ ID } Ġ= Ġ? Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" AND Ġ${ Day Forecast Table . DATE } Ġ>= Ġ? " ĊĊĠĠĠĠĠĠĠ Ġval Ġdaily Forecast Ġ= Ġselect ( Day Forecast Table . NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Simple ( daily Request , Ġzip Code . toString (), Ġdate . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse List Ġ{ ĠDay Forecast ( HashMap ( it ))} ĊĊĠĠĠĠĠĠĠ Ġval Ġcity Ġ= Ġselect ( City Forecast Table . NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. where Simple ("${ City Forecast Table . ID } Ġ= Ġ?", Ġzip Code . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parse Opt Ġ{ ĠCity Forecast ( HashMap ( it ), Ġdaily Forecast )} ĊĊĠĠĠĠĠĠĠ Ġcity ?. let Ġ{ Ġdata Mapper . convertTo Domain ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Forecast ( forecast : ĠFore cast List ) Ġ= Ġforecast Db Helper . use Ġ{ ĊĊĠĠĠĠĠĠĠ Ġclear ( City Forecast Table . NAME ) ĊĠĠĠĠĠĠĠ Ġclear ( Day Forecast Table . NAME ) ĊĊĠĠĠĠĠĠĠ Ġwith ( data Mapper . convert From Domain ( forecast )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinsert ( City Forecast Table . NAME , Ġ* map . to Var arg Array ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Forecast . forEach Ġ{ Ġinsert ( Day Forecast Table . NAME , Ġ* it . map . to Var arg Array ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrequest Day Forecast ( id : ĠLong ): ĠFore cast ? Ġ= Ġ Ġforecast Db Helper . use Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġforecast Ġ= Ġselect ( Day Forecast Table . NAME ). by Id ( id ). parse Opt Ġ{ ĠDay Forecast ( HashMap ( it )) Ġ} ĊĠĠĠĠĠĠĠ Ġ// function Ġwill Ġonly Ġexecute Ġif Ġforecast Ġis Ġnot Ġnull , Ġelse Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġforecast ?. let Ġ{ Ġdata Mapper . convert Day To Domain ( it ) Ġ} ĊĠĠĠ Ġ} Ċ Ċ } ĊĊ