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) } } } }