package be.simplenotes.persistance.users import be.simplenotes.persistance.converters.UserConverter import be.simplenotes.persistance.repositories.UserRepository import be.simplenotes.types.PersistedUser import be.simplenotes.types.User import me.liuwj.ktorm.database.Database import me.liuwj.ktorm.dsl.* import me.liuwj.ktorm.entity.any import me.liuwj.ktorm.entity.find import java.sql.SQLIntegrityConstraintViolationException import javax.inject.Singleton @Singleton internal class UserRepositoryImpl( private val db: Database, private val converter: UserConverter, ) : UserRepository { override fun create(user: User): PersistedUser? { return try { val id = db.insertAndGenerateKey(Users) { it.username to user.username it.password to user.password } as Int PersistedUser(user.username, user.password, id) } catch (e: SQLIntegrityConstraintViolationException) { null } } override fun find(username: String) = db.users.find { it.username eq username } ?.let { converter.toPersistedUser(it) } override fun find(id: Int) = db.users.find { it.id eq id }?.let { converter.toPersistedUser(it) } override fun exists(username: String) = db.users.any { it.username eq username } override fun exists(id: Int) = db.users.any { it.id eq id } override fun delete(id: Int) = db.delete(Users) { it.id eq id } == 1 override fun findAll() = db.from(Users).select(Users.id).map { it[Users.id]!! } }