Connect with email OR username
continuous-integration/drone/push Build is passing Details

pull/13/head
luevard 11 months ago
parent c60e3905aa
commit bf9ddc93f9

@ -9,6 +9,7 @@ interface UserDataSource {
fun deleteUser(username: String): Boolean
fun addCoins(username: String, amount: Int)
fun removeCoins(username: String, amount: Int)
fun userExists(username: String, email: String): Boolean
fun userExists(username: String): Boolean
fun emailExists(email: String): Boolean
fun canHaveDailyGift(username: String): Boolean
}

@ -3,6 +3,8 @@ package allin.data.mock
import allin.data.UserDataSource
import allin.dto.UserDTO
import allin.model.User
import org.ktorm.dsl.eq
import org.ktorm.dsl.or
import java.time.ZonedDateTime
class MockUserDataSource(private val mockData: MockDataSource.MockData) : UserDataSource {
@ -10,7 +12,7 @@ class MockUserDataSource(private val mockData: MockDataSource.MockData) : UserDa
private val lastGifts get() = mockData.lastGifts
override fun getUserByUsername(username: String): Pair<UserDTO?, String?> =
users.find { it.username == username }?.let {
users.find { (it.username == username) or (it.email == username) }?.let {
Pair(
UserDTO(
id = it.id,
@ -28,7 +30,7 @@ class MockUserDataSource(private val mockData: MockDataSource.MockData) : UserDa
}
override fun deleteUser(username: String): Boolean =
users.removeIf { it.username == username }
users.removeIf { (it.username == username) or (it.email == username) }
override fun addCoins(username: String, amount: Int) {
users.find { it.username == username }?.let {
@ -42,8 +44,11 @@ class MockUserDataSource(private val mockData: MockDataSource.MockData) : UserDa
}
}
override fun userExists(username: String, email: String): Boolean =
users.any { it.username == username && it.email == email }
override fun userExists(username: String) =
users.any { it.username == username }
override fun emailExists(email: String) =
users.any { it.email == email }
override fun canHaveDailyGift(username: String): Boolean {
val value = lastGifts[username]?.let {

@ -19,7 +19,7 @@ import java.time.Instant.now
class PostgresUserDataSource(private val database: Database) : UserDataSource {
override fun getUserByUsername(username: String): Pair<UserDTO?, String?> =
database.users
.find { it.username eq username }
.find { (it.username eq username) or (it.email eq username) }
?.let { it.toUserDTO() to it.password }
?: (null to null)
@ -37,13 +37,7 @@ class PostgresUserDataSource(private val database: Database) : UserDataSource {
}
override fun deleteUser(username: String): Boolean =
database.users.removeIf { it.username eq username } > 0
override fun userExists(username: String, email: String): Boolean {
return database.users.filter {
(it.username eq username) and (it.email eq email)
}.totalRecords > 0
}
database.users.removeIf { (it.username eq username) or (it.email eq username) } > 0
override fun addCoins(username: String, amount: Int) {
database.users
@ -57,6 +51,16 @@ class PostgresUserDataSource(private val database: Database) : UserDataSource {
?.set(UsersEntity.nbCoins.name, UsersEntity.nbCoins - amount)
}
override fun userExists(username: String) =
database.users.filter {
(it.username eq username)
}.totalRecords > 0
override fun emailExists(email: String) =
database.users.filter {
(it.email eq email)
}.totalRecords > 0
override fun canHaveDailyGift(username: String): Boolean {
val request =
"SELECT CASE WHEN DATE(NOW()) > DATE(lastgift) THEN true ELSE false END AS is_lastgift_greater_than_1_day FROM utilisateur WHERE username = '$username';"

@ -7,7 +7,8 @@ object ApiMessage {
const val BET_NOT_FOUND = "Bet not found."
const val BET_ALREADY_EXIST = "Bet already exists."
const val INCORRECT_LOGIN_PASSWORD = "Login and/or password incorrect."
const val USER_ALREADY_EXISTS = "Mail and/or username already exists."
const val USER_ALREADY_EXISTS = "Username already exists."
const val MAIL_ALREADY_EXISTS = "Mail already exists."
const val INVALID_MAIL = "Invalid mail."
const val PARTICIPATION_NOT_FOUND = "Participation not found."
const val NOT_ENOUGH_COINS = "Not enough coins."

@ -56,10 +56,12 @@ fun Application.userRouter() {
if (RegexCheckerUser.isEmailInvalid(tempUser.email)) {
call.respond(HttpStatusCode.Forbidden, ApiMessage.INVALID_MAIL)
}
if (userDataSource.userExists(tempUser.username, tempUser.email)) {
if (userDataSource.userExists(tempUser.username)) {
call.respond(HttpStatusCode.Conflict, ApiMessage.USER_ALREADY_EXISTS)
}
if(userDataSource.emailExists(tempUser.email)){
call.respond(HttpStatusCode.Conflict, ApiMessage.MAIL_ALREADY_EXISTS)
}
val user = User(
id = UUID.randomUUID().toString(),
username = tempUser.username,

Loading…
Cancel
Save