Skip to content

Commit

Permalink
refactor: change how db migrations defined
Browse files Browse the repository at this point in the history
  • Loading branch information
duruer committed Feb 9, 2025
1 parent ec9ff75 commit 911e916
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 38 deletions.
10 changes: 5 additions & 5 deletions Pano/src/main/kotlin/com/panomc/platform/db/DatabaseManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class DatabaseManager(

beans.filter { it.value is DatabaseMigration }
.map { it.value as DatabaseMigration }
.sortedBy { it.FROM_SCHEME_VERSION }
.sortedBy { it.from }
}

fun getTablePrefix(): String = configManager.config.database.prefix
Expand Down Expand Up @@ -114,7 +114,7 @@ class DatabaseManager(
databaseInitProcessHandlers.forEach { it.init(sqlClient) }
}

internal fun getLatestMigration() = migrations.maxByOrNull { it.SCHEME_VERSION }
internal fun getLatestMigration() = migrations.maxByOrNull { it.to }

private suspend fun checkMigration() {
logger.info("Checking available database migrations")
Expand Down Expand Up @@ -153,19 +153,19 @@ class DatabaseManager(
migrations
.find { it.isMigratable(databaseVersion) }
?.let {
logger.info("Migration Found! Migrating database from version ${it.FROM_SCHEME_VERSION} to ${it.SCHEME_VERSION}: ${it.SCHEME_VERSION_INFO}")
logger.info("Migration Found! Migrating database from version ${it.from} to ${it.to}: ${it.info}")

try {
it.migrate(sqlClient)

it.updateSchemeVersion(sqlClient)
} catch (e: Exception) {
logger.error("Database Error: Migration failed from version ${it.FROM_SCHEME_VERSION} to ${it.SCHEME_VERSION}, error: " + e)
logger.error("Database Error: Migration failed from version ${it.from} to ${it.to}, error: " + e)

return
}

migrate(sqlClient, it.SCHEME_VERSION)
migrate(sqlClient, it.to)
}
}

Expand Down
12 changes: 6 additions & 6 deletions Pano/src/main/kotlin/com/panomc/platform/db/DatabaseMigration.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ package com.panomc.platform.db

import com.panomc.platform.db.model.SchemeVersion
import io.vertx.sqlclient.SqlClient
import org.springframework.beans.factory.annotation.Autowired

abstract class DatabaseMigration(val databaseManager: DatabaseManager) {
abstract class DatabaseMigration(val from: Int, val to: Int, val info: String) {
abstract val handlers: List<suspend (sqlClient: SqlClient) -> Unit>

abstract val FROM_SCHEME_VERSION: Int
abstract val SCHEME_VERSION: Int
abstract val SCHEME_VERSION_INFO: String
@Autowired
lateinit var databaseManager: DatabaseManager

fun isMigratable(version: Int) = version == FROM_SCHEME_VERSION
fun isMigratable(version: Int) = version == from

suspend fun migrate(sqlClient: SqlClient) {
handlers.forEach {
Expand All @@ -23,7 +23,7 @@ abstract class DatabaseMigration(val databaseManager: DatabaseManager) {
) {
databaseManager.schemeVersionDao.add(
sqlClient,
SchemeVersion(SCHEME_VERSION.toString(), SCHEME_VERSION_INFO)
SchemeVersion(to.toString(), info)
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ class SchemeVersionDaoImpl : SchemeVersionDao() {
add(
sqlClient,
SchemeVersion(
databaseManager.getLatestMigration()!!.SCHEME_VERSION.toString(),
databaseManager.getLatestMigration()!!.SCHEME_VERSION_INFO
databaseManager.getLatestMigration()!!.to.toString(),
databaseManager.getLatestMigration()!!.info
)
)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package com.panomc.platform.db.migration

import com.panomc.platform.annotation.Migration
import com.panomc.platform.db.DatabaseManager
import com.panomc.platform.db.DatabaseMigration
import io.vertx.kotlin.coroutines.coAwait
import io.vertx.sqlclient.SqlClient

@Migration
class DatabaseMigration1to2(databaseManager: DatabaseManager) : DatabaseMigration(databaseManager) {
override val FROM_SCHEME_VERSION = 1
override val SCHEME_VERSION = 2
override val SCHEME_VERSION_INFO = "Add addon_hash table"

class DatabaseMigration1to2 : DatabaseMigration(1, 2, "Add addon_hash table") {
override val handlers: List<suspend (SqlClient) -> Unit> = listOf(
createAddonHashTable()
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package com.panomc.platform.db.migration

import com.panomc.platform.annotation.Migration
import com.panomc.platform.db.DatabaseManager
import com.panomc.platform.db.DatabaseMigration
import io.vertx.kotlin.coroutines.coAwait
import io.vertx.sqlclient.SqlClient

@Migration
class DatabaseMigration2to3(databaseManager: DatabaseManager) : DatabaseMigration(databaseManager) {
override val FROM_SCHEME_VERSION = 2
override val SCHEME_VERSION = 3
override val SCHEME_VERSION_INFO = "Add panel activity log table."

class DatabaseMigration2to3 : DatabaseMigration(2, 3, "Add panel activity log table") {
override val handlers: List<suspend (SqlClient) -> Unit> = listOf(
createPanelActivityLogTable()
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
package com.panomc.platform.db.migration

import com.panomc.platform.annotation.Migration
import com.panomc.platform.db.DatabaseManager
import com.panomc.platform.db.DatabaseMigration
import io.vertx.kotlin.coroutines.coAwait
import io.vertx.sqlclient.SqlClient

@Migration
class DatabaseMigration3to4(databaseManager: DatabaseManager) : DatabaseMigration(databaseManager) {
override val FROM_SCHEME_VERSION = 3
override val SCHEME_VERSION = 4
override val SCHEME_VERSION_INFO = "Delete all panel activity logs because broken."

class DatabaseMigration3to4 : DatabaseMigration(3, 4, "Delete all panel activity logs because broken.") {
override val handlers: List<suspend (SqlClient) -> Unit> = listOf(
deleteAllPanelActivityLogs()
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.panomc.platform.db.migration

import com.panomc.platform.annotation.Migration
import com.panomc.platform.db.DatabaseManager
import com.panomc.platform.db.DatabaseMigration
import io.vertx.kotlin.coroutines.coAwait
import io.vertx.sqlclient.Row
Expand All @@ -10,11 +9,7 @@ import io.vertx.sqlclient.SqlClient
import io.vertx.sqlclient.Tuple

@Migration
class DatabaseMigration4to5(databaseManager: DatabaseManager) : DatabaseMigration(databaseManager) {
override val FROM_SCHEME_VERSION = 4
override val SCHEME_VERSION = 5
override val SCHEME_VERSION_INFO = "Convert all permissions to uppercase."

class DatabaseMigration4to5 : DatabaseMigration(4, 5, "Convert all permissions to uppercase.") {
override val handlers: List<suspend (SqlClient) -> Unit> = listOf(
convertPermissionsToUppercase()
)
Expand All @@ -39,5 +34,4 @@ class DatabaseMigration4to5(databaseManager: DatabaseManager) : DatabaseMigratio
.coAwait()
}
}

}

0 comments on commit 911e916

Please sign in to comment.