voting system with nostr added

This commit is contained in:
fsociety
2024-09-29 01:02:04 +02:00
parent a0ef037b2d
commit 354680f702
43 changed files with 3017 additions and 20688 deletions

View File

@@ -5,7 +5,6 @@ namespace App\Console\Commands\Nostr;
use App\Models\EinundzwanzigPleb;
use App\Traits\NostrFetcherTrait;
use Illuminate\Console\Command;
use swentel\nostr\Subscription\Subscription;
class SyncProfiles extends Command
{

View File

@@ -0,0 +1,50 @@
<?php
namespace App\Enums;
use ArchTech\Enums\From;
use ArchTech\Enums\InvokableCases;
use ArchTech\Enums\Meta\Meta;
use ArchTech\Enums\Metadata;
use ArchTech\Enums\Names;
use ArchTech\Enums\Options;
use ArchTech\Enums\Values;
#[Meta(Label::class, Color::class)]
enum AssociationStatus: int
{
use InvokableCases;
use Names;
use Values;
use Options;
use Metadata;
use From;
#[Label('kein Mitglied')] #[Color('cyan')]
case DEFAULT = 1;
#[Label('Passiv')] #[Color('orange')]
case PASSIVE = 2;
#[Label('Aktiv')] #[Color('purple')]
case ACTIVE = 3;
#[Label('Ehrenmitglied')] #[Color('negative')]
case HONORARY = 4;
public static function selectOptions()
{
return collect(self::options())
->map(
fn(
$option,
$name
) => [
'value' => $option,
'label' => __(
self::fromName($name)
->label()
),
]
)
->values()
->toArray();
}
}

11
app/Enums/Color.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Enums;
use ArchTech\Enums\Meta\MetaProperty;
use Attribute;
#[Attribute]
class Color extends MetaProperty
{
}

11
app/Enums/Label.php Normal file
View File

@@ -0,0 +1,11 @@
<?php
namespace App\Enums;
use ArchTech\Enums\Meta\MetaProperty;
use Attribute;
#[Attribute]
class Label extends MetaProperty
{
}

View File

@@ -0,0 +1,24 @@
<?php
namespace App\Http\Controllers\Api\Nostr;
use App\Http\Controllers\Controller;
use App\Models\Profile;
use App\Traits\NostrFetcherTrait;
use Illuminate\Http\Request;
class GetProfile extends Controller
{
use NostrFetcherTrait;
public function __invoke($key, Request $request)
{
if (!Profile::query()->where('pubkey', $key)->exists()) {
$this->fetchProfile([$key]);
}
return Profile::query()
->where('pubkey', $key)
->first();
}
}

View File

@@ -2,6 +2,7 @@
namespace App\Models;
use App\Enums\AssociationStatus;
use Illuminate\Database\Eloquent\Model;
class EinundzwanzigPleb extends Model
@@ -9,6 +10,13 @@ class EinundzwanzigPleb extends Model
protected $guarded = [];
protected function casts(): array
{
return [
'association_status' => AssociationStatus::class,
];
}
public function profile()
{
return $this->hasOne(Profile::class, 'pubkey', 'pubkey');

10
app/Models/Election.php Normal file
View File

@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Election extends Model
{
protected $guarded = [];
}

View File

@@ -17,6 +17,14 @@ trait NostrFetcherTrait
{
$hex = collect([]);
foreach ($npubs as $item) {
// check if $item is already a hex string
if (preg_match('/^[0-9a-fA-F]+$/', $item)) {
$hex->push([
'hex' => $item,
'npub' => (new Key)->convertPublicKeyToBech32($item),
]);
continue;
}
$hex->push([
'hex' => (new Key)->convertToHex($item),
'npub' => $item,