Relay hints and such

This commit is contained in:
Kgothatso Ngako
2026-07-17 11:05:55 +02:00
parent bdcf685537
commit 803b9b6755
22 changed files with 170 additions and 31 deletions

View File

@@ -4,6 +4,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactEvent
import press.mantra.compose.nostr.nip30303.tags.DialectIdTag
@@ -25,11 +26,21 @@ data class MantraArtifact(
val license: String,
// val artifactApprovalId: String,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toArtifactEvent(): ArtifactEvent {
return ArtifactEvent(
id = id,

View File

@@ -4,6 +4,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent
import press.mantra.compose.nostr.nip30303.tags.ArtifactIdTag
@@ -25,11 +26,22 @@ data class MantraArtifactVersion(
*/
val versionLabel: String,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toArtifactVersionEvent(): ArtifactVersionEvent {
return ArtifactVersionEvent(
id = id,

View File

@@ -4,6 +4,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent
import press.mantra.compose.nostr.nip30303.ChapterEvent
@@ -26,11 +27,22 @@ data class MantraChapter(
val wordCount: Int,
val characterCount: Int,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toChapterEvent(): ChapterEvent {
return ChapterEvent(

View File

@@ -4,6 +4,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ChunkEvent
import press.mantra.compose.nostr.nip30303.tags.ChapterIdTag
@@ -24,11 +25,21 @@ data class MantraChunk(
val wordCount: Int,
val characterCount: Int,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toChunkEvent(): ChunkEvent {
return ChunkEvent(

View File

@@ -3,6 +3,7 @@ package press.mantra.compose.database.model
import androidx.room3.Entity
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import press.mantra.compose.database.model.traits.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.DialectEvent
import kotlin.time.Clock
@@ -22,9 +23,16 @@ data class MantraDialect(
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toDialectEvent(): DialectEvent {
return DialectEvent(

View File

@@ -4,6 +4,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationArtifactVersionIdTag
@@ -25,9 +26,16 @@ data class MantraTranslation(
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toTranslationEvent(): TranslationEvent {
return TranslationEvent(

View File

@@ -4,6 +4,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.ArtifactVersionEvent
import press.mantra.compose.nostr.nip30303.TranslationArtifactVersionEvent
@@ -25,11 +26,21 @@ data class MantraTranslationArtifactVersion(
val name: String,
val visibility: String,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toTranslationArtifactVersionEvent(): TranslationArtifactVersionEvent {
return TranslationArtifactVersionEvent(

View File

@@ -6,6 +6,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationArtifactVersionEditorListEvent
import press.mantra.compose.nostr.nip30303.TranslationChapterProofReaderListEvent
@@ -24,11 +25,21 @@ data class MantraTranslationArtifactVersionEditor(
val translationArtifactVersionId: HexKey,
val editorPublicKey: HexKey,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
companion object {
fun toTranslationChapterProofReaderListEvent(mantraTranslationChapterProofReaders: List<MantraTranslationChapterProofReader>): TranslationArtifactVersionEditorListEvent {

View File

@@ -3,6 +3,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChapterEvent
import press.mantra.compose.nostr.nip30303.tags.ChapterIdTag
@@ -21,11 +22,21 @@ data class MantraTranslationChapter(
val translationArtifactVersionId: HexKey,
val index: Int,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toTranslationChapterEvent(): TranslationChapterEvent {
return TranslationChapterEvent(
id = id,

View File

@@ -6,6 +6,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChapterProofReaderListEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag
@@ -23,11 +24,21 @@ data class MantraTranslationChapterProofReader(
val translationChapterId: HexKey,
val proofReaderPublicKey: HexKey,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
companion object {
fun toTranslationChapterProofReaderListEvent(mantraTranslationChapterProofReaders: List<MantraTranslationChapterProofReader>): TranslationChapterProofReaderListEvent {

View File

@@ -6,6 +6,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChapterTranslatorListEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationChapterIdTag
@@ -23,11 +24,21 @@ data class MantraTranslationChapterTranslator(
val translationChapterId: HexKey,
val translatorPublicKey: HexKey,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
companion object {
fun toTranslationChapterTranslatorListEvent(mantraTranslationChapterTranslators: List<MantraTranslationChapterTranslator>): TranslationChapterTranslatorListEvent {

View File

@@ -4,6 +4,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationChunkEvent
import press.mantra.compose.nostr.nip30303.tags.ChunkIdTag
@@ -24,11 +25,21 @@ data class MantraTranslationChunk(
val text: String,
val index: Int,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
fun toTranslationChunkEvent(): TranslationChunkEvent {
return TranslationChunkEvent(

View File

@@ -6,6 +6,7 @@ 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.OptionalNostrEventEntity
import press.mantra.compose.database.model.traits.TimestampedEntity
import press.mantra.compose.nostr.nip30303.TranslationTranslatorListEvent
import press.mantra.compose.nostr.nip30303.tags.TranslationIdTag
@@ -23,11 +24,21 @@ data class MantraTranslationTranslator(
val translationId: HexKey,
val translatorPublicKey: HexKey,
/**
* Signature will be an empty string if this is a rumor
*/
val signature: String,
val relayHint: String? = null,
val marmotGroupEventId: HexKey? = null,
/**
* Related nostrEventId if this is not a rumor...
*/
override val nostrEventId: HexKey? = null,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt
): TimestampedEntity {
): OptionalNostrEventEntity, TimestampedEntity {
companion object {
fun toTranslationChapterProofReaderListEvent(mantraTranslationChapterProofReaders: List<MantraTranslationChapterProofReader>): TranslationTranslatorListEvent {

View File

@@ -30,8 +30,8 @@ data class ArtifactIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class ArtifactVersionIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class ChapterIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class ChunkIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class DialectIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class TranslationArtifactVersionIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class TranslationChapterIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class TranslationChunkIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)

View File

@@ -30,8 +30,8 @@ class TranslationIdTag(
fun assemble(
eventId: HexKey,
relay: NormalizedRelayUrl?,
pubkey: String?,
relay: NormalizedRelayUrl? = null,
pubkey: String? = null,
) = arrayOfNotNull(TAG_NAME, eventId, relay?.url, pubkey)
fun assemble(ref: EventReference) = assemble(ref.eventId, ref.relayHint, ref.author)