diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/ModuleTemplate.kt index 7653c14..837ac40 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/ModuleTemplate.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha0/api/module/ModuleTemplate.kt @@ -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 { - public fun createModuleTemplates(scope: CreateModuleTemplatesScope): UserExtension +public interface ModuleTemplate<@Suppress("unused") mUE : Any> { + public interface VersionsInitializer { + public fun createModuleTemplates(context: Scope): UE + + public interface Scope { + public fun createTemplate( + constructor: ModuleConstructor, + ): ModuleTemplate + + public fun upgradeTemplate( + oldModule: ModuleTemplate, + upgrade: ModuleUpgrade, + ): ModuleTemplate + + public fun upgradeTemplateAndMerge( + oldModule: ModuleTemplate, + upgrade: ModuleUpgrade, + mergeTo: ModuleTemplate + ): ModuleTemplate + } } - public interface CreateModuleTemplatesScope { - public fun createTemplate( - versionKey: String, - creator: ModuleCreator, - ): ModuleTemplate + public interface ModuleConstructor { + public val versionKey: String - public fun upgradeTemplate( - versionKey: String, - upgrade: ModuleUpgrade, - ): ModuleTemplate + public fun createSchema(context: CreateModuleScope): mUE + + public suspend fun initData(ext: mUE, transaction: Transaction) {} } - public interface ModuleCreator { - public fun createSchema(context: CreateModuleScope): ModuleUserExtension + public interface ModuleUpgrade { + public val versionKey: String - public suspend fun initData(ext: ModuleUserExtension, transaction: Transaction) {} - } + public fun upgradeSchema(context: UpgradeModuleScope): nmUE - public interface ModuleUpgrade { - public fun upgradeSchema(context: UpgradeModuleScope): NewModuleUserExtension - - public suspend fun upgradeData(ext: NewModuleUserExtension, transaction: Transaction) {} + public suspend fun upgradeData(ext: nmUE, transaction: Transaction) {} } public val versionKey: String