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

@ -80,8 +80,11 @@ fun Application.betRouter() {
}) { }) {
hasToken { principal -> hasToken { principal ->
verifyUserFromToken(userDataSource, principal) { _, _ -> verifyUserFromToken(userDataSource, principal) { _, _ ->
val request = call.receive<BetFiltersRequest>() val filtersRequest =
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets(request.filters)) 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