Add Bet and response entity, refactor and modification UserDTO

pull/4/head
luevard 1 year ago
parent 3e59a3224e
commit a79984e781

@ -1,5 +1,8 @@
package allin
import allin.entities.BetEntity
import allin.entities.BetsEntity
import allin.entities.ResponsesEntity
import allin.entities.UsersEntity
import allin.routing.BasicRouting
import allin.routing.BetRouter
@ -52,4 +55,6 @@ private fun Application.extracted() {
BetRouter()
ParticipationRouter()
UsersEntity.createUserTable()
BetsEntity.createBetsTable()
ResponsesEntity.createResponseTable()
}

@ -1,4 +1,4 @@
package allin.dto
import kotlinx.serialization.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,42 @@
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)
}
}
}
}

@ -27,6 +27,7 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
fun getUserToUserDTO(): MutableList<UserDTO> {
return database.from(UsersEntity).select().map {
row -> UserDTO(
row[id].toString(),
row[username].toString(),
row[email].toString(),
row[nbCoins]?:0.0,
@ -36,7 +37,7 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
}
fun createUserTable(){
val request="CREATE TABLE IF not exists utilisateur ( id SERIAL PRIMARY KEY, username VARCHAR(255), password VARCHAR(255),coins double precision,email VARCHAR(255))"
val request="CREATE TABLE IF not exists utilisateur ( id uuid PRIMARY KEY, username VARCHAR(255), password VARCHAR(255),coins double precision,email VARCHAR(255))"
database.Execute(request)
}
@ -48,6 +49,7 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
.map { row ->
Pair(
UserDTO(
row[id].toString(),
row[username].toString(),
row[email].toString(),
row[nbCoins] ?: 0.0,

@ -3,17 +3,18 @@ package allin.model
import allin.serializer.ZonedDateTimeSerializer
import kotlinx.serialization.Serializable
import java.time.ZonedDateTime
import java.util.*
@Serializable
data class Bet(
val id: String,
val id: String = "",
val theme: String,
val sentenceBet: String,
@Serializable(ZonedDateTimeSerializer::class) val endRegistration: ZonedDateTime,
@Serializable(ZonedDateTimeSerializer::class) var endBet: ZonedDateTime,
var isPrivate: Boolean,
var response: MutableList<String>,
val createdBy: String
val createdBy: String = ""
)
@Serializable
@ -22,15 +23,4 @@ data class UpdatedBetData(
@Serializable(ZonedDateTimeSerializer::class) val endBet: ZonedDateTime,
val isPrivate: Boolean,
val response: MutableList<String>
)
@Serializable
data class BetWithoutId(
val theme: String,
val sentenceBet: String,
@Serializable(ZonedDateTimeSerializer::class) val endRegistration: ZonedDateTime,
@Serializable(ZonedDateTimeSerializer::class) var endBet: ZonedDateTime,
var isPrivate: Boolean,
var response: MutableList<String>,
val createdBy: String
)

@ -1,4 +1,4 @@
package allin.model
package allin.model
import kotlinx.serialization.Serializable

@ -1,5 +1,7 @@
package allin.routing
import allin.entities.BetsEntity.addBetEntity
import allin.entities.BetsEntity.getBets
import allin.ext.hasToken
import allin.ext.verifyUserFromToken
import allin.model.ApiMessage
@ -14,16 +16,19 @@ import io.ktor.server.response.*
import io.ktor.server.routing.*
import java.util.*
val bets = mutableListOf<Bet>()
//val bets = mutableListOf<Bet>()
val tokenManagerBet = AppConfig.tokenManager
fun Application.BetRouter() {
routing {
route("/bets/add") {
authenticate {
post {
hasToken { principal ->
val bet = call.receive<Bet>()
val id = UUID.randomUUID().toString()
val username = tokenManagerBet.getUsernameFromToken(bet.createdBy)
val username = tokenManagerBet.getUsernameFromToken(principal)
val bets = getBets()
bets.find { it.id == id }?.let {
call.respond(HttpStatusCode.Conflict, ApiMessage.BetAlreadyExist)
} ?: run {
@ -37,15 +42,21 @@ fun Application.BetRouter() {
bet.response,
username
)
bets.add(betWithId)
//bets.add(betWithId)
addBetEntity(betWithId)
call.respond(HttpStatusCode.Created, betWithId)
}
}
}
}
}
route("/bets/gets") {
get {
// if(bets.size>0)
val bets= getBets()
call.respond(HttpStatusCode.Accepted, bets.toList())
// else call.respond(HttpStatusCode.NoContent)
}
@ -53,6 +64,7 @@ fun Application.BetRouter() {
route("/bets/get/{id}") {
get {
val bets= getBets()
val id = call.parameters["id"] ?: ""
bets.find { it.id == id }?.let { bet ->
call.respond(HttpStatusCode.Accepted, bet)
@ -63,6 +75,7 @@ fun Application.BetRouter() {
route("/bets/delete") {
post {
val idbet = call.receive<Map<String, String>>()["id"]
val bets= getBets()
bets.find { it.id == idbet }?.let { findbet ->
bets.remove(findbet)
call.respond(HttpStatusCode.Accepted, findbet)
@ -72,6 +85,7 @@ fun Application.BetRouter() {
route("bets/update") {
post {
val updatedBetData = call.receive<UpdatedBetData>()
val bets= getBets()
bets.find { it.id == updatedBetData.id }?.let { findbet ->
findbet.endBet = updatedBetData.endBet
findbet.isPrivate = updatedBetData.isPrivate
@ -83,6 +97,7 @@ fun Application.BetRouter() {
authenticate {
get("/bets/current") {
val bets= getBets()
hasToken { principal ->
verifyUserFromToken(principal) { user, _ ->
val bets = participations

@ -1,14 +1,19 @@
package allin.serializer
import kotlinx.serialization.*
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.sql.Timestamp
import java.time.Instant
import java.time.ZoneId
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
@Serializer(ZonedDateTime::class)
object ZonedDateTimeSerializer : KSerializer<ZonedDateTime> {
private val formatter: DateTimeFormatter = DateTimeFormatter.ISO_ZONED_DATE_TIME
@ -24,4 +29,11 @@ object ZonedDateTimeSerializer : KSerializer<ZonedDateTime> {
val dateString = decoder.decodeString()
return ZonedDateTime.parse(dateString, formatter)
}
fun convertTimestampToZonedDateTime(ts: Instant?): ZonedDateTime {
println(ts.toString())
val zoneId = ZoneId.of("Asia/Kolkata")
return ZonedDateTime.ofInstant(ts, zoneId)
}
}

@ -6,6 +6,7 @@ import com.auth0.jwt.JWT
import com.auth0.jwt.JWTVerifier
import com.auth0.jwt.algorithms.Algorithm
import com.auth0.jwt.interfaces.DecodedJWT
import io.ktor.server.auth.jwt.*
import io.ktor.server.config.*
import java.util.*
@ -70,9 +71,8 @@ class TokenManager private constructor(val config: HoconApplicationConfig) {
fun getUserToken(user: User): String? = user.token
fun getUserToken(user: UserDTO): String? = user.token
fun getUsernameFromToken(token: String): String {
val decodedJWT: DecodedJWT = JWT.decode(token)
return decodedJWT.getClaim("username").asString()
fun getUsernameFromToken(principal: JWTPrincipal): String {
return principal.payload.getClaim("username").asString()
}
companion object {

Loading…
Cancel
Save