ForecastDb.kt 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package com.ted.weather.data.db
  2. import com.ted.weather.domain.datasource.ForecastDataSource
  3. import com.ted.weather.domain.model.ForecastList
  4. import com.ted.weather.extensions.*
  5. import org.jetbrains.anko.db.insert
  6. import org.jetbrains.anko.db.select
  7. import java.util.*
  8. class ForecastDb(val forecastDbHelper: ForecastDbHelper = ForecastDbHelper.instance,
  9. val dataMapper: DbDataMapper = DbDataMapper()) : ForecastDataSource {
  10. override fun requestForecastByZipCode(zipCode: Long, date: Long) = forecastDbHelper.use {
  11. val dailyRequest = "${DayForecastTable.CITY_ID} = ? AND ${DayForecastTable.DATE} >= ?"
  12. val dailyForecast = select(DayForecastTable.NAME)
  13. .whereSimple(dailyRequest, zipCode.toString(), date.toString())
  14. .parseList { DayForecast(HashMap(it)) }
  15. val city = select(CityForecastTable.NAME)
  16. .whereSimple("${CityForecastTable.ID} = ?", zipCode.toString())
  17. .parseOpt { CityForecast(HashMap(it), dailyForecast) }
  18. city?.let { dataMapper.convertToDomain(it) }
  19. }
  20. override fun requestDayForecast(id: Long) = forecastDbHelper.use {
  21. val forecast = select(DayForecastTable.NAME).byId(id).
  22. parseOpt { DayForecast(HashMap(it)) }
  23. forecast?.let { dataMapper.convertDayToDomain(it) }
  24. }
  25. fun saveForecast(forecast: ForecastList) = forecastDbHelper.use {
  26. clear(CityForecastTable.NAME)
  27. clear(DayForecastTable.NAME)
  28. with(dataMapper.convertFromDomain(forecast)) {
  29. insert(CityForecastTable.NAME, *map.toVarargArray())
  30. dailyForecast.forEach { insert(DayForecastTable.NAME, *it.map.toVarargArray()) }
  31. }
  32. }
  33. }