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 deleteUser(username: String): Boolean
fun addCoins(username: String, amount: Int) fun addCoins(username: String, amount: Int)
fun removeCoins(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 fun canHaveDailyGift(username: String): Boolean
} }

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

@ -19,7 +19,7 @@ import java.time.Instant.now
class PostgresUserDataSource(private val database: Database) : UserDataSource { class PostgresUserDataSource(private val database: Database) : UserDataSource {
override fun getUserByUsername(username: String): Pair<UserDTO?, String?> = override fun getUserByUsername(username: String): Pair<UserDTO?, String?> =
database.users database.users
.find { it.username eq username } .find { (it.username eq username) or (it.email eq username) }
?.let { it.toUserDTO() to it.password } ?.let { it.toUserDTO() to it.password }
?: (null to null) ?: (null to null)
@ -37,13 +37,7 @@ class PostgresUserDataSource(private val database: Database) : UserDataSource {
} }
override fun deleteUser(username: String): Boolean = override fun deleteUser(username: String): Boolean =
database.users.removeIf { it.username eq username } > 0 database.users.removeIf { (it.username eq username) or (it.email 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
}
override fun addCoins(username: String, amount: Int) { override fun addCoins(username: String, amount: Int) {
database.users database.users
@ -57,6 +51,16 @@ class PostgresUserDataSource(private val database: Database) : UserDataSource {
?.set(UsersEntity.nbCoins.name, UsersEntity.nbCoins - amount) ?.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 { override fun canHaveDailyGift(username: String): Boolean {
val request = 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';" "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_NOT_FOUND = "Bet not found."
const val BET_ALREADY_EXIST = "Bet already exists." const val BET_ALREADY_EXIST = "Bet already exists."
const val INCORRECT_LOGIN_PASSWORD = "Login and/or password incorrect." 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 INVALID_MAIL = "Invalid mail."
const val PARTICIPATION_NOT_FOUND = "Participation not found." const val PARTICIPATION_NOT_FOUND = "Participation not found."
const val NOT_ENOUGH_COINS = "Not enough coins." const val NOT_ENOUGH_COINS = "Not enough coins."

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

Loading…
Cancel
Save