Save nostrEventRelay association

This commit is contained in:
Kgothatso Ngako
2026-05-04 22:29:22 +02:00
parent acea87e932
commit 2bdb5bc3bf
6 changed files with 145 additions and 5 deletions

View File

@@ -10,6 +10,7 @@ import ac.cord.auxiliary.compose.database.dao.NegentropySynchronizeRequestDao
import ac.cord.auxiliary.compose.database.dao.NegentropySynchronizeResultDao
import ac.cord.auxiliary.compose.database.dao.NostrDao
import ac.cord.auxiliary.compose.database.dao.NostrEventDao
import ac.cord.auxiliary.compose.database.dao.NostrEventRelayDao
import ac.cord.auxiliary.compose.database.dao.PostDao
import ac.cord.auxiliary.compose.database.dao.ProfileDao
import ac.cord.auxiliary.compose.database.dao.QuotedRelationDao
@@ -29,6 +30,7 @@ import ac.cord.auxiliary.compose.database.model.Mention
import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest
import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeResult
import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.NostrEventRelay
import ac.cord.auxiliary.compose.database.model.Post
import ac.cord.auxiliary.compose.database.model.Profile
import ac.cord.auxiliary.compose.database.model.QuotedRelation
@@ -59,6 +61,7 @@ val GENESIS_AT = Instant.fromEpochMilliseconds(1231006505000L)
NegentropySynchronizeRequest::class,
NegentropySynchronizeResult::class,
NostrEvent::class,
NostrEventRelay::class,
Post::class,
Profile::class,
QuotedRelation::class,
@@ -90,7 +93,11 @@ abstract class AuxDatabase: RoomDatabase() {
abstract fun nostrDao(): NostrDao
abstract fun nostrEventDao(): NostrEventDao
abstract fun nostrEventRelayDao(): NostrEventRelayDao
abstract fun postDao(): PostDao
abstract fun profileDao(): ProfileDao
abstract fun quotedRelationDao(): QuotedRelationDao

View File

@@ -6,6 +6,7 @@ import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest
import ac.cord.auxiliary.compose.database.model.Connection
import ac.cord.auxiliary.compose.database.model.Mention
import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.NostrEventRelay
import ac.cord.auxiliary.compose.database.model.Post
import ac.cord.auxiliary.compose.database.model.Profile
import ac.cord.auxiliary.compose.database.model.SynchronizeNostrEventRequest
@@ -100,17 +101,18 @@ abstract class NostrDao(
@Transaction
open suspend fun storeNostrEvent(
nostrEvent: NostrEvent,
relayURL: String,
synchronizationRelayURLs: List<String>,
level: Int
) {
val storedNostrEvent = database.nostrEventDao().getNostrEventById(nostrEvent.id)
if (storedNostrEvent == null) {
// Add new nostr event
logger.i("Store Nostr Event: $nostrEvent")
database.nostrEventDao().insert(nostrEvent)
} else if (nostrEvent.createdAt > storedNostrEvent.createdAt) {
// Update nostr event`
logger.i("Update Nostr Event: $nostrEvent")
@@ -126,6 +128,13 @@ abstract class NostrDao(
}
}
database.nostrEventRelayDao().upsert(
NostrEventRelay(
relayURL = relayURL,
nostrEventId = nostrEvent.id
)
)
// Index nostrEvent
logger.i("Index Nostr Event: ${nostrEvent.id}")
indexNostrEvent(

View File

@@ -0,0 +1,16 @@
package ac.cord.auxiliary.compose.database.dao
import ac.cord.auxiliary.compose.database.model.NostrEventRelay
import ac.cord.auxiliary.compose.database.model.Relay
import androidx.room3.Dao
import androidx.room3.Query
import androidx.room3.Upsert
import kotlinx.coroutines.flow.Flow
@Dao
interface NostrEventRelayDao {
@Upsert
suspend fun upsert(nostrEventRelay: NostrEventRelay)
}

View File

@@ -0,0 +1,44 @@
package ac.cord.auxiliary.compose.database.model
import ac.cord.auxiliary.compose.database.model.traits.NostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.OptionalNostrEventEntity
import ac.cord.auxiliary.compose.database.model.traits.TimestampedEntity
import ac.cord.auxiliary.compose.database.model.traits.UnsignedNostrEventEntity
import ac.cord.auxiliary.compose.database.model.typealiases.SynchronizationFilterArray
import ac.cord.auxiliary.compose.database.model.types.SynchronizationFilter
import androidx.room3.Entity
import androidx.room3.ForeignKey
import androidx.room3.Index
import androidx.room3.PrimaryKey
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import kotlin.time.Clock
import kotlin.time.Instant
import kotlin.uuid.ExperimentalUuidApi
import kotlin.uuid.Uuid
@OptIn(ExperimentalUuidApi::class)
@Entity(
foreignKeys = [
ForeignKey(
entity = NostrEvent::class,
parentColumns = ["id"],
childColumns = ["nostrEventId"],
onDelete = ForeignKey.CASCADE,
),
],
indices = [
Index("relayURL"),
],
primaryKeys = ["nostrEventId","relayURL"]
)
data class NostrEventRelay(
val relayURL: String,
override val nostrEventId: HexKey,
override val createdAt: Instant = Clock.System.now(),
override val updatedAt: Instant = createdAt,
): NostrEventEntity, TimestampedEntity {
}

View File

@@ -7,6 +7,7 @@ import ac.cord.auxiliary.compose.database.model.BroadcastNostrEventRequest
import ac.cord.auxiliary.compose.database.model.Connection
import ac.cord.auxiliary.compose.database.model.NegentropySynchronizeRequest
import ac.cord.auxiliary.compose.database.model.NostrEvent
import ac.cord.auxiliary.compose.database.model.NostrEventRelay
import ac.cord.auxiliary.compose.database.model.Profile
import ac.cord.auxiliary.compose.database.model.RecentSearch
import ac.cord.auxiliary.compose.database.model.Relay
@@ -433,9 +434,10 @@ class DatabaseNostrRepository(
logger.d("saveNostrEvent: $nostrEvent")
database.nostrDao().storeNostrEvent(
nostrEvent.copy(
broadcastedAt = nostrEvent.createdAt
broadcastedAt = nostrEvent.createdAt,
),
synchronizationRelayURLs = synchronizationRelayURLs,
relayURL = synchronizeNostrEventRequest.relayURL,
level = synchronizeNostrEventRequest.level
)
@@ -456,6 +458,7 @@ class DatabaseNostrRepository(
logger.d("saveNostrEvent: $nostrEvent")
database.nostrDao().storeNostrEvent(
nostrEvent,
relayURL = negentropySynchronizeRequest.relayURL,
synchronizationRelayURLs = synchronizationRelayURLs,
level = negentropySynchronizeRequest.level
)