From 3a830d77d6776a1425a60bda25feff310352dd19 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Sun, 19 Jul 2026 21:08:44 +0200 Subject: [PATCH] Add chat room id on mantra tables --- .../1.json | 236 ++++++++++++++++-- .../compose/database/model/ChatMessage.kt | 27 +- .../compose/database/model/MantraArtifact.kt | 11 +- .../database/model/MantraArtifactVersion.kt | 13 +- .../compose/database/model/MantraChapter.kt | 13 +- .../compose/database/model/MantraChunk.kt | 13 +- .../compose/database/model/MantraDialect.kt | 19 +- .../database/model/MantraTranslation.kt | 13 +- .../model/MantraTranslationArtifactVersion.kt | 13 +- ...raTranslationArtifactVersionContributor.kt | 10 +- .../model/MantraTranslationChapter.kt | 13 +- .../MantraTranslationChapterContributor.kt | 8 + .../database/model/MantraTranslationChunk.kt | 13 +- .../model/MantraTranslationContributor.kt | 8 + 14 files changed, 367 insertions(+), 43 deletions(-) diff --git a/composeApp/schemas/press.mantra.compose.database.MantraDatabase/1.json b/composeApp/schemas/press.mantra.compose.database.MantraDatabase/1.json index 6fe2d4be..9912ee27 100644 --- a/composeApp/schemas/press.mantra.compose.database.MantraDatabase/1.json +++ b/composeApp/schemas/press.mantra.compose.database.MantraDatabase/1.json @@ -2,7 +2,7 @@ "formatVersion": 1, "database": { "version": 1, - "identityHash": "f62275705b3100ae81f6a0f46c6a6e3f", + "identityHash": "02723164876a0246ea7370dc8c52bc70", "entities": [ { "tableName": "BroadcastNostrEventReceipt", @@ -1164,7 +1164,7 @@ }, { "tableName": "MantraArtifact", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `name` TEXT NOT NULL, `url` TEXT NOT NULL, `visibility` TEXT NOT NULL, `dialectId` TEXT NOT NULL, `license` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`dialectId`) REFERENCES `MantraDialect`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `name` TEXT NOT NULL, `url` TEXT NOT NULL, `visibility` TEXT NOT NULL, `dialectId` TEXT NOT NULL, `license` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`dialectId`) REFERENCES `MantraDialect`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1208,6 +1208,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "signature", "columnName": "signature", @@ -1259,12 +1265,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraArtifactVersion", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `artifactId` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `versionLabel` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`artifactId`) REFERENCES `MantraArtifact`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `artifactId` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `versionLabel` TEXT NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`artifactId`) REFERENCES `MantraArtifact`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1296,6 +1313,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -1341,12 +1364,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraChapter", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `artifactVersionId` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `name` TEXT NOT NULL, `originalText` TEXT NOT NULL, `index` INTEGER NOT NULL, `wordCount` INTEGER NOT NULL, `characterCount` INTEGER NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`artifactVersionId`) REFERENCES `MantraArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `artifactVersionId` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `name` TEXT NOT NULL, `originalText` TEXT NOT NULL, `index` INTEGER NOT NULL, `wordCount` INTEGER NOT NULL, `characterCount` INTEGER NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`artifactVersionId`) REFERENCES `MantraArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1402,6 +1436,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -1447,12 +1487,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraChunk", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `chapterId` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `text` TEXT NOT NULL, `index` INTEGER NOT NULL, `wordCount` INTEGER NOT NULL, `characterCount` INTEGER NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`chapterId`) REFERENCES `MantraChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `chapterId` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `text` TEXT NOT NULL, `index` INTEGER NOT NULL, `wordCount` INTEGER NOT NULL, `characterCount` INTEGER NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`chapterId`) REFERENCES `MantraChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1502,6 +1553,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -1547,12 +1604,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraDialect", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `language` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `name` TEXT NOT NULL, `country` TEXT NOT NULL, `language` TEXT NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1590,6 +1658,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -1623,11 +1697,24 @@ "columnNames": [ "id" ] - } + }, + "foreignKeys": [ + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] + } + ] }, { "tableName": "MantraTranslation", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationChunkId` TEXT NOT NULL, `translationArtifactVersionId` TEXT NOT NULL, `text` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationChunkId`) REFERENCES `MantraTranslationChunk`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`translationArtifactVersionId`) REFERENCES `MantraTranslationArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationChunkId` TEXT NOT NULL, `translationArtifactVersionId` TEXT NOT NULL, `text` TEXT NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationChunkId`) REFERENCES `MantraTranslationChunk`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`translationArtifactVersionId`) REFERENCES `MantraTranslationArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1665,6 +1752,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -1721,12 +1814,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraTranslationArtifactVersion", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `artifactVersionId` TEXT NOT NULL, `dialectId` TEXT NOT NULL, `name` TEXT NOT NULL, `visibility` TEXT NOT NULL, `license` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`artifactVersionId`) REFERENCES `MantraArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`dialectId`) REFERENCES `MantraDialect`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `artifactVersionId` TEXT NOT NULL, `dialectId` TEXT NOT NULL, `name` TEXT NOT NULL, `visibility` TEXT NOT NULL, `license` TEXT NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`artifactVersionId`) REFERENCES `MantraArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`dialectId`) REFERENCES `MantraDialect`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1776,6 +1880,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -1832,12 +1942,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraTranslationArtifactVersionContributor", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationArtifactVersionId` TEXT NOT NULL, `editorPublicKey` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationArtifactVersionId`) REFERENCES `MantraTranslationArtifactVersionContributor`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationArtifactVersionId` TEXT NOT NULL, `editorPublicKey` TEXT NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationArtifactVersionId`) REFERENCES `MantraTranslationArtifactVersionContributor`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1869,6 +1990,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -1914,12 +2041,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraTranslationChapter", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `chapterId` TEXT NOT NULL, `translationArtifactVersionId` TEXT NOT NULL, `index` INTEGER NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationArtifactVersionId`) REFERENCES `MantraTranslationArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chapterId`) REFERENCES `MantraChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `chapterId` TEXT NOT NULL, `translationArtifactVersionId` TEXT NOT NULL, `index` INTEGER NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationArtifactVersionId`) REFERENCES `MantraTranslationArtifactVersion`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chapterId`) REFERENCES `MantraChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -1957,6 +2095,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -2013,12 +2157,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraTranslationChapterContributor", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationChapterId` TEXT NOT NULL, `translatorPublicKey` TEXT NOT NULL, `role` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationChapterId`) REFERENCES `MantraTranslationChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationChapterId` TEXT NOT NULL, `translatorPublicKey` TEXT NOT NULL, `role` TEXT NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationChapterId`) REFERENCES `MantraTranslationChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -2056,6 +2211,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -2101,12 +2262,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraTranslationChunk", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `chunkId` TEXT NOT NULL, `translationChapterId` TEXT NOT NULL, `text` TEXT NOT NULL, `index` INTEGER NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`chunkId`) REFERENCES `MantraChunk`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`translationChapterId`) REFERENCES `MantraTranslationChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `chunkId` TEXT NOT NULL, `translationChapterId` TEXT NOT NULL, `text` TEXT NOT NULL, `index` INTEGER NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`chunkId`) REFERENCES `MantraChunk`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`translationChapterId`) REFERENCES `MantraTranslationChapter`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -2150,6 +2322,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -2206,12 +2384,23 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, { "tableName": "MantraTranslationContributor", - "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `dTag` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationId` TEXT NOT NULL, `translatorPublicKey` TEXT NOT NULL, `signature` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationId`) REFERENCES `MantraTranslation`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `dTag` TEXT NOT NULL, `publicKey` TEXT NOT NULL, `translationId` TEXT NOT NULL, `translatorPublicKey` TEXT NOT NULL, `signature` TEXT NOT NULL, `chatRoomId` TEXT NOT NULL, `relayHint` TEXT, `marmotGroupEventId` TEXT, `nostrEventId` TEXT, `createdAt` INTEGER NOT NULL, `updatedAt` INTEGER NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`translationId`) REFERENCES `MantraTranslation`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`chatRoomId`) REFERENCES `ChatRoom`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )", "fields": [ { "fieldPath": "id", @@ -2249,6 +2438,12 @@ "affinity": "TEXT", "notNull": true }, + { + "fieldPath": "chatRoomId", + "columnName": "chatRoomId", + "affinity": "TEXT", + "notNull": true + }, { "fieldPath": "relayHint", "columnName": "relayHint", @@ -2294,6 +2489,17 @@ "referencedColumns": [ "id" ] + }, + { + "table": "ChatRoom", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "chatRoomId" + ], + "referencedColumns": [ + "id" + ] } ] }, @@ -4602,7 +4808,7 @@ ], "setupQueries": [ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", - "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f62275705b3100ae81f6a0f46c6a6e3f')" + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '02723164876a0246ea7370dc8c52bc70')" ] } } \ No newline at end of file diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/ChatMessage.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/ChatMessage.kt index 9b342768..3f4fec6c 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/ChatMessage.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/ChatMessage.kt @@ -131,7 +131,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig, - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraArtifact -> database.mantraArtifactDao().upsert( mantraArtifact.copy( @@ -152,7 +153,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraArtifactVersion -> database.mantraArtifactVersionDao().upsert( mantraArtifactVersion.copy( @@ -172,7 +174,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraChapter -> database.mantraChapterDao().upsert( mantraChapter.copy( @@ -192,7 +195,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraChunk -> database.mantraChunkDao().upsert( mantraChunk.copy( @@ -211,7 +215,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraDialect -> database.mantraDialectDao().upsert( mantraDialect.copy( @@ -230,7 +235,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraTranslationArtifactVersion -> database.mantraTranslationArtifactVersionDao().upsert( mantraTranslationArtifactVersion.copy( @@ -253,7 +259,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraTranslationChapter -> database.mantraTranslationChapterDao().upsert( mantraTranslationChapter.copy( @@ -272,7 +279,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraTranslationChunk -> database.mantraTranslationChunkDao().upsert( mantraTranslationChunk.copy( @@ -296,7 +304,8 @@ data class ChatMessage( tags = event.tags, content = event.content, sig = event.sig - ) + ), + chatRoomId = groupEventResult.groupId, )?.let { mantraTranslation -> database.mantraTranslationDao().upsert( mantraTranslation.copy( diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt index c091b1f2..c2b9fa91 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifact.kt @@ -25,6 +25,12 @@ import kotlin.time.Instant childColumns = ["dialectId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ] ) data class MantraArtifact( @@ -38,6 +44,8 @@ data class MantraArtifact( val license: String, // val artifactApprovalId: String, + val chatRoomId: String, + /** * Signature will be an empty string if this is a rumor */ @@ -79,7 +87,7 @@ data class MantraArtifact( } companion object { - fun fromArtifactEvent(artifactEvent: ArtifactEvent): MantraArtifact? { + fun fromArtifactEvent(artifactEvent: ArtifactEvent, chatRoomId: HexKey, ): MantraArtifact? { return artifactEvent.artifactMetadata?.let { artifactMetadata -> artifactEvent.dialectId()?.let { dialectId -> MantraArtifact( @@ -92,6 +100,7 @@ data class MantraArtifact( visibility = artifactMetadata.visibility, name = artifactEvent.content, signature = artifactEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt index 133cbe07..2630c976 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraArtifactVersion.kt @@ -25,6 +25,12 @@ import kotlin.time.Instant childColumns = ["artifactId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraArtifactVersion( @@ -43,6 +49,8 @@ data class MantraArtifactVersion( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -73,7 +81,7 @@ data class MantraArtifactVersion( } companion object { - fun fromArtifactVersionEvent(artifactVersionEvent: ArtifactVersionEvent): MantraArtifactVersion? { + fun fromArtifactVersionEvent(artifactVersionEvent: ArtifactVersionEvent, chatRoomId: HexKey, ): MantraArtifactVersion? { return artifactVersionEvent.artifactId()?.let { artifactId -> MantraArtifactVersion( id = artifactVersionEvent.id, @@ -81,7 +89,8 @@ data class MantraArtifactVersion( createdAt = Instant.fromEpochSeconds(artifactVersionEvent.createdAt), artifactId = artifactId, versionLabel = artifactVersionEvent.content, - signature = artifactVersionEvent.sig + signature = artifactVersionEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt index a36d0bc8..8795896f 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChapter.kt @@ -27,6 +27,12 @@ import kotlin.time.Instant childColumns = ["artifactVersionId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraChapter( @@ -45,6 +51,8 @@ data class MantraChapter( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -87,7 +95,7 @@ data class MantraChapter( } companion object { - fun fromChapterEvent(chapterEvent: ChapterEvent): MantraChapter? { + fun fromChapterEvent(chapterEvent: ChapterEvent, chatRoomId: HexKey): MantraChapter? { return chapterEvent.chapterMetadata?.let { chapterMetadata -> chapterEvent.wordStatisticsTag?.let { wordStatisticsTag -> chapterEvent.artifactVersionId()?.let { artifactId -> @@ -102,7 +110,8 @@ data class MantraChapter( index = index, wordCount = wordStatisticsTag.wordCount, characterCount = wordStatisticsTag.characterCount, - signature = chapterEvent.sig + signature = chapterEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt index 38329735..c16c9aaf 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraChunk.kt @@ -25,6 +25,12 @@ import kotlin.time.Instant childColumns = ["chapterId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraChunk( @@ -42,6 +48,8 @@ data class MantraChunk( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -77,7 +85,7 @@ data class MantraChunk( } companion object { - fun fromChunkEvent(chunkEvent: ChunkEvent): MantraChunk? { + fun fromChunkEvent(chunkEvent: ChunkEvent, chatRoomId: HexKey): MantraChunk? { return chunkEvent.wordStatisticsTag?.let { wordStatisticsTag -> chunkEvent.index()?.let { index -> chunkEvent.chapterId()?.let { chapterId -> @@ -90,7 +98,8 @@ data class MantraChunk( characterCount = wordStatisticsTag.characterCount, chapterId = chapterId, text = chunkEvent.content, - signature = chunkEvent.sig + signature = chunkEvent.sig, + chatRoomId = chatRoomId ) } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraDialect.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraDialect.kt index a0f5c168..eb775c33 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraDialect.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraDialect.kt @@ -1,6 +1,7 @@ package press.mantra.compose.database.model import androidx.room3.Entity +import androidx.room3.ForeignKey import androidx.room3.PrimaryKey import com.vitorpamplona.quartz.nip01Core.core.HexKey import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder @@ -16,7 +17,16 @@ import kotlin.time.Instant /** * 30304 */ -@Entity +@Entity( + foreignKeys = [ + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), + ] +) data class MantraDialect( @PrimaryKey val id: HexKey, @@ -27,6 +37,8 @@ data class MantraDialect( val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -58,7 +70,7 @@ data class MantraDialect( } companion object { - fun fromDialectEvent(dialectEvent: DialectEvent): MantraDialect? { + fun fromDialectEvent(dialectEvent: DialectEvent, chatRoomId: HexKey): MantraDialect? { return dialectEvent.name()?.let { name -> dialectEvent.language()?.let { language -> dialectEvent.country()?.let { country -> @@ -70,7 +82,8 @@ data class MantraDialect( name = name, language = language, country = country, - signature = dialectEvent.sig + signature = dialectEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt index b18c64c7..4a683147 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslation.kt @@ -31,6 +31,12 @@ import kotlin.time.Instant childColumns = ["translationArtifactVersionId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraTranslation( @@ -43,6 +49,8 @@ data class MantraTranslation( val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -73,7 +81,7 @@ data class MantraTranslation( } companion object { - fun fromTranslationEvent(translationEvent: TranslationEvent): MantraTranslation? { + fun fromTranslationEvent(translationEvent: TranslationEvent, chatRoomId: HexKey): MantraTranslation? { ensure(translationEvent.translationChunkId() != null) { return null} ensure(translationEvent.translationArtifactVersionId() != null) { return null} @@ -86,7 +94,8 @@ data class MantraTranslation( text = translationEvent.content, translationChunkId = translationChunkId, translationArtifactVersionId = translationArtifactVersionId, - signature = translationEvent.sig + signature = translationEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt index 8212902c..41c973ce 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersion.kt @@ -32,6 +32,12 @@ import kotlin.time.Instant childColumns = ["dialectId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraTranslationArtifactVersion( @@ -49,6 +55,8 @@ data class MantraTranslationArtifactVersion( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -86,7 +94,7 @@ data class MantraTranslationArtifactVersion( } companion object { - fun fromTranslationArtifactVersionEvent(translationArtifactVersionEvent: TranslationArtifactVersionEvent): MantraTranslationArtifactVersion? { + fun fromTranslationArtifactVersionEvent(translationArtifactVersionEvent: TranslationArtifactVersionEvent, chatRoomId: HexKey): MantraTranslationArtifactVersion? { return translationArtifactVersionEvent.artifactVersionId()?.let { artifactVersionId -> translationArtifactVersionEvent.dialectId()?.let { dialectId -> @@ -100,7 +108,8 @@ data class MantraTranslationArtifactVersion( name = translationArtifactVersionMetadata.name, visibility = translationArtifactVersionMetadata.visibility, license = translationArtifactVersionMetadata.license, - signature = translationArtifactVersionEvent.sig + signature = translationArtifactVersionEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionContributor.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionContributor.kt index e57eb0d2..876e708a 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionContributor.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationArtifactVersionContributor.kt @@ -25,6 +25,12 @@ import kotlin.time.Instant childColumns = ["translationArtifactVersionId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraTranslationArtifactVersionContributor( @@ -39,6 +45,8 @@ data class MantraTranslationArtifactVersionContributor( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -51,7 +59,7 @@ data class MantraTranslationArtifactVersionContributor( ): OptionalNostrEventEntity, TimestampedEntity { companion object { - fun toTranslationChapterProofReaderListEvent(mantraTranslationChapterProofReaders: List): TranslationArtifactVersionContributorListEvent { + fun toTranslationChapterProofReaderListEvent(chatRoomId: HexKey, mantraTranslationChapterProofReaders: List): TranslationArtifactVersionContributorListEvent { // TODO: create TranslationChapterProofReaderListEvent from mantraTranslationChapterProofReaders return TranslationArtifactVersionContributorListEvent( id = "", diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt index ed45e7c9..eba72fb7 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapter.kt @@ -32,6 +32,12 @@ import kotlin.time.Instant childColumns = ["chapterId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraTranslationChapter( @@ -47,6 +53,8 @@ data class MantraTranslationChapter( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -79,7 +87,7 @@ data class MantraTranslationChapter( } companion object { - fun fromTranslationChapterEvent(translationChapterEvent: TranslationChapterEvent): MantraTranslationChapter? { + fun fromTranslationChapterEvent(translationChapterEvent: TranslationChapterEvent, chatRoomId: HexKey): MantraTranslationChapter? { return translationChapterEvent.chapterId()?.let { chapterId -> translationChapterEvent.translationArtifactVersionId()?.let { translationArtifactVersionId -> translationChapterEvent.index()?.let { index -> @@ -90,7 +98,8 @@ data class MantraTranslationChapter( chapterId = chapterId, translationArtifactVersionId = translationArtifactVersionId, index = index, - signature = translationChapterEvent.sig + signature = translationChapterEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterContributor.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterContributor.kt index 0633354e..ae4258df 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterContributor.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChapterContributor.kt @@ -26,6 +26,12 @@ import kotlin.time.Instant childColumns = ["translationChapterId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraTranslationChapterContributor( @@ -41,6 +47,8 @@ data class MantraTranslationChapterContributor( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt index 8f93189f..7592891e 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationChunk.kt @@ -32,6 +32,12 @@ import kotlin.time.Instant childColumns = ["translationChapterId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraTranslationChunk( @@ -48,6 +54,8 @@ data class MantraTranslationChunk( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, @@ -81,7 +89,7 @@ data class MantraTranslationChunk( } companion object { - fun fromTranslationChunkEvent(translationChunkEvent: TranslationChunkEvent): MantraTranslationChunk? { + fun fromTranslationChunkEvent(translationChunkEvent: TranslationChunkEvent, chatRoomId: HexKey): MantraTranslationChunk? { return translationChunkEvent.translationChapterId()?.let { translationChapterId -> translationChunkEvent.chunkId()?.let { chunkId -> translationChunkEvent.index()?.let { index -> @@ -93,7 +101,8 @@ data class MantraTranslationChunk( chunkId = chunkId, index = index, text = translationChunkEvent.content, - signature = translationChunkEvent.sig + signature = translationChunkEvent.sig, + chatRoomId = chatRoomId ) } } diff --git a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationContributor.kt b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationContributor.kt index 0da2837c..7fdfb108 100644 --- a/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationContributor.kt +++ b/composeApp/src/commonMain/kotlin/press/mantra/compose/database/model/MantraTranslationContributor.kt @@ -26,6 +26,12 @@ import kotlin.time.Instant childColumns = ["translationId"], onDelete = ForeignKey.CASCADE, ), + ForeignKey( + entity = ChatRoom::class, + parentColumns = ["id"], + childColumns = ["chatRoomId"], + onDelete = ForeignKey.CASCADE, + ), ], ) data class MantraTranslationContributor( @@ -41,6 +47,8 @@ data class MantraTranslationContributor( */ val signature: String, + val chatRoomId: String, + val relayHint: String? = null, val marmotGroupEventId: HexKey? = null, /**