package be.simplenotes.persistance.users import be.simplenotes.domain.model.PersistedUser import be.simplenotes.domain.model.User import be.simplenotes.domain.usecases.repositories.UserRepository import me.liuwj.ktorm.database.* import me.liuwj.ktorm.dsl.* import me.liuwj.ktorm.entity.* import java.sql.SQLIntegrityConstraintViolationException internal class UserRepositoryImpl(private val db: Database) : UserRepository { override fun create(user: User): PersistedUser? { return try { db.useTransaction { 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 }?.toPersistedUser() override fun find(id: Int) = db.users.find { it.id eq id }?.toPersistedUser() 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.useTransaction { db.delete(Users) { it.id eq id } == 1 } override fun findAll() = db.from(Users).select(Users.id).map { it[Users.id]!! } }