71 lines
2.0 KiB
Kotlin
71 lines
2.0 KiB
Kotlin
package be.vandewalleh.services
|
|
|
|
import be.vandewalleh.entities.User
|
|
import be.vandewalleh.tables.Users
|
|
import me.liuwj.ktorm.database.Database
|
|
import me.liuwj.ktorm.dsl.*
|
|
import me.liuwj.ktorm.entity.add
|
|
import me.liuwj.ktorm.entity.sequenceOf
|
|
import org.kodein.di.Kodein
|
|
import org.kodein.di.KodeinAware
|
|
import org.kodein.di.generic.instance
|
|
import java.time.LocalDateTime
|
|
|
|
/**
|
|
* service to handle database queries for users.
|
|
*/
|
|
class UserService(override val kodein: Kodein) : KodeinAware {
|
|
private val db by instance<Database>()
|
|
|
|
/**
|
|
* returns a user ID if present or null
|
|
*/
|
|
fun getUserId(userEmail: String): Int? {
|
|
return db.from(Users)
|
|
.select(Users.id)
|
|
.where { Users.email eq userEmail }
|
|
.limit(0, 1)
|
|
.map { it[Users.id] }
|
|
.firstOrNull()
|
|
}
|
|
|
|
/**
|
|
* returns a user email and password from it's email if found or null
|
|
*/
|
|
fun getEmailAndPasswordFromUsername(username: String): Pair<String, String>? {
|
|
return db.from(Users)
|
|
.select(Users.email, Users.password)
|
|
.where { Users.username eq username }
|
|
.limit(0, 1)
|
|
.map { row -> row[Users.email]!! to row[Users.password]!! }
|
|
.firstOrNull()
|
|
}
|
|
|
|
fun userExists(username: String, email: String): Boolean {
|
|
return db.from(Users)
|
|
.select(Users.id)
|
|
.where { (Users.username eq username) or (Users.email eq email) }
|
|
.limit(0, 1)
|
|
.firstOrNull() != null
|
|
}
|
|
|
|
/**
|
|
* create a new user
|
|
* password should already be hashed
|
|
*/
|
|
fun createUser(user: UserRegistrationDto) {
|
|
db.useTransaction {
|
|
val newUser = User {
|
|
this.username = user.username
|
|
this.email = user.email
|
|
this.password = user.password
|
|
this.createdAt = LocalDateTime.now()
|
|
}
|
|
|
|
db.sequenceOf(Users).add(newUser)
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
data class UserRegistrationDto(val username: String, val email: String, val password: String) |