Files
barotrauma-admin/src/main/kotlin/com/nano/repository/TaskRepository.kt
T
vlad.os d562b07027 + gitignore
+ add boilerplate
2026-07-18 15:07:47 +03:00

88 lines
2.4 KiB
Kotlin

package com.nano.repository
import com.nano.db.TaskTable
import com.nano.model.Task
import com.nano.model.TaskStatus
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.transactions.transaction
import java.time.Instant
import java.util.UUID
class TaskRepository(
private val db: Database,
) {
fun create(task: Task): Task =
transaction(db) {
val now = Instant.now().toEpochMilli()
TaskTable.insert {
it[id] = task.id
it[name] = task.name
it[payload] = task.payload
it[status] = task.status
it[createdAt] = now
it[updatedAt] = now
}
task.copy(createdAt = now, updatedAt = now)
}
fun findById(id: UUID): Task? =
transaction(db) {
TaskTable
.selectAll()
.where(TaskTable.id eq id)
.singleOrNull()
?.toTask()
}
fun findAll(): List<Task> =
transaction(db) {
TaskTable
.selectAll()
.orderBy(TaskTable.createdAt, SortOrder.DESC)
.map { it.toTask() }
}
fun findByStatus(status: TaskStatus): List<Task> =
transaction(db) {
TaskTable
.selectAll()
.where(TaskTable.status eq status)
.orderBy(TaskTable.createdAt, SortOrder.DESC)
.map { it.toTask() }
}
fun updateStatus(
id: UUID,
newStatus: TaskStatus,
): Task? =
transaction(db) {
val now = Instant.now().toEpochMilli()
val updated =
TaskTable.update({ TaskTable.id eq id }) {
it[status] = newStatus
it[updatedAt] = now
}
if (updated == 0) {
null
} else {
findById(id)
}
}
fun delete(id: UUID): Boolean =
transaction(db) {
TaskTable.deleteWhere { TaskTable.id eq id } > 0
}
private fun ResultRow.toTask() =
Task(
id = this[TaskTable.id],
name = this[TaskTable.name],
payload = this[TaskTable.payload],
status = this[TaskTable.status],
createdAt = this[TaskTable.createdAt],
updatedAt = this[TaskTable.updatedAt],
)
}