Add chat room id on mantra tables

This commit is contained in:
Kgothatso Ngako
2026-07-19 21:08:44 +02:00
parent 3640a77413
commit 3a830d77d6
14 changed files with 367 additions and 43 deletions

View File

@@ -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(

View File

@@ -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
)
}
}

View File

@@ -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
)
}
}

View File

@@ -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
)
}
}

View File

@@ -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
)
}

View File

@@ -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
)
}
}

View File

@@ -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
)
}
}

View File

@@ -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
)
}
}

View File

@@ -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<MantraTranslationArtifactVersionContributor>): TranslationArtifactVersionContributorListEvent {
fun toTranslationChapterProofReaderListEvent(chatRoomId: HexKey, mantraTranslationChapterProofReaders: List<MantraTranslationArtifactVersionContributor>): TranslationArtifactVersionContributorListEvent {
// TODO: create TranslationChapterProofReaderListEvent from mantraTranslationChapterProofReaders
return TranslationArtifactVersionContributorListEvent(
id = "",

View File

@@ -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
)
}
}

View File

@@ -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,

View File

@@ -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
)
}
}

View File

@@ -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,
/**