From 15bcebb0491d8c0d1c453a24873e6682cb4dc75d Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich <landgrafhomyak@gmail.com> Date: Fri, 29 Nov 2024 23:56:29 +0300 Subject: [PATCH] Module provider interfaces --- .../{ModuleModifyingRound.kt => ModuleCreator.kt} | 14 +++++++------- .../serdha/api/v0/ddl/ModuleTemplate.kt | 12 ++++++++++-- .../api/v0/runtime/UnsynchronizedDatabase.kt | 4 ++-- 3 files changed, 19 insertions(+), 11 deletions(-) rename src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/{ModuleModifyingRound.kt => ModuleCreator.kt} (88%) diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleModifyingRound.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleCreator.kt similarity index 88% rename from src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleModifyingRound.kt rename to src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleCreator.kt index c4ab6d1..cb777ea 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleModifyingRound.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleCreator.kt @@ -9,14 +9,14 @@ import ru.landgrafhomyak.serdha.api.v0.dml.SelectCreator import ru.landgrafhomyak.serdha.api.v0.dml.Update import ru.landgrafhomyak.serdha.api.v0.dml.UpdateCreator -public interface ModuleModifyingRound { - public fun interface CreateTable<TableUserExtension : Any> { +public interface ModuleCreator { + public interface CreateTable<TableUserExtension : Any> { public fun createTable(creator: TableCreator<TableUserExtension>): TableUserExtension } public fun <TableUserExtension : Any> createTable(namespace: Namespace, name: String, initializer: CreateTable<TableUserExtension>): Table<TableUserExtension, Nothing> - public fun interface UpdateTable<TableNewUserExtension : Any, TableOldUserExtension : Any> { + public interface UpdateTable<TableNewUserExtension : Any, TableOldUserExtension : Any> { public fun updateTable(oldTable: Table<TableOldUserExtension, *>, updater: TableUpdater<TableNewUserExtension, TableOldUserExtension>): TableNewUserExtension } @@ -49,25 +49,25 @@ public interface ModuleModifyingRound { initializer: UpdateTable<TableNewUserExtension, TableOldUserExtension> ): Table<TableNewUserExtension, TableOldUserExtension> - public fun interface CreateSelect<QueryUserWrapper : Any> { + public interface CreateSelect<QueryUserWrapper : Any> { public fun createSelect(creator: SelectCreator<QueryUserWrapper>): QueryUserWrapper } public fun <QueryUserWrapper : Any> createSelect(initializer: CreateSelect<QueryUserWrapper>): Select<QueryUserWrapper> - public fun interface CreateInsert<TableUserExtension : Any, QueryUserWrapper : Any> { + public interface CreateInsert<TableUserExtension : Any, QueryUserWrapper : Any> { public fun createInsert(table: Table<TableUserExtension, *>, creator: InsertCreator<TableUserExtension, QueryUserWrapper>): QueryUserWrapper } public fun <TableUserExtension : Any, QueryUserWrapper : Any> createInsert(table: Table<TableUserExtension, *>, initializer: CreateInsert<TableUserExtension, QueryUserWrapper>): Insert<QueryUserWrapper> - public fun interface CreateUpdate<TableUserExtension : Any, QueryUserWrapper : Any> { + public interface CreateUpdate<TableUserExtension : Any, QueryUserWrapper : Any> { public fun createUpdate(table: Table<TableUserExtension, *>, creator: UpdateCreator<TableUserExtension, QueryUserWrapper>): QueryUserWrapper } public fun <TableUserExtension : Any, QueryUserWrapper : Any> createUpdate(table: Table<TableUserExtension, *>, initializer: CreateUpdate<TableUserExtension, QueryUserWrapper>): Update<QueryUserWrapper> - public fun interface CreateDelete<TableUserExtension : Any, QueryUserWrapper : Any> { + public interface CreateDelete<TableUserExtension : Any, QueryUserWrapper : Any> { public fun createDelete(table: Table<TableUserExtension, *>, creator: DeleteCreator<TableUserExtension, QueryUserWrapper>): QueryUserWrapper } diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt index 1fa9cd7..23587eb 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/ddl/ModuleTemplate.kt @@ -1,9 +1,17 @@ package ru.landgrafhomyak.serdha.api.v0.ddl public interface ModuleTemplate<ModuleUserExtension : Any> { - public fun <NewModuleUserExtension : Any> modify( + public interface CreateModule<ModuleUserExtension : Any> { + public fun createModule(oldModule: ModuleTemplate<ModuleUserExtension>, rootNs: Namespace, updater: ModuleCreator): ModuleUserExtension + } + + public interface UpgradeModule<OldModuleUserExtension : Any, NewModuleUserExtension : Any> { + public fun createModule(oldModule: ModuleTemplate<OldModuleUserExtension>, rootNs: Namespace, updater: ModuleCreator): NewModuleUserExtension + } + + public fun <NewModuleUserExtension : Any> upgrade( newVersionKey: String, - updater: (oldModule: ModuleTemplate<ModuleUserExtension>, rootNs: Namespace, updater: ModuleModifyingRound) -> NewModuleUserExtension + updater: UpgradeModule<ModuleUserExtension, NewModuleUserExtension> ): ModuleTemplate<NewModuleUserExtension> public val versionKey: String diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt index 07d26a9..7132522 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/serdha/api/v0/runtime/UnsynchronizedDatabase.kt @@ -1,12 +1,12 @@ package ru.landgrafhomyak.serdha.api.v0.runtime -import ru.landgrafhomyak.serdha.api.v0.ddl.ModuleModifyingRound +import ru.landgrafhomyak.serdha.api.v0.ddl.ModuleCreator import ru.landgrafhomyak.serdha.api.v0.ddl.ModuleTemplate import ru.landgrafhomyak.serdha.api.v0.ddl.Namespace @Suppress("SpellCheckingInspection") public interface UnsynchronizedDatabase { - public fun <ModuleUserExtension : Any> createModule(initialVersionKey: String, content: (rootNs: Namespace, updater: ModuleModifyingRound) -> ModuleUserExtension): ModuleTemplate<ModuleUserExtension> + public fun <ModuleUserExtension : Any> createModule(initialVersionKey: String, content: ModuleTemplate.CreateModule<ModuleUserExtension>): ModuleTemplate<ModuleUserExtension> public suspend fun <ModuleUserExtension : Any> synchronize(conent: ModuleTemplate<ModuleUserExtension>): SynchronizedDatabase<ModuleUserExtension> } \ No newline at end of file