Skip to content

Commit 358b95d

Browse files
committed
feat: introduce Data Access Object
1 parent d31c0a4 commit 358b95d

16 files changed

Lines changed: 695 additions & 0 deletions
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [AutoSwap])
4+
class AutoSwapDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$AutoSwapDaoMixin {
6+
AutoSwapDao(super.attachedDatabase);
7+
8+
Future<void> store(AutoSwapRow row) {
9+
return into(autoSwap).insertOnConflictUpdate(row.toCompanion(true));
10+
}
11+
12+
Future<AutoSwapRow> fetchById(int id) {
13+
return (select(autoSwap)..where((tbl) => tbl.id.equals(id))).getSingle();
14+
}
15+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [Bip85Derivations])
4+
class Bip85DerivationsDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$Bip85DerivationsDaoMixin {
6+
Bip85DerivationsDao(super.attachedDatabase);
7+
8+
Future<void> store(Bip85DerivationRow row) {
9+
return into(bip85Derivations).insert(row.toCompanion(true));
10+
}
11+
12+
Future<Bip85DerivationRow?> fetchByPath(String path) {
13+
return attachedDatabase.managers.bip85Derivations
14+
.filter((b) => b.path(path))
15+
.getSingleOrNull();
16+
}
17+
18+
Future<List<Bip85DerivationRow>> fetchByApplication(
19+
Bip85ApplicationColumn application,
20+
) {
21+
return attachedDatabase.managers.bip85Derivations
22+
.filter((b) => b.application(application))
23+
.get();
24+
}
25+
26+
Future<List<Bip85DerivationRow>> fetchAll() {
27+
return attachedDatabase.managers.bip85Derivations.get();
28+
}
29+
30+
Future<void> patchStatusByPath({
31+
required String path,
32+
required Bip85StatusColumn status,
33+
}) {
34+
return attachedDatabase.managers.bip85Derivations
35+
.filter((b) => b.path(path))
36+
.update((b) => b(status: Value(status)));
37+
}
38+
39+
Future<void> patchAliasByPath({required String path, required String alias}) {
40+
return attachedDatabase.managers.bip85Derivations
41+
.filter((b) => b.path(path))
42+
.update((b) => b(alias: Value(alias)));
43+
}
44+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [ElectrumServers])
4+
class ElectrumServersDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$ElectrumServersDaoMixin {
6+
ElectrumServersDao(super.attachedDatabase);
7+
8+
Future<void> store(ElectrumServerRow row) {
9+
return into(electrumServers).insertOnConflictUpdate(row.toCompanion(true));
10+
}
11+
12+
Future<void> storeBatch(List<ElectrumServerRow> rows) {
13+
return batch((batch) {
14+
for (final row in rows) {
15+
batch.insert(
16+
electrumServers,
17+
row.toCompanion(true),
18+
mode: InsertMode.insertOrReplace,
19+
);
20+
}
21+
});
22+
}
23+
24+
Future<ElectrumServerRow?> fetchByUrl(String url) {
25+
return attachedDatabase.managers.electrumServers
26+
.filter((f) => f.url.equals(url))
27+
.getSingleOrNull();
28+
}
29+
30+
Future<List<ElectrumServerRow>> fetchAll({
31+
bool? isTestnet,
32+
bool? isLiquid,
33+
bool? isCustom,
34+
}) {
35+
var query = attachedDatabase.managers.electrumServers.filter(
36+
(f) => const Constant(true),
37+
);
38+
39+
if (isLiquid != null) {
40+
query = query.filter((f) => f.isLiquid(isLiquid));
41+
}
42+
if (isTestnet != null) {
43+
query = query.filter((f) => f.isTestnet(isTestnet));
44+
}
45+
if (isCustom != null) {
46+
query = query.filter((f) => f.isCustom(isCustom));
47+
}
48+
49+
return query.get();
50+
}
51+
52+
Future<List<ElectrumServerRow>> fetchByNetwork({
53+
required bool isLiquid,
54+
required bool isTestnet,
55+
required bool isCustom,
56+
}) {
57+
return attachedDatabase.managers.electrumServers
58+
.filter(
59+
(f) =>
60+
f.isLiquid(isLiquid) &
61+
f.isTestnet(isTestnet) &
62+
f.isCustom(isCustom),
63+
)
64+
.get();
65+
}
66+
67+
Future<int> trashByUrl(String url) {
68+
return attachedDatabase.managers.electrumServers
69+
.filter((f) => f.url.equals(url))
70+
.delete();
71+
}
72+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [ElectrumSettings])
4+
class ElectrumSettingsDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$ElectrumSettingsDaoMixin {
6+
ElectrumSettingsDao(super.attachedDatabase);
7+
8+
Future<void> store(ElectrumSettingsRow row) {
9+
return into(electrumSettings).insertOnConflictUpdate(row.toCompanion(true));
10+
}
11+
12+
Future<List<ElectrumSettingsRow>> fetchAll() {
13+
return attachedDatabase.managers.electrumSettings.get();
14+
}
15+
16+
Future<List<ElectrumSettingsRow>> fetchByNetworks(
17+
List<ElectrumServerNetwork> networks,
18+
) {
19+
return attachedDatabase.managers.electrumSettings
20+
.filter((f) => f.network.isIn(networks))
21+
.get();
22+
}
23+
24+
Future<ElectrumSettingsRow> fetchByNetwork(ElectrumServerNetwork network) {
25+
return attachedDatabase.managers.electrumSettings
26+
.filter((f) => f.network(network))
27+
.getSingle();
28+
}
29+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [Labels])
4+
class LabelsDao extends DatabaseAccessor<SqliteDatabase> with _$LabelsDaoMixin {
5+
LabelsDao(super.attachedDatabase);
6+
7+
Future<void> store(LabelRow row) {
8+
return into(labels).insert(row.toCompanion(true));
9+
}
10+
11+
Future<void> storeBatch(List<LabelRow> rows) {
12+
return batch(
13+
(batch) => batch.insertAll(
14+
labels,
15+
rows.map((r) => r.toCompanion(true)).toList(),
16+
mode: InsertMode.insertOrReplace,
17+
),
18+
);
19+
}
20+
21+
Future<List<LabelRow>> fetchByLabel(String label) {
22+
return attachedDatabase.managers.labels.filter((l) => l.label(label)).get();
23+
}
24+
25+
Future<List<LabelRow>> fetchByRef(String ref) {
26+
return attachedDatabase.managers.labels.filter((l) => l.ref(ref)).get();
27+
}
28+
29+
Future<List<LabelRow>> fetchAll() {
30+
return attachedDatabase.managers.labels.get();
31+
}
32+
33+
Future<List<String>> fetchDistinctLabels() async {
34+
final rows = await (selectOnly(
35+
labels,
36+
distinct: true,
37+
)..addColumns([labels.label])).get();
38+
return rows.map((row) => row.read<String>(labels.label)!).toList();
39+
}
40+
41+
Future<void> trashByLabel(String label) {
42+
return attachedDatabase.managers.labels
43+
.filter((l) => l.label(label))
44+
.delete();
45+
}
46+
47+
Future<void> trashByRef(String ref) {
48+
return attachedDatabase.managers.labels.filter((l) => l.ref(ref)).delete();
49+
}
50+
51+
Future<void> trashByLabelAndRef({
52+
required String label,
53+
required String ref,
54+
}) {
55+
return attachedDatabase.managers.labels
56+
.filter((l) => l.ref(ref) & l.label(label))
57+
.delete();
58+
}
59+
60+
Future<void> trashAll() {
61+
return delete(labels).go();
62+
}
63+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [MempoolServers])
4+
class MempoolServersDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$MempoolServersDaoMixin {
6+
MempoolServersDao(super.attachedDatabase);
7+
8+
Future<void> store(MempoolServerRow row) {
9+
return into(mempoolServers).insertOnConflictUpdate(row.toCompanion(true));
10+
}
11+
12+
Future<MempoolServerRow?> fetchByNetwork({
13+
required bool isLiquid,
14+
required bool isTestnet,
15+
required bool isCustom,
16+
}) {
17+
return attachedDatabase.managers.mempoolServers
18+
.filter((f) => f.isLiquid(isLiquid))
19+
.filter((f) => f.isTestnet(isTestnet))
20+
.filter((f) => f.isCustom(isCustom))
21+
.getSingleOrNull();
22+
}
23+
24+
Future<int> trashCustomByNetwork({
25+
required bool isLiquid,
26+
required bool isTestnet,
27+
}) {
28+
return attachedDatabase.managers.mempoolServers
29+
.filter((f) => f.isLiquid(isLiquid))
30+
.filter((f) => f.isTestnet(isTestnet))
31+
.filter((f) => f.isCustom(true))
32+
.delete();
33+
}
34+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [MempoolSettings])
4+
class MempoolSettingsDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$MempoolSettingsDaoMixin {
6+
MempoolSettingsDao(super.attachedDatabase);
7+
8+
Future<void> store(MempoolSettingsRow row) {
9+
return into(mempoolSettings).insertOnConflictUpdate(row.toCompanion(true));
10+
}
11+
12+
Future<MempoolSettingsRow?> fetchByNetwork(String network) {
13+
return attachedDatabase.managers.mempoolSettings
14+
.filter((f) => f.network.equals(network))
15+
.getSingleOrNull();
16+
}
17+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [PayjoinReceivers])
4+
class PayjoinReceiversDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$PayjoinReceiversDaoMixin {
6+
PayjoinReceiversDao(super.attachedDatabase);
7+
8+
Future<void> store(PayjoinReceiverRow row) {
9+
return into(payjoinReceivers).insertOnConflictUpdate(row.toCompanion(true));
10+
}
11+
12+
Future<PayjoinReceiverRow?> fetchById(String id) {
13+
return attachedDatabase.managers.payjoinReceivers
14+
.filter((f) => f.id(id))
15+
.getSingleOrNull();
16+
}
17+
18+
Future<List<PayjoinReceiverRow>> fetchAll({
19+
String? walletId,
20+
bool? isTestnet,
21+
bool? onlyUnfinished,
22+
}) {
23+
return attachedDatabase.managers.payjoinReceivers.filter((row) {
24+
Expression<bool> expr = const Constant(true);
25+
26+
if (onlyUnfinished == true) {
27+
expr =
28+
expr & row.isExpired.equals(false) & row.isCompleted.equals(false);
29+
}
30+
31+
if (walletId != null) {
32+
expr = expr & row.walletId.equals(walletId);
33+
}
34+
35+
if (isTestnet != null) {
36+
expr = expr & row.isTestnet.equals(isTestnet);
37+
}
38+
39+
return expr;
40+
}).get();
41+
}
42+
43+
Future<List<PayjoinReceiverRow>> fetchByTxId(String txId) {
44+
return attachedDatabase.managers.payjoinReceivers
45+
.filter((f) => f.txId(txId))
46+
.get();
47+
}
48+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
part of '../sqlite_database.dart';
2+
3+
@DriftAccessor(tables: [PayjoinSenders])
4+
class PayjoinSendersDao extends DatabaseAccessor<SqliteDatabase>
5+
with _$PayjoinSendersDaoMixin {
6+
PayjoinSendersDao(super.attachedDatabase);
7+
8+
Future<void> store(PayjoinSenderRow row) {
9+
return into(payjoinSenders).insertOnConflictUpdate(row.toCompanion(true));
10+
}
11+
12+
Future<PayjoinSenderRow?> fetchByUri(String uri) {
13+
return attachedDatabase.managers.payjoinSenders
14+
.filter((f) => f.uri(uri))
15+
.getSingleOrNull();
16+
}
17+
18+
Future<List<PayjoinSenderRow>> fetchAll({
19+
String? walletId,
20+
bool? isTestnet,
21+
bool? onlyUnfinished,
22+
}) {
23+
return attachedDatabase.managers.payjoinSenders.filter((row) {
24+
Expression<bool> expr = const Constant(true);
25+
26+
if (onlyUnfinished == true) {
27+
expr =
28+
expr & row.isExpired.equals(false) & row.isCompleted.equals(false);
29+
}
30+
31+
if (walletId != null) {
32+
expr = expr & row.walletId.equals(walletId);
33+
}
34+
35+
if (isTestnet != null) {
36+
expr = expr & row.isTestnet.equals(isTestnet);
37+
}
38+
39+
return expr;
40+
}).get();
41+
}
42+
43+
Future<List<PayjoinSenderRow>> fetchByTxId(String txId) {
44+
return attachedDatabase.managers.payjoinSenders
45+
.filter((f) => f.txId(txId))
46+
.get();
47+
}
48+
}

0 commit comments

Comments
 (0)