Add more database traits (and Broadcast tables)
This commit is contained in:
@@ -3,7 +3,6 @@ package ac.aux.compose.database.dao
|
||||
import ac.aux.compose.database.AuxDatabase
|
||||
import ac.aux.compose.database.model.NostrEvent
|
||||
import ac.aux.compose.database.model.Post
|
||||
import ac.aux.compose.database.model.Profile
|
||||
import androidx.room.Dao
|
||||
import androidx.room.Embedded
|
||||
import androidx.room.Relation
|
||||
@@ -14,9 +13,12 @@ abstract class NostrDao(
|
||||
private val database: AuxDatabase
|
||||
) {
|
||||
@Transaction
|
||||
open suspend fun insertPostAndNostrEvent(nostrEvent: NostrEvent) {
|
||||
open suspend fun insertNostrEvent(nostrEvent: NostrEvent) {
|
||||
// TODO: Find or create profile with nostrEvent.pubkey
|
||||
|
||||
database.nostrEventDao().insert(nostrEvent)
|
||||
|
||||
// TODO: Get post from nostrEvent
|
||||
// database.nostrEventDao().insert(nostrEvent)
|
||||
// database.postDao().insert(nostrEvent.post) // TODO: Make use of the nostrEventId...
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package ac.aux.compose.database.model
|
||||
|
||||
import ac.aux.compose.database.model.traits.NostrEventEntity
|
||||
import androidx.room.Entity
|
||||
import androidx.room.ForeignKey
|
||||
import androidx.room.Index
|
||||
import androidx.room.PrimaryKey
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
|
||||
@Entity(
|
||||
foreignKeys = [
|
||||
ForeignKey(
|
||||
entity = NostrEvent::class,
|
||||
parentColumns = ["id"],
|
||||
childColumns = ["nostrEventId"],
|
||||
onDelete = ForeignKey.CASCADE,
|
||||
),
|
||||
],
|
||||
indices = [
|
||||
Index("nostrEventId"),
|
||||
Index("isAccepted"),
|
||||
],
|
||||
)
|
||||
data class BroadcastNostrEventReceipt(
|
||||
@PrimaryKey(autoGenerate = true)
|
||||
val id: Long,
|
||||
override val nostrEventId: HexKey,
|
||||
val isAccepted: Boolean,
|
||||
val relayURL: String,
|
||||
val messages: String? = null
|
||||
): NostrEventEntity
|
||||
@@ -18,6 +18,7 @@ import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
],
|
||||
indices = [
|
||||
Index("nostrEventId"),
|
||||
Index("status"),
|
||||
],
|
||||
)
|
||||
data class BroadcastRequest(
|
||||
@@ -25,4 +26,5 @@ data class BroadcastRequest(
|
||||
val id: Long,
|
||||
override val nostrEventId: HexKey,
|
||||
val status: String = "pending",
|
||||
val relayURL: String,
|
||||
): NostrEventEntity
|
||||
@@ -3,6 +3,8 @@ package ac.aux.compose.database.model
|
||||
import ac.aux.compose.database.model.traits.BroadcastableEntity
|
||||
import ac.aux.compose.database.model.traits.LocalStoreEntity
|
||||
import ac.aux.compose.database.model.traits.NostrEventEntity
|
||||
import ac.aux.compose.database.model.traits.ProfilePublicKeyEntity
|
||||
import ac.aux.compose.database.model.traits.ReplyingToEntity
|
||||
import ac.aux.compose.database.model.traits.SoftDeletableEntity
|
||||
import ac.aux.compose.database.model.traits.TimestampedEntity
|
||||
import ac.aux.compose.database.model.traits.UserViewableEntity
|
||||
@@ -56,17 +58,18 @@ import kotlin.time.Instant
|
||||
data class Post(
|
||||
@PrimaryKey
|
||||
val id: HexKey,
|
||||
override val nostrEventId: HexKey, // Might be a replaceable nostr event?
|
||||
val replyToId: HexKey? = null,
|
||||
val repostId: HexKey? = null,
|
||||
val quote: HexKey? = null,
|
||||
val profilePublicKey: HexKey,
|
||||
val content: String,
|
||||
|
||||
override val nostrEventId: HexKey, // Might be a replaceable nostr event?
|
||||
override val replyToId: HexKey? = null,
|
||||
override val profilePublicKey: HexKey,
|
||||
|
||||
override val createdAt: Instant = Clock.System.now(),
|
||||
override val updatedAt: Instant = Clock.System.now(),
|
||||
override val savedAt: Instant = Clock.System.now(),
|
||||
override val viewedAt: Instant? = null,
|
||||
override val deletedAt: Instant? = null,
|
||||
override val broadcastedAt: Instant? = null,
|
||||
): NostrEventEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity
|
||||
): NostrEventEntity, ReplyingToEntity, ProfilePublicKeyEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity
|
||||
@@ -29,7 +29,6 @@ import kotlin.time.Instant
|
||||
data class Profile(
|
||||
@PrimaryKey
|
||||
val publicKey: String,
|
||||
override val nostrEventId: String,
|
||||
val userName: String? = null, // name in the nostr event...
|
||||
val displayName: String? = null,
|
||||
val picture: String? = null,
|
||||
@@ -44,6 +43,8 @@ data class Profile(
|
||||
val lud16: String? = null,
|
||||
val twitter: String? = null,
|
||||
|
||||
override val nostrEventId: String,
|
||||
|
||||
override val createdAt: Instant = Clock.System.now(),
|
||||
override val updatedAt: Instant = Clock.System.now(),
|
||||
override val savedAt: Instant = Clock.System.now(),
|
||||
|
||||
@@ -3,6 +3,8 @@ package ac.aux.compose.database.model
|
||||
import ac.aux.compose.database.model.traits.BroadcastableEntity
|
||||
import ac.aux.compose.database.model.traits.LocalStoreEntity
|
||||
import ac.aux.compose.database.model.traits.NostrEventEntity
|
||||
import ac.aux.compose.database.model.traits.ProfilePublicKeyEntity
|
||||
import ac.aux.compose.database.model.traits.ReplyingToEntity
|
||||
import ac.aux.compose.database.model.traits.SoftDeletableEntity
|
||||
import ac.aux.compose.database.model.traits.TimestampedEntity
|
||||
import ac.aux.compose.database.model.traits.UserViewableEntity
|
||||
@@ -48,14 +50,16 @@ import kotlin.time.Instant
|
||||
data class Reaction(
|
||||
@PrimaryKey
|
||||
val id: HexKey,
|
||||
override val nostrEventId: HexKey, // Might be a replaceable nostr event?
|
||||
val replyToId: HexKey,
|
||||
val profilePublicKey: HexKey,
|
||||
val content: String,
|
||||
|
||||
override val nostrEventId: HexKey,
|
||||
override val replyToId: HexKey,
|
||||
override val profilePublicKey: HexKey,
|
||||
|
||||
override val createdAt: Instant = Clock.System.now(),
|
||||
override val updatedAt: Instant = Clock.System.now(),
|
||||
override val savedAt: Instant = Clock.System.now(),
|
||||
override val viewedAt: Instant? = null,
|
||||
override val deletedAt: Instant? = null,
|
||||
override val broadcastedAt: Instant? = null,
|
||||
): NostrEventEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity
|
||||
): NostrEventEntity, ReplyingToEntity, ProfilePublicKeyEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity
|
||||
|
||||
@@ -3,6 +3,7 @@ package ac.aux.compose.database.model
|
||||
import ac.aux.compose.database.model.traits.BroadcastableEntity
|
||||
import ac.aux.compose.database.model.traits.LocalStoreEntity
|
||||
import ac.aux.compose.database.model.traits.NostrEventEntity
|
||||
import ac.aux.compose.database.model.traits.ProfilePublicKeyEntity
|
||||
import ac.aux.compose.database.model.traits.SoftDeletableEntity
|
||||
import ac.aux.compose.database.model.traits.TimestampedEntity
|
||||
import ac.aux.compose.database.model.traits.UserViewableEntity
|
||||
@@ -48,14 +49,16 @@ import kotlin.time.Instant
|
||||
data class Repost(
|
||||
@PrimaryKey
|
||||
val id: HexKey,
|
||||
override val nostrEventId: HexKey, // Might be a replaceable nostr event?
|
||||
val postId: HexKey? = null,
|
||||
val profilePublicKey: HexKey,
|
||||
val content: String,
|
||||
|
||||
override val nostrEventId: HexKey, // Might be a replaceable nostr event?
|
||||
override val profilePublicKey: HexKey,
|
||||
|
||||
override val createdAt: Instant = Clock.System.now(),
|
||||
override val updatedAt: Instant = Clock.System.now(),
|
||||
override val savedAt: Instant = Clock.System.now(),
|
||||
override val viewedAt: Instant? = null,
|
||||
override val deletedAt: Instant? = null,
|
||||
override val broadcastedAt: Instant? = null,
|
||||
): NostrEventEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity
|
||||
): NostrEventEntity, ProfilePublicKeyEntity, TimestampedEntity, LocalStoreEntity, UserViewableEntity, BroadcastableEntity, SoftDeletableEntity
|
||||
@@ -52,12 +52,15 @@ import kotlin.time.Instant
|
||||
data class Zap(
|
||||
@PrimaryKey
|
||||
val id: HexKey,
|
||||
override val nostrEventId: HexKey, // Might be a replaceable nostr event?
|
||||
val postId: HexKey,
|
||||
val senderPublicKey: HexKey,
|
||||
val receiverPublicKey: HexKey,
|
||||
val message: String?,
|
||||
val invoice: String?,
|
||||
val amountInMillisatoshis: Long?,
|
||||
|
||||
override val nostrEventId: HexKey, // Might be a replaceable nostr event?
|
||||
|
||||
override val createdAt: Instant = Clock.System.now(),
|
||||
override val updatedAt: Instant = Clock.System.now(),
|
||||
override val savedAt: Instant = Clock.System.now(),
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package ac.aux.compose.database.model.traits
|
||||
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
|
||||
interface ProfilePublicKeyEntity {
|
||||
val profilePublicKey: HexKey
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package ac.aux.compose.database.model.traits
|
||||
|
||||
import com.vitorpamplona.quartz.nip01Core.core.HexKey
|
||||
|
||||
interface ReplyingToEntity {
|
||||
val replyToId: HexKey?
|
||||
}
|
||||
@@ -12,7 +12,7 @@ class DatabasePostRepository(
|
||||
) {
|
||||
val nostrDao = database.nostrDao()
|
||||
|
||||
nostrDao.insertPostAndNostrEvent(
|
||||
nostrDao.insertNostrEvent(
|
||||
nostrEvent
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user