Add tag builders

This commit is contained in:
Kgothatso Ngako
2026-07-17 01:02:29 +02:00
parent 9b2022e79f
commit 3bc12ca344
21 changed files with 296 additions and 14 deletions

View File

@@ -3,8 +3,10 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactEvent
import press.mantra.compose.nostr.nip30303.tags.DialectIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -33,7 +35,11 @@ data class MantraArtifact(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<ArtifactEvent>()
.addUnique(
DialectIdTag.assemble(dialectId)
)
.build(),
content = "",
sig = signature
)

View File

@@ -3,8 +3,10 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent
import press.mantra.compose.nostr.nip30303.tags.ArtifactIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -33,7 +35,9 @@ data class MantraArtifactVersion(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<ArtifactVersionEvent>().addUnique(
ArtifactIdTag.assemble(artifactId)
).build(),
content = "",
sig = signature
)

View File

@@ -3,8 +3,11 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent
import press.mantra.compose.nostr.nip30303.ChapterEvent
import press.mantra.compose.nostr.nip30303.tags.ArtifactVersionIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -34,7 +37,9 @@ data class MantraChapter(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<ArtifactVersionEvent>().addUnique(
ArtifactVersionIdTag.assemble(artifactVersionId)
).build(),
content = "",
sig = signature
)

View File

@@ -3,8 +3,10 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ChunkEvent
import press.mantra.compose.nostr.nip30303.tags.ChapterIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -33,7 +35,9 @@ data class MantraChunk(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<ChunkEvent>().addUnique(
ChapterIdTag.assemble(chapterId)
).build(),
content = "",
sig = signature
)

View File

@@ -3,8 +3,11 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationArtifactVersionIdTag
import press.mantra.compose.nostr.nip30303.tags.TranslationChunkIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -31,7 +34,14 @@ data class MantraTranslation(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<TranslationEvent>()
.addUnique(
TranslationArtifactVersionIdTag.assemble(translationArtifactVersionId)
)
.addUnique(
TranslationChunkIdTag.assemble(translationChunkId)
)
.build(),
content = "",
sig = signature
)

View File

@@ -3,8 +3,12 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent
import press.mantra.compose.nostr.nip30303.TranslationArtifactVersionEvent
import press.mantra.compose.nostr.nip30303.tags.ArtifactVersionIdTag
import press.mantra.compose.nostr.nip30303.tags.DialectIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -32,7 +36,14 @@ data class MantraTranslationArtifactVersion(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<ArtifactVersionEvent>()
.addUnique(
ArtifactVersionIdTag.assemble(artifactVersionId)
)
.addUnique(
DialectIdTag.assemble(dialectId)
)
.build(),
content = "",
sig = signature
)

View File

@@ -3,9 +3,13 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag
import com.vitorpamplona.quartz.utils.TimeUtils
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationArtifactVersionEditorListEvent
import press.mantra.compose.nostr.nip30303.TranslationChapterProofReaderListEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationArtifactVersionIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -33,7 +37,15 @@ data class MantraTranslationArtifactVersionEditor(
id = "",
pubKey = "",
createdAt = TimeUtils.now(),
tags = emptyArray(),
tags = TagArrayBuilder<TranslationChapterProofReaderListEvent>()
.addUnique(
TranslationArtifactVersionIdTag.assemble("") // TODO: use actual value..
)
// TODO: Add tag for editorPublicKey
.addUnique(
AuthorTag.assemble("") // TODO: Get piblicKeyList...
)
.build(),
content = "",
sig = ""
)

View File

@@ -2,8 +2,11 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChapterEvent
import press.mantra.compose.nostr.nip30303.tags.ChapterIdTag
import press.mantra.compose.nostr.nip30303.tags.TranslationArtifactVersionIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -28,7 +31,14 @@ data class MantraTranslationChapter(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<TranslationChapterEvent>()
.addUnique(
TranslationArtifactVersionIdTag.assemble(translationArtifactVersionId)
)
.addUnique(
ChapterIdTag.assemble(chapterId)
)
.build(),
content = "",
sig = signature
)

View File

@@ -3,9 +3,12 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag
import com.vitorpamplona.quartz.utils.TimeUtils
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChapterProofReaderListEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -33,7 +36,14 @@ data class MantraTranslationChapterProofReader(
id = "",
pubKey = "",
createdAt = TimeUtils.now(),
tags = emptyArray(),
tags = TagArrayBuilder<TranslationChapterProofReaderListEvent>()
.addUnique(
TranslationChapterIdTag.assemble("")
)
.addUnique(
AuthorTag.assemble("") // TODO: PublicKeyListTag
)
.build(),
content = "",
sig = ""
)

View File

@@ -3,9 +3,12 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag
import com.vitorpamplona.quartz.utils.TimeUtils
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChapterTranslatorListEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -33,7 +36,14 @@ data class MantraTranslationChapterTranslator(
id = "",
pubKey = "",
createdAt = TimeUtils.now(),
tags = emptyArray(),
tags = TagArrayBuilder<TranslationChapterTranslatorListEvent>()
.addUnique(
TranslationChapterIdTag.assemble("")
)
.addUnique(
AuthorTag.assemble("") // TODO: PublicKeyListTag
)
.build(),
content = "",
sig = ""
)

View File

@@ -3,8 +3,11 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChunkEvent
import press.mantra.compose.nostr.nip30303.tags.ChunkIdTag
import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -16,10 +19,10 @@ data class MantraTranslationChunk(
@PrimaryKey
val id: HexKey,
val publicKey: HexKey,
val text: String,
val index: Int,
val chunkId: HexKey,
val translationChapterId: HexKey,
val text: String,
val index: Int,
val signature: String,
@@ -32,7 +35,14 @@ data class MantraTranslationChunk(
id = id,
pubKey = publicKey,
createdAt = createdAt.epochSeconds,
tags = emptyArray(),
tags = TagArrayBuilder<TranslationChunkEvent>()
.addUnique(
TranslationChapterIdTag.assemble(translationChapterId)
)
.addUnique(
ChunkIdTag.assemble(chunkId) // TODO: PublicKeyListTag
)
.build(),
content = "",
sig = signature
)

View File

@@ -3,9 +3,12 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.TagArrayBuilder
import com.vitorpamplona.quartz.nipF4Podcasts.metadata.tags.AuthorTag
import com.vitorpamplona.quartz.utils.TimeUtils
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationTranslatorListEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationIdTag
import kotlin.time.Clock
import kotlin.time.Instant
@@ -33,7 +36,14 @@ data class MantraTranslationTranslator(
id = "",
pubKey = "",
createdAt = TimeUtils.now(),
tags = emptyArray(),
tags = TagArrayBuilder<TranslationTranslatorListEvent>()
.addUnique(
TranslationIdTag.assemble("") // TODO: Use actual translationId
)
.addUnique(
AuthorTag.assemble("") // TODO: PublicKeyListTag
)
.build(),
content = "",
sig = ""
)

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class ArtifactIdTag {
companion object {
const val TAG_NAME = "artifactId"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(artifactId: HexKey) = arrayOf(TAG_NAME, artifactId)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class ArtifactVersionIdTag {
companion object {
const val TAG_NAME = "artifactVersionId"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(artifactVersionId: HexKey) = arrayOf(TAG_NAME, artifactVersionId)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class ChapterIdTag {
companion object {
const val TAG_NAME = "chapterIdTag"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(chapterIdTag: HexKey) = arrayOf(TAG_NAME, chapterIdTag)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class ChunkIdTag {
companion object {
const val TAG_NAME = "chunkIdTag"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(chunkIdTag: HexKey) = arrayOf(TAG_NAME, chunkIdTag)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class DialectIdTag {
companion object {
const val TAG_NAME = "dialectIdTag"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(dialectIdTag: HexKey) = arrayOf(TAG_NAME, dialectIdTag)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class TranslationArtifactVersionIdTag {
companion object {
const val TAG_NAME = "translationArtifactVersionId"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(translationArtifactVersionId: HexKey) = arrayOf(TAG_NAME, translationArtifactVersionId)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class TranslationChapterIdTag {
companion object {
const val TAG_NAME = "translationChapterIdTag"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(translationChapterIdTag: HexKey) = arrayOf(TAG_NAME, translationChapterIdTag)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class TranslationChunkIdTag {
companion object {
const val TAG_NAME = "translationChunkIdTag"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(translationChunkIdTag: HexKey) = arrayOf(TAG_NAME, translationChunkIdTag)
}
}

View File

@@ -0,0 +1,20 @@
package press.mantra.compose.nostr.nip30303.tags
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.core.has
import com.vitorpamplona.quartz.utils.ensure
class TranslationIdTag {
companion object {
const val TAG_NAME = "translationIdTag"
fun parse(tag: Array<String>): HexKey? {
ensure(tag.has(1)) { return null }
ensure(tag[0] == TAG_NAME) { return null }
ensure(tag[1].isNotBlank()) { return null }
return tag[1]
}
fun assemble(translationIdTag: HexKey) = arrayOf(TAG_NAME, translationIdTag)
}
}