Add Daily gift route and SQL request
continuous-integration/drone/push Build is passing Details

pull/7/head
luevard 1 year ago
parent d4483be0d3
commit dee7856db2

@ -4,9 +4,12 @@ import allin.database
import allin.dto.UserDTO
import allin.model.User
import allin.utils.Execute
import io.ktor.util.date.*
import org.h2.util.DateTimeUtils.currentTimestamp
import org.ktorm.dsl.*
import org.ktorm.entity.*
import org.ktorm.schema.*
import java.time.Duration
import java.util.*
import java.util.UUID.fromString
@ -22,6 +25,8 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
val password = varchar("password")
val nbCoins = double("coins")
val email = varchar("email")
val lastGift = varchar("lastgift")
fun getUserToUserDTO(): MutableList<UserDTO> {
return database.from(UsersEntity).select().map {
@ -36,7 +41,7 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
}
fun createUserTable(){
val request="CREATE TABLE IF not exists utilisateur ( id uuid 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), lastgift timestamp)"
database.Execute(request)
}
@ -75,6 +80,18 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
}
return deletedCount > 0
}
fun canHaveDailyGift(username: String): Boolean {
val request = "SELECT CASE WHEN lastgift IS NULL THEN TRUE ELSE lastgift < current_timestamp - interval '1 day' END AS can_have_daily_gift, " +
"CASE WHEN lastgift IS NULL THEN null ELSE current_timestamp - lastgift END AS time_remaining " +
"FROM utilisateur WHERE username = '$username';"
val returnCode= database.Execute(request)
if(returnCode?.next().toString()=="true"){
return true
}
return false
}
}

@ -1,7 +1,7 @@
package allin.model
import kotlinx.serialization.Serializable
import kotlin.random.Random
@Serializable
data class User(
@ -25,3 +25,7 @@ data class CheckUser(
val login: String,
val password: String
)
fun getDailyGift() : Int{
return Random.nextInt(10,150)
}

@ -1,15 +1,13 @@
package allin.routing
import allin.entities.UsersEntity.addUserEntity
import allin.entities.UsersEntity.canHaveDailyGift
import allin.entities.UsersEntity.deleteUserByUsername
import allin.entities.UsersEntity.getUserByUsernameAndPassword
import allin.entities.UsersEntity.getUserToUserDTO
import allin.ext.hasToken
import allin.ext.verifyUserFromToken
import allin.model.ApiMessage
import allin.model.CheckUser
import allin.model.User
import allin.model.UserRequest
import allin.model.*
import allin.utils.AppConfig
import io.ktor.http.*
import io.ktor.server.application.*
@ -93,6 +91,15 @@ fun Application.UserRouter() {
}
}
}
get("/users/gift") {
hasToken { principal ->
verifyUserFromToken(principal) { userDto, _ ->
if(canHaveDailyGift(userDto.username))
call.respond(HttpStatusCode.OK, getDailyGift())
else call.respond(HttpStatusCode.MethodNotAllowed,"Le cadeau ne peut pas être récupéré")
}
}
}
}
}
}

@ -2,12 +2,20 @@ package allin.utils
import allin.database
import org.ktorm.database.Database
import java.sql.ResultSet
fun Database.Execute(request: String){
if(!request.isNullOrEmpty())
database.useTransaction {
val connection = it.connection
connection.prepareStatement(request).execute()
connection.commit()
fun Database.Execute(request: String): ResultSet? {
try {
if (!request.isNullOrEmpty()) {
return database.useTransaction { transaction ->
val connection = transaction.connection
val resultSet = connection.prepareStatement(request).executeQuery()
resultSet
}
}
} catch (e: Exception){
println(e.message)
return null
}
return null
}
Loading…
Cancel
Save