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> { override fun getAllBets(filters: List<BetFilter>): List<Bet> {
return bets.filter { bet -> return bets.filter { bet ->
val finished = if (filters.contains(BetFilter.FINISHED)) { val public = filters.contains(BetFilter.PUBLIC) &&
bet.status in listOf(FINISHED, CANCELLED)
} else false
val public = if (filters.contains(BetFilter.PUBLIC)) {
!bet.isPrivate !bet.isPrivate
} else false
val invitation = if (filters.contains(BetFilter.INVITATION)) { val invitation = filters.contains(BetFilter.INVITATION) &&
bet.isPrivate bet.isPrivate
} else false
val inProgress = if (filters.contains(BetFilter.IN_PROGRESS)) { 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) bet.status in listOf(IN_PROGRESS, WAITING, CLOSING)
} else false
invitation || public || finished || inProgress
(public || invitation) && (finished || inProgress)
} }
} }

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

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

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

Loading…
Cancel
Save