feat: add search by nodeid and alias

This commit is contained in:
2026-06-03 18:11:47 +02:00
parent fe4b387a27
commit 4e58681919
8 changed files with 93 additions and 74 deletions
@@ -150,6 +150,10 @@ class PaymentCacheRepository(context: Context) {
suspend fun containsPayment(checkingId: String): Boolean =
dao.getByCheckingId(checkingId) != null
suspend fun updatePubkeyAlias(paymentHash: String, pubkey: String?, alias: String?) {
dao.updatePubkeyAlias(paymentHash, pubkey, alias)
}
/** Clear everything — useful for testing and logout. */
suspend fun clearAll() {
detailCache.clear()
@@ -14,7 +14,7 @@ import androidx.sqlite.db.SupportSQLiteDatabase
LnurlCacheEntity::class,
NodeAliasCacheEntity::class,
],
version = 4, // ← bumped
version = 5, // ← bumped
exportSchema = false
)
@TypeConverters(PaymentConverters::class)
@@ -70,6 +70,13 @@ abstract class AppDatabase : RoomDatabase() {
}
}
val MIGRATION_4_5 = object : Migration(4, 5) {
override fun migrate(db: SupportSQLiteDatabase) {
db.execSQL("ALTER TABLE payment_records ADD COLUMN pubkey TEXT")
db.execSQL("ALTER TABLE payment_records ADD COLUMN alias TEXT")
}
}
fun getInstance(context: Context): AppDatabase =
INSTANCE ?: synchronized(this) {
INSTANCE ?: Room.databaseBuilder(
@@ -36,6 +36,9 @@ interface PaymentDao {
@Query("DELETE FROM payment_records")
suspend fun deleteAll()
@Query("UPDATE payment_records SET pubkey = :pubkey, alias = :alias WHERE paymentHash = :paymentHash")
suspend fun updatePubkeyAlias(paymentHash: String, pubkey: String?, alias: String?)
/**
* Full-table query used when search or filter is active.
* All parameters are optional — pass null to skip that condition.
@@ -56,7 +59,9 @@ interface PaymentDao {
lower(memo) LIKE '%' || lower(:searchQuery) || '%' OR
lower(paymentHash) LIKE '%' || lower(:searchQuery) || '%' OR
lower(bolt11) LIKE '%' || lower(:searchQuery) || '%' OR
lower(preimage) LIKE '%' || lower(:searchQuery) || '%'
lower(preimage) LIKE '%' || lower(:searchQuery) || '%' OR
lower(pubkey) LIKE '%' || lower(:searchQuery) || '%' OR
lower(alias) LIKE '%' || lower(:searchQuery) || '%'
))
AND (:statusPattern IS NULL OR
',' || :statusPattern || ',' LIKE '%,' || lower(status) || ',%')
@@ -1,5 +1,6 @@
package com.bitcointxoko.gudariwallet.data.db
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import androidx.room.TypeConverters
@@ -20,5 +21,7 @@ data class PaymentRecordEntity(
val pending: Boolean,
val preimage: String?,
val extra: String?, // JSON blob — PaymentExtra serialised by TypeConverter
val savedAt: Long // epoch ms — used for TTL check
val savedAt: Long, // epoch ms — used for TTL check
@ColumnInfo(name = "pubkey") val pubkey: String? = null,
@ColumnInfo(name = "alias") val alias: String? = null
)
@@ -1,6 +1,7 @@
package com.bitcointxoko.gudariwallet.data.db
import android.util.Log
import com.bitcointxoko.gudariwallet.api.GsonProvider.gson
import com.bitcointxoko.gudariwallet.api.PaymentRecord
import com.bitcointxoko.gudariwallet.data.db.PaymentRecordEntity
@@ -30,13 +31,15 @@ fun PaymentRecord.toEntity(savedAt: Long): PaymentRecordEntity =
feeMsat = feeMsat,
memo = memo,
time = time,
createdAt = parseCreatedAt(time), // ← NEW
createdAt = parseCreatedAt(time),
status = status,
bolt11 = bolt11,
pending = pending,
preimage = preimage,
extra = extra?.let { com.bitcointxoko.gudariwallet.api.GsonProvider.gson.toJson(it) },
savedAt = savedAt
extra = extra?.let { gson.toJson(it) },
savedAt = savedAt,
pubkey = pubkey,
alias = alias
)
// ── PaymentRecordEntity → PaymentRecord ──────────────────────────────────────
@@ -49,13 +52,12 @@ fun PaymentRecordEntity.toDomain(): PaymentRecord =
feeMsat = feeMsat,
memo = memo,
time = time,
createdAt = createdAt, // ← NEW
createdAt = createdAt,
status = status,
bolt11 = bolt11,
pending = pending,
preimage = preimage,
extra = extra?.let {
com.bitcointxoko.gudariwallet.api.GsonProvider.gson
.fromJson(it, com.bitcointxoko.gudariwallet.api.PaymentExtra::class.java)
}
extra = extra?.let { gson.fromJson(it, com.bitcointxoko.gudariwallet.api.PaymentExtra::class.java) },
pubkey = pubkey,
alias = alias
)