diff --git a/database/migrations/2024_10_22_143729_add_zap_endpoint_field_to_payment_events_table.php b/database/migrations/2024_10_22_143729_add_zap_endpoint_field_to_payment_events_table.php new file mode 100644 index 0000000..77d94d8 --- /dev/null +++ b/database/migrations/2024_10_22_143729_add_zap_endpoint_field_to_payment_events_table.php @@ -0,0 +1,27 @@ +string('zap_endpoint')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('payment_events', function (Blueprint $table) { + // + }); + } +}; diff --git a/resources/js/nostrZap.js b/resources/js/nostrZap.js index 09b3e2d..9eb401d 100644 --- a/resources/js/nostrZap.js +++ b/resources/js/nostrZap.js @@ -16,7 +16,7 @@ export default (livewireComponent) => ({ relayUrl: 'wss://simple-test-relay.steuernsindraub21.xyz', }, local: { - relayUrl: 'ws://simple-test-relay.steuernsindraub21.xyz', + relayUrl: 'wss://simple-test-relay.steuernsindraub21.xyz', }, }; const relayUrl = config[env]?.relayUrl || config['local'].relayUrl; @@ -41,6 +41,8 @@ export default (livewireComponent) => ({ const callbackData = await callbackResponse.json(); const zapEndpoint = callbackData.callback; + livewireComponent.call('updateZapEndpoint', zapEndpoint); + const zapEvent = nip57.makeZapRequest({ profile: sender, event: event.id, diff --git a/resources/views/pages/association/profile.blade.php b/resources/views/pages/association/profile.blade.php index 8a5549f..9a4e128 100644 --- a/resources/views/pages/association/profile.blade.php +++ b/resources/views/pages/association/profile.blade.php @@ -79,79 +79,38 @@ on([ $this->currentPleb->load('paymentEvents'); } $this->loadEvents(); - $this->searchPaymentEvent(); + $this->listenForPayment(); }, ]); $listenForPayment = function () { - if (!$this->currentYearIsPaid) { - $this->searchPaymentEvent(); + $paymentEvent = $this->currentPleb + ->paymentEvents() + ->where('year', date('Y')) + ->first(); + if ($paymentEvent && !$paymentEvent->paid && $paymentEvent->zap_endpoint && !$this->currentYearIsPaid) { + $response = Http::get($paymentEvent->zap_endpoint); + + if (!isset($response->json()['tag'])) { + $paymentEvent->update(['paid' => true]); + $this->currentYearIsPaid = true; + } + } + + if ($paymentEvent && $paymentEvent->paid && !$this->currentYearIsPaid) { + $this->payments = $paymentEvent = $this->currentPleb + ->paymentEvents() + ->get(); + $this->currentYearIsPaid = true; } }; -$searchPaymentEvent = function () { - $subscription = new Subscription(); - $subscriptionId = $subscription->setId(); - - $filter1 = new Filter(); - $filter1->setKinds([9735]); - $filters = [$filter1]; - - $requestMessage = new RequestMessage($subscriptionId, $filters); - - $relays = [ - new Relay(config('services.relay')), - ]; - $relaySet = new RelaySet(); - $relaySet->setRelays($relays); - - $request = new Request($relaySet, $requestMessage); - $response = $request->send(); - - if (count($response[config('services.relay')]) > 0) { - $this->payments = collect($response[config('services.relay')]) - ->map(fn($event) - => [ - 'id' => $event->event->id, - 'kind' => $event->event->kind, - 'content' => $event->event->content, - 'pubkey' => $event->event->pubkey, - 'tags' => $event->event->tags, - 'created_at' => $event->event->created_at, - ]) - ->filter(fn($payment) - => collect($payment['tags'])->firstWhere('0', 'p')[1] === $this->currentPubkey - && json_decode( - collect($payment['tags'])->firstWhere('0', 'description')[1], - true, - 512, - JSON_THROW_ON_ERROR, - )['content'] == date('Y')) - ->values() - ->toArray(); - - $this->yearsPaid = collect($this->payments)->map(fn($payment) - => [ - 'year' => $payment['content'], - 'amount' => collect( - json_decode( - collect($payment['tags'])->firstWhere('0', 'description')[1], - true, - 512, - JSON_THROW_ON_ERROR, - )['tags'], - )->firstWhere('0', 'amount')[1] / 1000, - ]); - - $this->currentYearIsPaid = collect($this->yearsPaid)->contains( - fn($yearPaid) => $yearPaid['year'] == date('Y') && $yearPaid['amount'] == $this->amountToPay, - ); - - if ($this->currentYearIsPaid) { - $this->qrCode = null; - $this->currentPleb->paymentEvents->first()->update(['paid' => true]); - } - } +$updateZapEndpoint = function ($zapEndpoint) { + $this->currentPleb + ->paymentEvents() + ->where('year', date('Y')) + ->first() + ->update(['zap_endpoint' => $zapEndpoint]); }; $save = function ($type) { @@ -466,17 +425,17 @@ $loadEvents = function () { class="break-all">{{ $currentPleb->paymentEvents->first()->event_id }}

- @if(false && isset($events[0])) + @if(isset($events[0]))

{{ $events[0]['content'] }}

@if(!$invoice && !$currentYearIsPaid)
@else @@ -545,18 +504,18 @@ $loadEvents = function () {
Sats: - {{ collect(json_decode(collect($payment['tags'])->firstWhere('0', 'description')[1], true, 512, JSON_THROW_ON_ERROR)['tags'])->firstWhere('0', 'amount')[1] / 1000 }} + {{ $payment->amount }}
Jahr:{{ $payment['content'] }} + class="sm:hidden">Jahr:{{ $payment->year }}
{{ $payment['id'] }}
+ class="text-left font-medium break-all">{{ $payment->event_id }}
@endforeach