123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- package com.ted.weather.data.db
- import com.ted.weather.domain.datasource.ForecastDataSource
- import com.ted.weather.domain.model.ForecastList
- import com.ted.weather.extensions.*
- import org.jetbrains.anko.db.insert
- import org.jetbrains.anko.db.select
- import java.util.*
- class ForecastDb(val forecastDbHelper: ForecastDbHelper = ForecastDbHelper.instance,
- val dataMapper: DbDataMapper = DbDataMapper()) : ForecastDataSource {
- override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {
- val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
- val dailyForecast = select(DayForecastTable.NAME)
- .whereSimple(dailyRequest, zipCode.toString(), date.toString())
- .parseList { DayForecast(HashMap(it)) }
- val city = select(CityForecastTable.NAME)
- .whereSimple("${CityForecastTable.ID} = ?", zipCode.toString())
- .parseOpt { CityForecast(HashMap(it), dailyForecast) }
- city?.let { dataMapper.convertToDomain(it) }
- }
- override fun requestDayForecast(id: Long) = forecastDbHelper.use {
- val forecast = select(DayForecastTable.NAME).byId(id).
- parseOpt { DayForecast(HashMap(it)) }
- forecast?.let { dataMapper.convertDayToDomain(it) }
- }
- fun saveForecast(forecast: ForecastList) = forecastDbHelper.use {
- clear(CityForecastTable.NAME)
- clear(DayForecastTable.NAME)
- with(dataMapper.convertFromDomain(forecast)) {
- insert(CityForecastTable.NAME, *map.toVarargArray())
- dailyForecast.forEach { insert(DayForecastTable.NAME, *it.map.toVarargArray()) }
- }
- }
- }
|