[history/serdha] Version of module template moved to constructor

This commit is contained in:
Andrew Golovashevich 2025-02-13 11:28:00 +03:00
parent 6e9349f80b
commit 39a08fb2fa

View File

@ -2,33 +2,42 @@ package ru.landgrafhomyak.db.serdha0.api.module
import ru.landgrafhomyak.db.serdha0.api.runtime.Transaction
public interface ModuleTemplate<@Suppress("unused") ModuleUserExtension : Any> {
public interface Provider<UserExtension : Any> {
public fun createModuleTemplates(scope: CreateModuleTemplatesScope): UserExtension
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 CreateModuleTemplatesScope {
public fun <NewModuleUserExtension : Any> createTemplate(
versionKey: String,
creator: ModuleCreator<NewModuleUserExtension>,
): ModuleTemplate<NewModuleUserExtension>
public interface ModuleConstructor<mUE : Any> {
public val versionKey: String
public fun <OldModuleUserExtension : Any, NewModuleUserExtension : Any> upgradeTemplate(
versionKey: String,
upgrade: ModuleUpgrade<OldModuleUserExtension, NewModuleUserExtension>,
): ModuleTemplate<NewModuleUserExtension>
public fun createSchema(context: CreateModuleScope): mUE
public suspend fun initData(ext: mUE, transaction: Transaction) {}
}
public interface ModuleCreator<ModuleUserExtension : Any> {
public fun createSchema(context: CreateModuleScope): ModuleUserExtension
public interface ModuleUpgrade<omUE : Any, nmUE : Any> {
public val versionKey: String
public suspend fun initData(ext: ModuleUserExtension, transaction: Transaction) {}
}
public fun upgradeSchema(context: UpgradeModuleScope<omUE>): nmUE
public interface ModuleUpgrade<OldModuleUserExtension : Any, NewModuleUserExtension : Any> {
public fun upgradeSchema(context: UpgradeModuleScope<OldModuleUserExtension>): NewModuleUserExtension
public suspend fun upgradeData(ext: NewModuleUserExtension, transaction: Transaction) {}
public suspend fun upgradeData(ext: nmUE, transaction: Transaction) {}
}
public val versionKey: String