sicamp-helper/src/main/kotlin/ru/sicamp/sicamphelper/InitializingBeanImpl.kt
2023-07-30 22:48:17 +04:00

61 lines
No EOL
2 KiB
Kotlin

package ru.sicamp.sicamphelper
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.transactions.transaction
import org.springframework.beans.factory.InitializingBean
import org.springframework.security.crypto.password.PasswordEncoder
import org.springframework.stereotype.Component
import ru.sicamp.sicamphelper.db.entity.Group
import ru.sicamp.sicamphelper.db.entity.User
import ru.sicamp.sicamphelper.db.table.Groups
import ru.sicamp.sicamphelper.db.table.Tables
import ru.sicamp.sicamphelper.db.table.Users
import java.time.Duration
import java.time.LocalDateTime
import javax.sql.DataSource
@Component
class InitializingBeanImpl(
private val datasource: DataSource,
private val passwordEncoder: PasswordEncoder,
private val databaseConfig: DatabaseConfig,
) : InitializingBean {
override fun afterPropertiesSet() {
val db = Database.connect(
datasource = datasource,
databaseConfig = databaseConfig
)
transaction(db) {
addLogger(StdOutSqlLogger)
SchemaUtils.create(*Tables.values().map { it.table }.toTypedArray())
}
transaction {
val now = LocalDateTime.now()
val adminGroup = Group.find {
Groups.name eq "admins"
}.firstOrNull() ?: Group.new {
name = "admins"
tgLink = ""
}
User.find {
Users.login eq "root"
}.firstOrNull() ?: User.new {
login = "root"
_password = passwordEncoder.encode("123456")
role = Users.Role.ADMIN
group = adminGroup
name = "Рут Рутович"
sex = Users.Sex.OTHER
age = 12
enabled = true
locked = false
accountExpiration = now + Duration.ofDays(60)
credentialsExpiration = now + Duration.ofDays(60)
}
}
}
}