BetEntity_implementation #4
Merged
lucas.evard
merged 5 commits from BetEntity_implementation
into master
1 year ago
@ -1,4 +1,4 @@
|
|||||||
package allin.dto
|
package allin.dto
|
||||||
import kotlinx.serialization.Serializable
|
import kotlinx.serialization.Serializable
|
||||||
@Serializable
|
@Serializable
|
||||||
data class UserDTO(val username: String, val email: String, val nbCoins: Double, var token:String?)
|
data class UserDTO(val id: String, val username: String, val email: String, val nbCoins: Double, var token:String?)
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
package allin.entities
|
||||||
|
|
||||||
|
import allin.database
|
||||||
|
import allin.entities.ResponsesEntity.getResponse
|
||||||
|
import allin.model.Bet
|
||||||
|
import allin.utils.Execute
|
||||||
|
import org.ktorm.dsl.*
|
||||||
|
import org.ktorm.entity.Entity
|
||||||
|
import org.ktorm.schema.*
|
||||||
|
import java.time.ZoneId
|
||||||
|
import java.time.ZonedDateTime
|
||||||
|
import java.util.UUID.fromString
|
||||||
|
|
||||||
|
|
||||||
|
interface BetEntity : Entity<BetEntity> {
|
||||||
|
val theme: String
|
||||||
|
val sentenceBet: String
|
||||||
|
val endRegistration: ZonedDateTime
|
||||||
|
val endBet: ZonedDateTime
|
||||||
|
val isPrivate: Boolean
|
||||||
|
val createdBy: String
|
||||||
|
}
|
||||||
|
|
||||||
|
object BetsEntity : Table<BetEntity>("bet") {
|
||||||
|
val id = uuid("id").primaryKey()
|
||||||
|
val theme = varchar("theme")
|
||||||
|
val sentenceBet = varchar("sentencebet")
|
||||||
|
val endRegistration = timestamp("endregistration")
|
||||||
|
val endBet = timestamp("endbet")
|
||||||
|
val isPrivate = boolean("isprivate")
|
||||||
|
val createdBy = varchar("createdby")
|
||||||
|
|
||||||
|
fun getBets(): MutableList<Bet> {
|
||||||
|
return database.from(BetsEntity).select().map {
|
||||||
|
row -> Bet(
|
||||||
|
row[id].toString(),
|
||||||
|
row[theme].toString(),
|
||||||
|
row[sentenceBet].toString(),
|
||||||
|
row[endRegistration]!!.atZone(ZoneId.of("Europe/Paris")),
|
||||||
|
row[endBet]!!.atZone(ZoneId.of("Europe/Paris")),
|
||||||
|
row[isPrivate]?: false,
|
||||||
|
getResponse(fromString(row[id].toString())),
|
||||||
|
row[createdBy].toString()
|
||||||
|
)
|
||||||
|
}.toMutableList()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun createBetsTable(){
|
||||||
|
val request="CREATE TABLE IF not exists bet ( id uuid PRIMARY KEY, theme VARCHAR(255), endregistration timestamp,endbet timestamp,sentencebet varchar(500),isprivate boolean, createdby varchar(250))"
|
||||||
|
database.Execute(request)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addBetEntity(bet : Bet) {
|
||||||
|
database.insert(BetsEntity) {
|
||||||
|
set(it.id, fromString(bet.id))
|
||||||
|
set(it.endBet,bet.endBet.toInstant())
|
||||||
|
set(it.endRegistration,bet.endRegistration.toInstant())
|
||||||
|
set(it.sentenceBet,bet.sentenceBet)
|
||||||
|
set(it.theme, bet.theme)
|
||||||
|
set(it.isPrivate, bet.isPrivate)
|
||||||
|
set(it.createdBy, bet.createdBy)
|
||||||
|
}
|
||||||
|
ResponsesEntity.addResponse(bet.response,fromString(bet.id))
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package allin.entities
|
||||||
|
|
||||||
|
import allin.database
|
||||||
|
import allin.utils.Execute
|
||||||
|
import org.ktorm.dsl.*
|
||||||
|
import org.ktorm.entity.Entity
|
||||||
|
import org.ktorm.schema.Table
|
||||||
|
import org.ktorm.schema.uuid
|
||||||
|
import org.ktorm.schema.varchar
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
|
interface ResponseEntity : Entity<ResponseEntity> {
|
||||||
|
val betId: UUID
|
||||||
|
val response: String
|
||||||
|
}
|
||||||
|
|
||||||
|
object ResponsesEntity : Table<ResponseEntity>("response") {
|
||||||
|
val id = uuid("id").primaryKey()
|
||||||
|
val response = varchar("response").primaryKey()
|
||||||
|
fun createResponseTable(){
|
||||||
|
val request="CREATE TABLE IF NOT EXISTS response (id UUID,response VARCHAR(250),CONSTRAINT pk_response_id PRIMARY KEY (id,response));"
|
||||||
|
database.Execute(request)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getResponse(idBet: UUID): MutableList<String> {
|
||||||
|
return database.from(ResponsesEntity)
|
||||||
|
.select(response)
|
||||||
|
.where { id eq idBet }
|
||||||
|
.map { it[response].toString() }.toMutableList()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun addResponse(responses : MutableList<String>, idBet : UUID ) {
|
||||||
|
responses.forEach {selected ->
|
||||||
|
database.insert(ResponsesEntity) {
|
||||||
|
set(it.id, idBet)
|
||||||
|
set(it.response,selected)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package allin.serializer
|
||||||
|
|
||||||
|
import kotlinx.serialization.KSerializer
|
||||||
|
import kotlinx.serialization.descriptors.PrimitiveKind
|
||||||
|
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
|
||||||
|
import kotlinx.serialization.encoding.Decoder
|
||||||
|
import kotlinx.serialization.encoding.Encoder
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
object UUIDSerializer : KSerializer<UUID> {
|
||||||
|
override val descriptor = PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)
|
||||||
|
|
||||||
|
override fun deserialize(decoder: Decoder): UUID {
|
||||||
|
return UUID.fromString(decoder.decodeString())
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun serialize(encoder: Encoder, value: UUID) {
|
||||||
|
encoder.encodeString(value.toString())
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue