Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
2c1f6af
feat: attach tags on activity sync
jvsena42 Aug 24, 2025
e9c2b3f
Merge branch 'fix/get-detail-by-tx-id' into fix/tag-syncing
jvsena42 Aug 25, 2025
552cccb
refactor: call addTagsToTransaction
jvsena42 Aug 25, 2025
e58873c
Merge branch 'fix/get-detail-by-tx-id' into fix/tag-syncing
jvsena42 Aug 25, 2025
5643d43
feat: rename InvoiceTagEntity.kt to TagMetadataEntity.kt and add more…
jvsena42 Aug 26, 2025
b46a40c
feat: rename InvoiceTagEntity.kt to TagMetadataEntity.kt and add more…
jvsena42 Aug 26, 2025
43dc6be
feat: save on-chain address
jvsena42 Aug 26, 2025
43c9c6f
refactor: implement batch sync
jvsena42 Aug 26, 2025
21735b1
feat: lightning tag sync
jvsena42 Aug 26, 2025
00e7548
feat: on-chain outbound sync
jvsena42 Aug 26, 2025
cd4d1b9
feat: on-chain inbound sync
jvsena42 Aug 26, 2025
de10591
refactor: remove unused code
jvsena42 Aug 26, 2025
732d12e
refactor: remove unused code
jvsena42 Aug 26, 2025
5713e3c
refactor: remove unnecessary code
jvsena42 Aug 26, 2025
1d67ca2
chore: remove log
jvsena42 Aug 26, 2025
8303632
fix: added activity filter
jvsena42 Aug 26, 2025
17c9a00
fix: payment hash extraction
jvsena42 Aug 26, 2025
4ac4c25
chore: add logs
jvsena42 Aug 26, 2025
c2f808b
Merge branch 'fix/get-detail-by-tx-id' into fix/tag-syncing
jvsena42 Aug 26, 2025
905924f
chore: add logs
jvsena42 Aug 27, 2025
25a64d4
Merge branch 'fix/get-detail-by-tx-id' into fix/tag-syncing
jvsena42 Aug 27, 2025
dc113fd
chore: update tags async
jvsena42 Aug 27, 2025
9e5b897
fix: get last activities instead of payments to reduce the amount of …
jvsena42 Aug 27, 2025
da98a89
Merge branch 'fix/get-detail-by-tx-id' into fix/tag-syncing
jvsena42 Aug 27, 2025
70ea9e3
Merge branch 'fix/get-detail-by-tx-id' into fix/tag-syncing
jvsena42 Aug 29, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions app/schemas/to.bitkit.data.AppDb/3.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
{
"formatVersion": 1,
"database": {
"version": 3,
"identityHash": "e8c2a3893862c335833d1329bd45b666",
"entities": [
{
"tableName": "config",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`walletIndex` INTEGER NOT NULL, PRIMARY KEY(`walletIndex`))",
"fields": [
{
"fieldPath": "walletIndex",
"columnName": "walletIndex",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"walletIndex"
]
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "tag_metadata",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `paymentHash` TEXT, `txId` TEXT, `address` TEXT NOT NULL, `isReceive` INTEGER NOT NULL, `tags` TEXT NOT NULL, `createdAt` INTEGER NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "paymentHash",
"columnName": "paymentHash",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "txId",
"columnName": "txId",
"affinity": "TEXT",
"notNull": false
},
{
"fieldPath": "address",
"columnName": "address",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "isReceive",
"columnName": "isReceive",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "tags",
"columnName": "tags",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "createdAt",
"columnName": "createdAt",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
}
],
"views": [],
"setupQueries": [
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e8c2a3893862c335833d1329bd45b666')"
]
}
}
10 changes: 5 additions & 5 deletions app/src/main/java/to/bitkit/data/AppDb.kt
Original file line number Diff line number Diff line change
Expand Up @@ -19,22 +19,22 @@ import dagger.assisted.AssistedInject
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import to.bitkit.BuildConfig
import to.bitkit.data.dao.InvoiceTagDao
import to.bitkit.data.dao.TagMetadataDao
import to.bitkit.data.entities.ConfigEntity
import to.bitkit.data.entities.InvoiceTagEntity
import to.bitkit.data.entities.TagMetadataEntity
import to.bitkit.data.typeConverters.StringListConverter

@Database(
entities = [
ConfigEntity::class,
InvoiceTagEntity::class,
TagMetadataEntity::class,
],
version = 2,
version = 3,
)
@TypeConverters(StringListConverter::class)
abstract class AppDb : RoomDatabase() {
abstract fun configDao(): ConfigDao
abstract fun invoiceTagDao(): InvoiceTagDao
abstract fun tagMetadataDao(): TagMetadataDao

companion object {
private const val DB_NAME = "${BuildConfig.APPLICATION_ID}.sqlite"
Expand Down
30 changes: 0 additions & 30 deletions app/src/main/java/to/bitkit/data/dao/InvoiceTagDao.kt

This file was deleted.

60 changes: 60 additions & 0 deletions app/src/main/java/to/bitkit/data/dao/TagMetadataDao.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package to.bitkit.data.dao

import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import to.bitkit.data.entities.TagMetadataEntity

@Dao
interface TagMetadataDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun saveTagMetadata(tagMetadata: TagMetadataEntity)

@Query("SELECT * FROM tag_metadata")
suspend fun getAll(): List<TagMetadataEntity>

// Search by payment hash (for invoices)
@Query("SELECT * FROM tag_metadata WHERE paymentHash = :paymentHash LIMIT 1")
suspend fun searchByPaymentHash(paymentHash: String): TagMetadataEntity?

// Search by transaction ID
@Query("SELECT * FROM tag_metadata WHERE txId = :txId LIMIT 1")
suspend fun searchByTxId(txId: String): TagMetadataEntity?

// Search by address
@Query("SELECT * FROM tag_metadata WHERE address = :address ORDER BY createdAt DESC LIMIT 1")
suspend fun searchByAddress(address: String): TagMetadataEntity?

// Search by primary key (id)
@Query("SELECT * FROM tag_metadata WHERE id = :id LIMIT 1")
suspend fun searchById(id: String): TagMetadataEntity?

// Get all receive transactions
@Query("SELECT * FROM tag_metadata WHERE isReceive = 1")
suspend fun getAllReceiveTransactions(): List<TagMetadataEntity>

// Get all send transactions
@Query("SELECT * FROM tag_metadata WHERE isReceive = 0")
suspend fun getAllSendTransactions(): List<TagMetadataEntity>

@Delete
suspend fun deleteTagMetadata(tagMetadata: TagMetadataEntity)

@Query("DELETE FROM tag_metadata WHERE paymentHash = :paymentHash")
suspend fun deleteByPaymentHash(paymentHash: String)

@Query("DELETE FROM tag_metadata WHERE txId = :txId")
suspend fun deleteByTxId(txId: String)

@Query("DELETE FROM tag_metadata WHERE id = :id")
suspend fun deleteById(id: String)

@Query("DELETE FROM tag_metadata")
suspend fun deleteAll()

@Query("DELETE FROM tag_metadata WHERE createdAt < :expirationTimeStamp")
suspend fun deleteExpired(expirationTimeStamp: Long)
}
11 changes: 0 additions & 11 deletions app/src/main/java/to/bitkit/data/entities/InvoiceTagEntity.kt

This file was deleted.

21 changes: 21 additions & 0 deletions app/src/main/java/to/bitkit/data/entities/TagMetadataEntity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package to.bitkit.data.entities

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "tag_metadata")
/**
* @param id This will be paymentHash, txId, or address depending on context
* @param txId on-chain transaction id
* @param address on-chain address
* @param isReceive true for receive, false for send
* */
data class TagMetadataEntity(
@PrimaryKey val id: String,
val paymentHash: String? = null,
val txId: String? = null,
val address: String,
val isReceive: Boolean,
val tags: List<String>,
val createdAt: Long,
)
Loading