kodeshare/src/main/kotlin/moe/kageru/kodeshare/persistence/PasteDao.kt

57 lines
1.6 KiB
Kotlin

package moe.kageru.kodeshare.persistence
import moe.kageru.kodeshare.Paste
import moe.kageru.kodeshare.config.DatabaseSpec
import moe.kageru.kodeshare.config.config
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
import org.mariadb.jdbc.MariaDbDataSource
object PasteDao {
fun select(id: Long): Transient<Paste>? = transaction {
PasteTable.select { PasteTable.id.eq(id) }.firstOrNull()
}?.toPaste()
fun insert(paste: Paste): Transient<Paste> = transaction {
val id = PasteTable.insert {
it[content] = paste.content
it[created] = paste.created
}[PasteTable.id]
Transient(id, paste)
}
init {
val source = MariaDbDataSource().apply {
userName = config[DatabaseSpec.user]
setPassword(config[DatabaseSpec.password])
databaseName = config[DatabaseSpec.database]
port = config[DatabaseSpec.port]
}
Database.connect(source)
transaction {
SchemaUtils.create(PasteTable)
}
}
}
private fun ResultRow.toPaste() = Transient(
get(PasteTable.id),
Paste(
content = get(PasteTable.content),
created = get(PasteTable.created)
)
)
private object PasteTable : Table() {
val id = long("id").primaryKey().autoIncrement().index()
val content = text("content")
val created = datetime("created").index()
}
/*
* Better have that one generic class
* after deciding to make everything else
* not generic because it would be overkill
*/
data class Transient<DATA>(val id: Long, val data: DATA)