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.dto.UserDTO
import allin.model.User import allin.model.User
import allin.utils.Execute import allin.utils.Execute
import io.ktor.util.date.*
import org.h2.util.DateTimeUtils.currentTimestamp
import org.ktorm.dsl.* import org.ktorm.dsl.*
import org.ktorm.entity.* import org.ktorm.entity.*
import org.ktorm.schema.* import org.ktorm.schema.*
import java.time.Duration
import java.util.* import java.util.*
import java.util.UUID.fromString import java.util.UUID.fromString
@ -22,6 +25,8 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
val password = varchar("password") val password = varchar("password")
val nbCoins = double("coins") val nbCoins = double("coins")
val email = varchar("email") val email = varchar("email")
val lastGift = varchar("lastgift")
fun getUserToUserDTO(): MutableList<UserDTO> { fun getUserToUserDTO(): MutableList<UserDTO> {
return database.from(UsersEntity).select().map { return database.from(UsersEntity).select().map {
@ -36,7 +41,7 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
} }
fun createUserTable(){ 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) database.Execute(request)
} }
@ -75,6 +80,18 @@ object UsersEntity : Table<UserEntity>("utilisateur") {
} }
return deletedCount > 0 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 package allin.model
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlin.random.Random
@Serializable @Serializable
data class User( data class User(
@ -25,3 +25,7 @@ data class CheckUser(
val login: String, val login: String,
val password: String val password: String
) )
fun getDailyGift() : Int{
return Random.nextInt(10,150)
}

@ -1,15 +1,13 @@
package allin.routing package allin.routing
import allin.entities.UsersEntity.addUserEntity import allin.entities.UsersEntity.addUserEntity
import allin.entities.UsersEntity.canHaveDailyGift
import allin.entities.UsersEntity.deleteUserByUsername import allin.entities.UsersEntity.deleteUserByUsername
import allin.entities.UsersEntity.getUserByUsernameAndPassword import allin.entities.UsersEntity.getUserByUsernameAndPassword
import allin.entities.UsersEntity.getUserToUserDTO import allin.entities.UsersEntity.getUserToUserDTO
import allin.ext.hasToken import allin.ext.hasToken
import allin.ext.verifyUserFromToken import allin.ext.verifyUserFromToken
import allin.model.ApiMessage import allin.model.*
import allin.model.CheckUser
import allin.model.User
import allin.model.UserRequest
import allin.utils.AppConfig import allin.utils.AppConfig
import io.ktor.http.* import io.ktor.http.*
import io.ktor.server.application.* 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 allin.database
import org.ktorm.database.Database import org.ktorm.database.Database
import java.sql.ResultSet
fun Database.Execute(request: String){ fun Database.Execute(request: String): ResultSet? {
if(!request.isNullOrEmpty()) try {
database.useTransaction { if (!request.isNullOrEmpty()) {
val connection = it.connection return database.useTransaction { transaction ->
connection.prepareStatement(request).execute() val connection = transaction.connection
connection.commit() val resultSet = connection.prepareStatement(request).executeQuery()
resultSet
} }
} }
} catch (e: Exception){
println(e.message)
return null
}
return null
}
Loading…
Cancel
Save