diff --git a/Sources/src/main/kotlin/allin/entities/UserEntity.kt b/Sources/src/main/kotlin/allin/entities/UserEntity.kt index 9a1bcfc..72385c4 100644 --- a/Sources/src/main/kotlin/allin/entities/UserEntity.kt +++ b/Sources/src/main/kotlin/allin/entities/UserEntity.kt @@ -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("utilisateur") { val password = varchar("password") val nbCoins = double("coins") val email = varchar("email") + val lastGift = varchar("lastgift") + fun getUserToUserDTO(): MutableList { return database.from(UsersEntity).select().map { @@ -36,7 +41,7 @@ object UsersEntity : Table("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("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 + } } diff --git a/Sources/src/main/kotlin/allin/model/User.kt b/Sources/src/main/kotlin/allin/model/User.kt index 70a74be..9930da7 100644 --- a/Sources/src/main/kotlin/allin/model/User.kt +++ b/Sources/src/main/kotlin/allin/model/User.kt @@ -1,9 +1,9 @@ - package allin.model +package allin.model import kotlinx.serialization.Serializable +import kotlin.random.Random - -@Serializable + @Serializable data class User( val id: String, val username: String, @@ -24,4 +24,8 @@ data class UserRequest( data class CheckUser( val login: String, val password: String -) \ No newline at end of file +) + + fun getDailyGift() : Int{ + return Random.nextInt(10,150) + } diff --git a/Sources/src/main/kotlin/allin/routing/UserRouter.kt b/Sources/src/main/kotlin/allin/routing/UserRouter.kt index ff7f92a..9c64ebf 100644 --- a/Sources/src/main/kotlin/allin/routing/UserRouter.kt +++ b/Sources/src/main/kotlin/allin/routing/UserRouter.kt @@ -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é") + } + } + } } } } diff --git a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt index 033afe4..c7697a0 100644 --- a/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt +++ b/Sources/src/main/kotlin/allin/utils/DatabaseUtil.kt @@ -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 } \ No newline at end of file