mirror of
https://github.com/zapstore/zapstore.git
synced 2026-10-05 20:48:24 +00:00
Fix findByRecipient
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user