Fix findByRecipient

This commit is contained in:
franzap
2025-01-02 16:11:44 -03:00
parent 14a54936fc
commit 5533b38ad1
3 changed files with 21 additions and 13 deletions
+11 -1
View File
@@ -6,7 +6,7 @@ import 'package:zapstore/utils/extensions.dart';
part 'zap_receipt.g.dart';
@DataAdapter([NostrAdapter])
@DataAdapter([NostrAdapter, ZapReceiptAdapter])
class ZapReceipt extends base.ZapReceipt with DataModelMixin<ZapReceipt> {
final BelongsTo<User> recipient;
final BelongsTo<User> signer;
@@ -32,4 +32,14 @@ mixin ZapReceiptAdapter on Adapter<ZapReceipt> {
}
return super.deserialize(data);
}
List<ZapReceipt> findByRecipient(
{required String pubkey, required String eventId}) {
// NOTE: This query is technically incorrect using IN, but the probability of clashing p/e IDs is extremely low
// This will be fixed with the new purplebase
final result = db.select(
"SELECT z.key, data from zapReceipts z, json_each(json_extract(data, '\$.tags')) WHERE json_extract(value, '\$[0]') in ('p', 'e') and json_extract(value, '\$[1]') in (?, ?)",
[pubkey, eventId]);
return deserializeFromResult(result);
}
}
+2 -1
View File
@@ -44,13 +44,14 @@ mixin _$ZapReceiptAdapter on Adapter<ZapReceipt> {
final _zapReceiptsFinders = <String, dynamic>{};
class $ZapReceiptAdapter = Adapter<ZapReceipt>
with _$ZapReceiptAdapter, NostrAdapter<ZapReceipt>;
with _$ZapReceiptAdapter, NostrAdapter<ZapReceipt>, ZapReceiptAdapter;
final zapReceiptsAdapterProvider = Provider<Adapter<ZapReceipt>>(
(ref) => $ZapReceiptAdapter(ref, InternalHolder(_zapReceiptsFinders)));
extension ZapReceiptAdapterX on Adapter<ZapReceipt> {
NostrAdapter<ZapReceipt> get nostrAdapter => this as NostrAdapter<ZapReceipt>;
ZapReceiptAdapter get zapReceiptAdapter => this as ZapReceiptAdapter;
}
extension ZapReceiptRelationshipGraphNodeX
+8 -11
View File
@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:flutter_data/flutter_data.dart';
import 'package:ndk/domain_layer/entities/nip_01_event.dart';
import 'package:purplebase/purplebase.dart' hide FileMetadata;
import 'package:zapstore/main.data.dart';
import 'package:flutter/material.dart';
@@ -9,6 +9,7 @@ import 'package:gap/gap.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:zapstore/models/file_metadata.dart';
import 'package:zapstore/models/user.dart';
import 'package:zapstore/models/zap_receipt.dart';
import 'package:zapstore/widgets/rounded_image.dart';
class ZapReceipts extends HookConsumerWidget {
@@ -74,12 +75,10 @@ class ZapReceiptsNotifier extends StateNotifier<AsyncValue<Set<ZapReceipt>>> {
StreamSubscription<Nip01Event>? sub;
ZapReceiptsNotifier(this.ref, this.fileMetadata)
: super(AsyncData(ref.zapReceipts
// TODO: Perform an actual query
.findAllLocal()
.where((r) =>
r.recipient.id == fileMetadata.author.id &&
r.eventId == fileMetadata.id)
: super(AsyncData(ref.zapReceipts.zapReceiptAdapter
.findByRecipient(
pubkey: fileMetadata.author.id!.toString(),
eventId: fileMetadata.id!.toString())
.toSet())) {
final adapter = ref.users.nostrAdapter;
@@ -91,10 +90,8 @@ class ZapReceiptsNotifier extends StateNotifier<AsyncValue<Set<ZapReceipt>>> {
pubKey: recipient, eventId: fileMetadata.event.id);
sub = receiptsResponse.stream.listen((data) {
state = AsyncData({
if (state.hasValue) ...state.value!,
Event.getConstructor<ZapReceipt>()!.call(data.toJson())
});
final model = ZapReceipt.fromJson(data.toJson()).init().saveLocal();
state = AsyncData({if (state.hasValue) ...state.value!, model});
});
}