[]]); state(['events' => []]); state(['payments' => []]); state(['invoice' => null]); state(['qrCode' => null]); state(['amountToPay' => 1]); state(['currentYearIsPaid' => false]); state(['currentPubkey' => null]); state(['currentPleb' => null]); form(\App\Livewire\Forms\ApplicationForm::class); updated([ 'invoice' => function () { $this->qrCode = base64_encode( QrCode::format('png') ->size(300) ->merge('/public/android-chrome-192x192.png', .3) ->errorCorrection('H') ->generate($this->invoice), ); }, ]); on([ 'nostrLoggedIn' => function ($pubkey) { $this->currentPubkey = $pubkey; $this->currentPleb = \App\Models\EinundzwanzigPleb::query() ->with([ 'paymentEvents' => fn($query) => $query->where('year', date('Y')), ]) ->where('pubkey', $pubkey)->first(); if ($this->currentPleb->association_status === \App\Enums\AssociationStatus::ACTIVE) { $this->amountToPay = 21; } if ($this->currentPleb->paymentEvents->count() < 1) { $this->createPaymentEvent(); $this->currentPleb->load('paymentEvents'); } $this->loadEvents(); $this->searchPaymentEvent(); }, ]); $listenForPayment = function () { if (!$this->currentYearIsPaid) { $this->searchPaymentEvent(); } }; $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]); } } }; $save = function ($type) { $this->form->validate(); $this->currentPleb ->update([ 'application_for' => $type, 'application_text' => $this->form->reason, ]); }; $createKind0 = function () { $note = new NostrEvent(); $note->setKind(0); $note->setContent(''); $note->setTags([ ['display_name', 'Einundzwanzig Portal'], ['lud16', 'portaleinundzwanzig@getalby.com'], ['pubkey', 'daf83d92768b5d0005373f83e30d4203c0b747c170449e02fea611a0da125ee6'], ]); $signer = new Sign(); $signer->signEvent($note, config('services.nostr')); $eventMessage = new EventMessage($note); $relayUrl = config('services.relay'); $relay = new Relay($relayUrl); $relay->setMessage($eventMessage); $result = $relay->send(); }; $createPaymentEvent = function () { $note = new NostrEvent(); $note->setKind(32121); $note->setContent( 'Dieses Event dient der Zahlung des Mitgliedsbeitrags für das Jahr ' . date( 'Y', ) . '. Bitte zappe den Betrag von 1 Satoshi.', ); $note->setTags([ ['d', $this->currentPleb->pubkey . ',' . date('Y')], ['zap', 'daf83d92768b5d0005373f83e30d4203c0b747c170449e02fea611a0da125ee6', config('services.relay'), '1'], ]); $signer = new Sign(); $signer->signEvent($note, config('services.nostr')); $eventMessage = new EventMessage($note); $relayUrl = config('services.relay'); $relay = new Relay($relayUrl); $relay->setMessage($eventMessage); $result = $relay->send(); $this->currentPleb->paymentEvents()->create([ 'year' => date('Y'), 'event_id' => $result->eventId, 'amount' => $this->amountToPay, ]); }; $loadEvents = function () { $subscription = new Subscription(); $subscriptionId = $subscription->setId(); $filter1 = new Filter(); $filter1->setKinds([32121]); $filter1->setAuthors(['daf83d92768b5d0005373f83e30d4203c0b747c170449e02fea611a0da125ee6']); $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(); $this->events = 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, ]) ->unique('id') ->toArray(); }; ?> @volt

Einundzwanzig ist, was du draus machst

Meine Mitgliedschaft
{{--
Experience
--}}

Aktueller Status

@if($currentPubkey)
Profil in der Datenbank vorhanden. Bewerbung kann erfolgen.
@endif
@if($currentPubkey && !$currentPleb->application_for && $currentPleb->association_status->value < 2)

passives Mitglied werden

@endif
@if($currentPubkey && !$currentPleb->application_for && $currentPleb->association_status->value < 2)

aktives Mitglied werden

@endif
@if($currentPubkey && $currentPleb->application_for)
Du hast dich erfolgreich mit folgendem Grund beworben:
{{ $currentPleb->application_text }}
@endif
@if($currentPleb && $currentPleb->association_status->value > 1)
Dein aktueller Status: {{ $currentPleb->association_status->label() }}
@endif
@if($currentPleb && $currentPleb->association_status->value > 1)

Nostr Event für die Zahlung des Mitgliedsbeitrags: {{ $currentPleb->paymentEvents->first()->event_id }}

@if(isset($events[0]))

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

@if(!$invoice && !$currentYearIsPaid)
@else @if(!$currentYearIsPaid && $qrCode) @else @if($currentYearIsPaid)
@endif @endif @endif
@endif

bisherige Zahlungen

@foreach($payments as $payment) @endforeach
Sats: {{ collect(json_decode(collect($payment['tags'])->firstWhere('0', 'description')[1], true, 512, JSON_THROW_ON_ERROR)['tags'])->firstWhere('0', 'amount')[1] / 1000 }}
Jahr:{{ $payment['content'] }}
{{ $payment['id'] }}
@endif
@endvolt