Fix filters [db]
continuous-integration/drone/pr Build is failing Details
continuous-integration/drone/push Build is passing Details

pull/11/head
avalin 11 months ago
parent ca0cebe70b
commit deaa76c8f6

@ -17,20 +17,20 @@ class MockBetDataSource(private val mockData: MockDataSource.MockData) : BetData
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
val public = filters.contains(BetFilter.PUBLIC) &&
!bet.isPrivate
val invitation = filters.contains(BetFilter.INVITATION) &&
bet.isPrivate
val finished = filters.contains(BetFilter.FINISHED) &&
bet.status in listOf(FINISHED, CANCELLED)
val inProgress = filters.contains(BetFilter.IN_PROGRESS) &&
bet.status in listOf(IN_PROGRESS, WAITING, CLOSING)
(public || invitation) && (finished || inProgress)
}
}

@ -13,6 +13,29 @@ 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(
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)
@ -27,7 +50,7 @@ class PostgresBetDataSource(private val database: Database) : BetDataSource {
bet.status in listOf(BetStatus.IN_PROGRESS, BetStatus.WAITING, BetStatus.CLOSING)
} else false
if (invitation || public || finished || inProgress) {
if ((invitation || public) && (finished || inProgress)) {
bet.toBet(database)
} else null
}
@ -39,7 +62,7 @@ class PostgresBetDataSource(private val database: Database) : BetDataSource {
database.bets.find { it.id eq id }?.toBetDetail(database, username)
override fun getBetsNotFinished(): List<Bet> {
val currentTime = ZonedDateTime.now(ZoneId.of("Europe/Paris"))
val currentTime = ZonedDateTime.now(ZoneId.of("+02:00"))
return database.bets
.filter { it.endBet greaterEq currentTime.toInstant() }
.map { it.toBet(database) }

@ -1,8 +1,15 @@
package allin.model
import kotlinx.serialization.Serializable
enum class BetFilter {
PUBLIC,
INVITATION,
IN_PROGRESS,
FINISHED
}
@Serializable
data class BetFiltersRequest(
val filters: List<BetFilter>
)

@ -61,10 +61,13 @@ fun Application.betRouter() {
}
}
authenticate {
get("/bets/gets", {
post("/bets/gets", {
description = "Allows you to recover all bets"
request {
headerParameter<JWTPrincipal>("JWT token of the logged user")
body<List<BetFilter>> {
description = "List of filters"
}
}
response {
HttpStatusCode.Accepted to {
@ -77,8 +80,8 @@ fun Application.betRouter() {
}) {
hasToken { principal ->
verifyUserFromToken(userDataSource, principal) { _, _ ->
val filters = call.receive<List<BetFilter>>()
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets(filters))
val request = call.receive<BetFiltersRequest>()
call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets(request.filters))
}
}
}

Loading…
Cancel
Save