package com.kmalbz.database.service import com.kmalbz.database.DatabaseFactory.dbQuery import com.kmalbz.database.model.ResultObject import com.kmalbz.database.dao.ResultObjects import com.kmalbz.api.model.ApiObject import org.jetbrains.exposed.sql.ResultRow import org.jetbrains.exposed.sql.select import org.jetbrains.exposed.sql.selectAll import org.jetbrains.exposed.sql.transactions.transaction import java.time.LocalDate class ResultObjectService : IResultObjectService { override fun addOne(apiObject: ApiObject) { transaction { ResultObject.new { tag = apiObject.tag probability = apiObject.probability } } } override suspend fun getAllResultObjects(): List = dbQuery { ResultObjects.selectAll().map { toResultObject(it) } } override suspend fun getResultObjectbyTag(tag: String): ApiObject? = dbQuery { ResultObjects.select { (ResultObjects.tag eq tag) }.mapNotNull { toResultObject(it) } .singleOrNull() } override suspend fun getResultObjectbyDate(date: LocalDate): List? = dbQuery { ResultObjects.select { (ResultObjects.date eq date) }.mapNotNull { toResultObject(it) } } override suspend fun getResultObjectbeforeDate(date: LocalDate): List? = dbQuery { ResultObjects.select { (ResultObjects.date less date) }.mapNotNull { toResultObject(it) } } override suspend fun getResultObjectafterDate(date: LocalDate): List? = dbQuery { ResultObjects.select { (ResultObjects.date greater date) }.mapNotNull { toResultObject(it) } } override suspend fun getResultObjecGreaterthanProbability(probability: Double): List? = dbQuery { ResultObjects.select { (ResultObjects.probability greater probability) }.mapNotNull { toResultObject(it) } } override suspend fun getResultObjecLessthanProbability(probability: Double): List? = dbQuery { ResultObjects.select { (ResultObjects.probability less probability) }.mapNotNull { toResultObject(it) } } override suspend fun getResultObjecEqualsProbability(probability: Double): List? = dbQuery { ResultObjects.select { (ResultObjects.probability eq probability) }.mapNotNull { toResultObject(it) } } private fun toResultObject(row: ResultRow): ApiObject = ApiObject( tag = row[ResultObjects.tag], probability = row[ResultObjects.probability] ) }