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

pull/11/head
Lucas DELANIER 11 months ago
parent 84cbc8dbde
commit 929d4bede5

@ -11,49 +11,41 @@ import java.time.ZonedDateTime
class PostgresBetDataSource(private val database: Database) : BetDataSource {
override fun getAllBets(filters: List<BetFilter>): List<Bet> =
database.bets
.filter { bet ->
val public = if (filters.contains(BetFilter.PUBLIC)) {
!bet.isPrivate
} else bet.id eq ""
val invitation = if (filters.contains(BetFilter.INVITATION)) {
bet.isPrivate
} else bet.id eq ""
val finished = if (filters.contains(BetFilter.FINISHED)) {
bet.status inList listOf(BetStatus.FINISHED, BetStatus.CANCELLED)
} else bet.id eq ""
val inProgress = if (filters.contains(BetFilter.IN_PROGRESS)) {
bet.status inList listOf(
override fun getAllBets(filters: List<BetFilter>): List<Bet> {
return when {
filters.isEmpty() -> database.bets.map { it.toBet(database) }
filters.size == 1 -> {
val filter = filters.first()
when (filter) {
BetFilter.PUBLIC -> database.bets.filter { !it.isPrivate }
BetFilter.INVITATION -> database.bets.filter { it.isPrivate }
BetFilter.FINISHED -> database.bets.filter { it.status eq BetStatus.FINISHED }
BetFilter.IN_PROGRESS -> database.bets.filter {
it.status inList listOf(BetStatus.IN_PROGRESS, BetStatus.WAITING, BetStatus.CLOSING)
}
}.map { it.toBet(database) }
}
else -> {
database.bets.filter { bet ->
val public = (BetFilter.PUBLIC in filters) and !bet.isPrivate
val invitation = (BetFilter.INVITATION in filters) and bet.isPrivate
val finished =
(BetFilter.FINISHED in filters) and ((bet.status eq BetStatus.FINISHED) or (bet.status eq BetStatus.CANCELLED))
val inProgress = (BetFilter.IN_PROGRESS in filters) and (bet.status inList listOf(
BetStatus.IN_PROGRESS,
BetStatus.WAITING,
BetStatus.CLOSING
)
} else bet.id eq ""
))
(public or invitation) and (finished or inProgress)
}
.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
(public or invitation) and (finished or inProgress)
}.map { it.toBet(database) }
}
}
}
override fun getBetById(id: String): Bet? =
database.bets.find { it.id eq id }?.toBet(database)

@ -80,8 +80,11 @@ fun Application.betRouter() {
}) {
hasToken { principal ->
verifyUserFromToken(userDataSource, principal) { _, _ ->
val request = call.receive<BetFiltersRequest>()
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets(request.filters))
val filtersRequest =
kotlin.runCatching { call.receiveNullable<BetFiltersRequest>() }.getOrNull()
val filters =
filtersRequest?.filters ?: emptyList() // Use provided filters or empty list if null
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets(filters))
}
}
}

Loading…
Cancel
Save