From 22e0151be4a7d1138b0af001b0af33421f3593a6 Mon Sep 17 00:00:00 2001
From: fsociety
Date: Tue, 22 Oct 2024 17:11:32 +0200
Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20feat(migration):=20add=20zap=20e?=
=?UTF-8?q?ndpoint=20field=20to=20payment=20events=20table=20=F0=9F=8E=A8?=
=?UTF-8?q?=20refactor(profile):=20update=20payment=20logic=20and=20button?=
=?UTF-8?q?=20display=20=F0=9F=94=A7=20fix(nostrZap):=20change=20relay=20U?=
=?UTF-8?q?RL=20to=20secure=20WebSocket=20protocol?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
...endpoint_field_to_payment_events_table.php | 27 +++++
resources/js/nostrZap.js | 4 +-
.../views/pages/association/profile.blade.php | 103 ++++++------------
3 files changed, 61 insertions(+), 73 deletions(-)
create mode 100644 database/migrations/2024_10_22_143729_add_zap_endpoint_field_to_payment_events_table.php
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