From ca0cebe70b5f70d790b17d13820cf8c94bb12ebd Mon Sep 17 00:00:00 2001 From: ludelanier Date: Wed, 15 May 2024 11:35:12 +0200 Subject: [PATCH] add filter get bets --- .../main/kotlin/allin/data/BetDataSource.kt | 7 ++---- .../allin/data/mock/MockBetDataSource.kt | 21 +++++++++++++++++- .../data/postgres/PostgresBetDataSource.kt | 22 +++++++++++++++++-- .../src/main/kotlin/allin/model/BetFilter.kt | 8 +++++++ .../main/kotlin/allin/routing/betRouter.kt | 3 ++- 5 files changed, 52 insertions(+), 9 deletions(-) create mode 100644 Sources/src/main/kotlin/allin/model/BetFilter.kt diff --git a/Sources/src/main/kotlin/allin/data/BetDataSource.kt b/Sources/src/main/kotlin/allin/data/BetDataSource.kt index 7aa2762..f8f8441 100644 --- a/Sources/src/main/kotlin/allin/data/BetDataSource.kt +++ b/Sources/src/main/kotlin/allin/data/BetDataSource.kt @@ -1,13 +1,10 @@ package allin.data -import allin.model.Bet -import allin.model.BetDetail -import allin.model.BetResultDetail -import allin.model.UpdatedBetData +import allin.model.* import java.time.ZonedDateTime interface BetDataSource { - fun getAllBets(): List + fun getAllBets(filters: List): List fun getBetById(id: String): Bet? fun getBetDetailById(id: String, username: String): BetDetail? fun getBetsNotFinished(): List diff --git a/Sources/src/main/kotlin/allin/data/mock/MockBetDataSource.kt b/Sources/src/main/kotlin/allin/data/mock/MockBetDataSource.kt index 20a20ec..d298ca3 100644 --- a/Sources/src/main/kotlin/allin/data/mock/MockBetDataSource.kt +++ b/Sources/src/main/kotlin/allin/data/mock/MockBetDataSource.kt @@ -15,7 +15,26 @@ class MockBetDataSource(private val mockData: MockDataSource.MockData) : BetData private val betInfos get() = mockData.betInfos private val answerInfos get() = mockData.answerInfos - override fun getAllBets(): List = bets + override fun getAllBets(filters: List): List { + 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? = bets.find { it.id == id } diff --git a/Sources/src/main/kotlin/allin/data/postgres/PostgresBetDataSource.kt b/Sources/src/main/kotlin/allin/data/postgres/PostgresBetDataSource.kt index f650a69..b63c297 100644 --- a/Sources/src/main/kotlin/allin/data/postgres/PostgresBetDataSource.kt +++ b/Sources/src/main/kotlin/allin/data/postgres/PostgresBetDataSource.kt @@ -11,8 +11,26 @@ import java.time.ZonedDateTime class PostgresBetDataSource(private val database: Database) : BetDataSource { - override fun getAllBets(): List = - database.bets.map { it.toBet(database) } + override fun getAllBets(filters: List): List = + 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? = database.bets.find { it.id eq id }?.toBet(database) diff --git a/Sources/src/main/kotlin/allin/model/BetFilter.kt b/Sources/src/main/kotlin/allin/model/BetFilter.kt new file mode 100644 index 0000000..a0b3b72 --- /dev/null +++ b/Sources/src/main/kotlin/allin/model/BetFilter.kt @@ -0,0 +1,8 @@ +package allin.model + +enum class BetFilter { + PUBLIC, + INVITATION, + IN_PROGRESS, + FINISHED +} \ No newline at end of file diff --git a/Sources/src/main/kotlin/allin/routing/betRouter.kt b/Sources/src/main/kotlin/allin/routing/betRouter.kt index 2cc737f..fbbfe56 100644 --- a/Sources/src/main/kotlin/allin/routing/betRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/betRouter.kt @@ -77,7 +77,8 @@ fun Application.betRouter() { }) { hasToken { principal -> verifyUserFromToken(userDataSource, principal) { _, _ -> - call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets()) + val filters = call.receive>() + call.respond(HttpStatusCode.Accepted, betDataSource.getAllBets(filters)) } } }