add filter get bets
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/pr Build is failing Details

pull/11/head
Lucas DELANIER 11 months ago
parent af013b6666
commit ca0cebe70b

@ -1,13 +1,10 @@
package allin.data package allin.data
import allin.model.Bet import allin.model.*
import allin.model.BetDetail
import allin.model.BetResultDetail
import allin.model.UpdatedBetData
import java.time.ZonedDateTime import java.time.ZonedDateTime
interface BetDataSource { interface BetDataSource {
fun getAllBets(): List<Bet> fun getAllBets(filters: List<BetFilter>): List<Bet>
fun getBetById(id: String): Bet? fun getBetById(id: String): Bet?
fun getBetDetailById(id: String, username: String): BetDetail? fun getBetDetailById(id: String, username: String): BetDetail?
fun getBetsNotFinished(): List<Bet> fun getBetsNotFinished(): List<Bet>

@ -15,7 +15,26 @@ class MockBetDataSource(private val mockData: MockDataSource.MockData) : BetData
private val betInfos get() = mockData.betInfos private val betInfos get() = mockData.betInfos
private val answerInfos get() = mockData.answerInfos private val answerInfos get() = mockData.answerInfos
override fun getAllBets(): List<Bet> = bets override fun getAllBets(filters: List<BetFilter>): List<Bet> {
return bets.filter { bet ->
val finished = if (filters.contains(BetFilter.FINISHED)) {
bet.status in listOf(FINISHED, CANCELLED)
} else false
val public = if (filters.contains(BetFilter.PUBLIC)) {
!bet.isPrivate
} else false
val invitation = if (filters.contains(BetFilter.INVITATION)) {
bet.isPrivate
} else false
val inProgress = if (filters.contains(BetFilter.IN_PROGRESS)) {
bet.status in listOf(IN_PROGRESS, WAITING, CLOSING)
} else false
invitation || public || finished || inProgress
}
}
override fun getBetById(id: String): Bet? = override fun getBetById(id: String): Bet? =
bets.find { it.id == id } bets.find { it.id == id }

@ -11,8 +11,26 @@ import java.time.ZonedDateTime
class PostgresBetDataSource(private val database: Database) : BetDataSource { class PostgresBetDataSource(private val database: Database) : BetDataSource {
override fun getAllBets(): List<Bet> = override fun getAllBets(filters: List<BetFilter>): List<Bet> =
database.bets.map { it.toBet(database) } database.bets
.mapNotNull { bet ->
val finished = if (filters.contains(BetFilter.FINISHED)) {
bet.status in listOf(BetStatus.FINISHED, BetStatus.CANCELLED)
} else false
val public = if (filters.contains(BetFilter.PUBLIC)) {
!bet.isPrivate
} else false
val invitation = if (filters.contains(BetFilter.INVITATION)) {
bet.isPrivate
} else false
val inProgress = if (filters.contains(BetFilter.IN_PROGRESS)) {
bet.status in listOf(BetStatus.IN_PROGRESS, BetStatus.WAITING, BetStatus.CLOSING)
} else false
if (invitation || public || finished || inProgress) {
bet.toBet(database)
} else null
}
override fun getBetById(id: String): Bet? = override fun getBetById(id: String): Bet? =
database.bets.find { it.id eq id }?.toBet(database) database.bets.find { it.id eq id }?.toBet(database)

@ -0,0 +1,8 @@
package allin.model
enum class BetFilter {
PUBLIC,
INVITATION,
IN_PROGRESS,
FINISHED
}

@ -77,7 +77,8 @@ fun Application.betRouter() {
}) { }) {
hasToken { principal -> hasToken { principal ->
verifyUserFromToken(userDataSource, principal) { _, _ -> verifyUserFromToken(userDataSource, principal) { _, _ ->
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets()) val filters = call.receive<List<BetFilter>>()
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets(filters))
} }
} }
} }

Loading…
Cancel
Save