move hibernate to exposed...

This commit is contained in:
dalbodeule
2024-06-12 18:02:49 +09:00
parent bcf0cc6c8d
commit 315a61aecf
10 changed files with 92 additions and 2341 deletions

View File

@@ -0,0 +1,30 @@
package space.mori.chzzk_bot
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import io.github.cdimascio.dotenv.dotenv
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.SchemaUtils
import org.jetbrains.exposed.sql.transactions.transaction
import space.mori.chzzk_bot.models.Users
object Connector {
private val dotenv = dotenv()
val hikariConfig = HikariConfig().apply {
jdbcUrl = dotenv["DB_URL"]
driverClassName = "org.mariadb.jdbc.Driver"
username = dotenv["DB_USER"]
password = dotenv["DB_PASS"]
maximumPoolSize = 10
}
val dataSource = HikariDataSource(hikariConfig)
init {
Database.connect(dataSource)
transaction {
SchemaUtils.createMissingTablesAndColumns(Users)
}
}
}

View File

@@ -1,39 +0,0 @@
package space.mori.chzzk_bot
import com.zaxxer.hikari.HikariConfig
import com.zaxxer.hikari.HikariDataSource
import io.github.cdimascio.dotenv.dotenv
import org.hibernate.SessionFactory
import org.hibernate.boot.registry.StandardServiceRegistryBuilder
import org.hibernate.cfg.Configuration
import org.hibernate.service.ServiceRegistry
import space.mori.chzzk_bot.discord.User
object Database {
private val dotenv = dotenv()
val configuration = Configuration().apply {
addAnnotatedClass(User::class.java)
setProperty("hibernate.dialect", "org.hibernate.dialect.MariaDBDialect")
setProperty("hibernate.show_sql", "true")
setProperty("hibernate.format_sql", "true")
setProperty("hibernate.hbm2ddl.auto", "update")
setProperty("hibernate.hbm2ddl.jdbc", "update")
setProperty("hibernate.bytecode.use-bytebuddy", "false")
// HikariCP를 사용하도록 설정
setProperty("hibernate.connection.provider_class", "org.hibernate.hikaricp.internal.HikariCPConnectionProvider")
setProperty("hibernate.hikari.dataSourceClassName", "org.mariadb.jdbc.MariaDbDataSource")
setProperty("hibernate.hikari.dataSource.url", dotenv["DB_URL"])
setProperty("hibernate.hikari.dataSource.user", dotenv["DB_USER"])
setProperty("hibernate.hikari.dataSource.password", dotenv["DB_PASS"])
setProperty("hibernate.hikari.maximumPoolSize", "10")
}
private val serviceRegistry: ServiceRegistry = StandardServiceRegistryBuilder()
.applySettings(configuration.properties)
.build()
val sessionFactory: SessionFactory = configuration.buildSessionFactory(serviceRegistry)
}

View File

@@ -13,13 +13,13 @@ val logger: Logger = LoggerFactory.getLogger("main")
fun main(args: Array<String>) {
val discord = Discord()
Database
Connector
discord.enable()
if(dotenv.get("RUN_AGENT", "false").toBoolean()) {
runBlocking {
delay(TimeUnit.SECONDS.toMillis(10))
delay(TimeUnit.MINUTES.toMillis(1))
discord.disable()
}
}

View File

@@ -1,19 +0,0 @@
package space.mori.chzzk_bot.discord
import jakarta.persistence.*
@Entity
@Table(name = "users")
data class User(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long?,
@Column(length = 255)
val username: String,
@Column(length = 64)
val token: String,
val discord: Long
)

View File

@@ -0,0 +1,21 @@
package space.mori.chzzk_bot.models
import org.jetbrains.exposed.dao.IntEntity
import org.jetbrains.exposed.dao.IntEntityClass
import org.jetbrains.exposed.dao.id.EntityID
import org.jetbrains.exposed.dao.id.IntIdTable
object Users: IntIdTable("users") {
val username = varchar("username", 255)
val token = varchar("token", 64)
val discord = long("discord")
}
class User(id: EntityID<Int>) : IntEntity(id) {
companion object : IntEntityClass<User>(Users)
var username by Users.username
var token by Users.token
var discord by Users.discord
}

View File

@@ -1,21 +1,25 @@
package space.mori.chzzk_bot.services
import space.mori.chzzk_bot.Database
import space.mori.chzzk_bot.discord.User
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import space.mori.chzzk_bot.models.User
import space.mori.chzzk_bot.models.Users
class UserService {
fun saveUser(user: User) {
val session = Database.sessionFactory.openSession()
session.beginTransaction()
session.persist(user)
session.transaction.commit()
session.close()
User.new {
username = user.username
token = user.token
discord = user.discord
}
}
fun getUser(id: Long): User? {
val session = Database.sessionFactory.openSession()
val user = session.get(User::class.java, id)
session.close()
return user
fun getUser(id: Int): User? {
return User.findById(id)
}
fun getUser(discordID: Long): User? {
val users = User.find(Users.discord eq discordID)
return users.firstOrNull()
}
}