Module templates refactoring

This commit is contained in:
Andrew Golovashevich 2025-05-08 17:42:39 +03:00
parent a991b87158
commit 78f6752598
4 changed files with 35 additions and 59 deletions

View File

@ -22,7 +22,7 @@ public interface CreateModuleScope<mUE : Any, RUNTIME_KEY : Any> {
public fun moduleScopedObject(namespace: Namespace<mUE, RUNTIME_KEY> = this.rootNs, name: String): ModuleScopedObject<mUE, RUNTIME_KEY>
public fun <mUE : Any> substituteModule(rootNs: Namespace<mUE, RUNTIME_KEY>, template: ModuleTemplate<mUE>): Module<mUE, RUNTIME_KEY>
public fun <mUE : Any> substituteModule(rootNs: Namespace<mUE, RUNTIME_KEY>, template: Module.Template<mUE>): Module<mUE, RUNTIME_KEY>
public fun namespace(parent: Namespace<mUE, RUNTIME_KEY>, name: String): Namespace<mUE, RUNTIME_KEY>

View File

@ -2,10 +2,9 @@ package ru.landgrafhomyak.db.sql_skeleton_0.api.module
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.DebugApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries._Statement
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Executor
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.Table
import ru.landgrafhomyak.db.sql_skeleton_0.api.table.TableConstructor
import ru.landgrafhomyak.db.sql_skeleton_0.api.LowLevelApi
import ru.landgrafhomyak.db.sql_skeleton_0.api.queries.QueriesCompiler
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Transaction
public interface Module<mUE : Any, RUNTIME_KEY : Any> {
@ -22,4 +21,32 @@ public interface Module<mUE : Any, RUNTIME_KEY: Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getParent")
public val parent: Module<*, RUNTIME_KEY>?
public interface Constructor<mUE : Any, RUNTIME_KEY : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("versionKey")
public val versionKey: String
public fun createSchema(context: CreateModuleScope<mUE, RUNTIME_KEY>): mUE
public suspend fun initData(ext: mUE, compiler: QueriesCompiler<RUNTIME_KEY>, transaction: Transaction<RUNTIME_KEY>) {}
}
public interface Upgrade<omUE : Any, nmUE : Any, RUNTIME_KEY : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("versionKey")
public val versionKey: String
public fun upgradeSchema(context: UpgradeModuleScope<nmUE, omUE, RUNTIME_KEY>): nmUE
public suspend fun upgradeData(ext: nmUE, compiler: QueriesCompiler<RUNTIME_KEY>, transaction: Transaction<RUNTIME_KEY>) {}
}
public interface Template<@Suppress("unused") mUE : Any> {
@LowLevelApi
public fun <RUNTIME_KEY : Any> getConstructor(): Constructor<*, RUNTIME_KEY>
@LowLevelApi
public fun <RUNTIME_KEY : Any> getUpgrade(version: String): Upgrade<*, *, RUNTIME_KEY>?
}
}

View File

@ -1,51 +0,0 @@
package ru.landgrafhomyak.db.sql_skeleton_0.api.module
import kotlin.jvm.JvmName
import ru.landgrafhomyak.db.sql_skeleton_0.api.runtime.Transaction
public interface ModuleTemplate<@Suppress("unused") mUE : Any> {
public interface VersionsInitializer<UE : Any> {
public fun createModuleTemplates(context: Scope): UE
public interface Scope {
public fun <nmUE : Any> createTemplate(
constructor: ModuleConstructor<nmUE>,
): ModuleTemplate<nmUE>
public fun <omUE : Any, nmUE : Any> upgradeTemplate(
oldModule: ModuleTemplate<omUE>,
upgrade: ModuleUpgrade<omUE, nmUE>,
): ModuleTemplate<nmUE>
public fun <omUE : Any, nmUE : Any> upgradeTemplateAndMerge(
oldModule: ModuleTemplate<omUE>,
upgrade: ModuleUpgrade<omUE, nmUE>,
mergeTo: ModuleTemplate<nmUE>
): ModuleTemplate<nmUE>
}
}
public interface ModuleConstructor<mUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("versionKey")
public val versionKey: String
public fun createSchema(context: CreateModuleScope): mUE
public suspend fun initData(ext: mUE, transaction: Transaction) {}
}
public interface ModuleUpgrade<omUE : Any, nmUE : Any> {
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("versionKey")
public val versionKey: String
public fun upgradeSchema(context: UpgradeModuleScope<omUE>): nmUE
public suspend fun upgradeData(ext: nmUE, transaction: Transaction) {}
}
@Suppress("INAPPLICABLE_JVM_NAME")
@get:JvmName("getVersionKey")
public val versionKey: String
}

View File

@ -56,8 +56,8 @@ public interface UpgradeModuleScope<nmUE : Any, omUE : Any, RUNTIME_KEY : Any> :
public fun <smUE : Any> keepModule(module: Module<smUE, RUNTIME_KEY>): Module<smUE, RUNTIME_KEY>
public fun <smUE : Any> keepAndMoveModule(oldModule: Module<smUE, RUNTIME_KEY>, newNs: Namespace<nmUE, RUNTIME_KEY>): Module<smUE, RUNTIME_KEY>
public fun <smUE : Any> upgradeModule(oldModule: Module<*, RUNTIME_KEY>, template: ModuleTemplate<smUE>): Module<smUE, RUNTIME_KEY>
public fun <smUE : Any> upgradeAndMoveModule(oldModule: Module<*, RUNTIME_KEY>, newNs: Namespace<nmUE, RUNTIME_KEY>, template: ModuleTemplate<smUE>): Module<smUE, RUNTIME_KEY>
public fun <smUE : Any> upgradeModule(oldModule: Module<*, RUNTIME_KEY>, template: Module.Template<smUE>): Module<smUE, RUNTIME_KEY>
public fun <smUE : Any> upgradeAndMoveModule(oldModule: Module<*, RUNTIME_KEY>, newNs: Namespace<nmUE, RUNTIME_KEY>, template: Module.Template<smUE>): Module<smUE, RUNTIME_KEY>
public fun removeModule(oldModule: Module<*, RUNTIME_KEY>)
public fun <smUE : Any> removeModuleAfterUpgrade(oldModule: Module<smUE, RUNTIME_KEY>): Module<smUE, RUNTIME_KEY>