From 34e065a06ed61c913d716522e3e2b0c251411125 Mon Sep 17 00:00:00 2001 From: HolgerHatGarKeineNode Date: Mon, 7 Aug 2023 15:43:13 +0200 Subject: [PATCH] add visible_on_map field to meetups table --- app/Http/Livewire/Meetup/MeetupEventTable.php | 55 +++--- app/Http/Livewire/Meetup/MeetupTable.php | 27 +-- app/Http/Livewire/Meetup/WorldMap.php | 21 +- ..._visible_on_map_field_to_meetups_table.php | 27 +++ routes/api.php | 181 +++++++++--------- yarn.lock | 6 +- 6 files changed, 174 insertions(+), 143 deletions(-) create mode 100644 database/migrations/2023_08_07_134026_add_visible_on_map_field_to_meetups_table.php diff --git a/app/Http/Livewire/Meetup/MeetupEventTable.php b/app/Http/Livewire/Meetup/MeetupEventTable.php index b0ee3b24..44ec248a 100644 --- a/app/Http/Livewire/Meetup/MeetupEventTable.php +++ b/app/Http/Livewire/Meetup/MeetupEventTable.php @@ -22,7 +22,7 @@ class MeetupEventTable extends Component public function mount() { - if (! $this->year) { + if (!$this->year) { $this->year = now()->year; } } @@ -31,33 +31,34 @@ class MeetupEventTable extends Component { return view('livewire.meetup.meetup-event-table', [ 'markers' => MeetupEvent::query() - ->with([ - 'meetup.city.country', - ]) - ->where('meetup_events.start', '>=', now()->subDay()) - ->whereHas('meetup.city.country', - fn ($query) => $query->where('countries.code', $this->country->code)) - ->get() - ->map(fn ($event) => [ - 'id' => $event->id, - 'name' => $event->meetup->name.': '.$event->location, - 'coords' => [$event->meetup->city->latitude, $event->meetup->city->longitude], - ]), + ->where('visible_on_map', true) + ->with([ + 'meetup.city.country', + ]) + ->where('meetup_events.start', '>=', now()->subDay()) + ->whereHas('meetup.city.country', + fn($query) => $query->where('countries.code', $this->country->code)) + ->get() + ->map(fn($event) => [ + 'id' => $event->id, + 'name' => $event->meetup->name . ': ' . $event->location, + 'coords' => [$event->meetup->city->latitude, $event->meetup->city->longitude], + ]), 'events' => MeetupEvent::query() - ->with([ - 'meetup.city.country', - ]) - ->where('meetup_events.start', '>=', now()->subDay()) - ->whereHas('meetup.city.country', - fn ($query) => $query->where('countries.code', $this->country->code)) - ->get() - ->map(fn ($event) => [ - 'id' => $event->id, - 'startDate' => $event->start, - 'endDate' => $event->start->addHours(1), - 'location' => $event->location, - 'description' => $event->description, - ]), + ->with([ + 'meetup.city.country', + ]) + ->where('meetup_events.start', '>=', now()->subDay()) + ->whereHas('meetup.city.country', + fn($query) => $query->where('countries.code', $this->country->code)) + ->get() + ->map(fn($event) => [ + 'id' => $event->id, + 'startDate' => $event->start, + 'endDate' => $event->start->addHours(1), + 'location' => $event->location, + 'description' => $event->description, + ]), ])->layout('layouts.app', [ 'SEOData' => new SEOData( title: __('Meetup dates'), diff --git a/app/Http/Livewire/Meetup/MeetupTable.php b/app/Http/Livewire/Meetup/MeetupTable.php index 127aad21..bc6e8c1c 100644 --- a/app/Http/Livewire/Meetup/MeetupTable.php +++ b/app/Http/Livewire/Meetup/MeetupTable.php @@ -17,11 +17,11 @@ class MeetupTable extends Component public function filterByMarker($id) { $meetup = Meetup::with(['city.country']) - ->find($id); + ->find($id); return to_route('meetup.landing', [ 'country' => $meetup->city->country->code, - 'meetup' => $meetup, + 'meetup' => $meetup, ]); } @@ -31,17 +31,18 @@ class MeetupTable extends Component return view('livewire.meetup.meetup-table', [ 'markers' => Meetup::query() - ->with([ - 'city.country', - ]) - ->whereHas('city.country', - fn($query) => $query->where('countries.code', $this->country->code)) - ->get() - ->map(fn($meetup) => [ - 'id' => $meetup->id, - 'name' => $meetup->name, - 'coords' => [$meetup->city->latitude, $meetup->city->longitude], - ]), + ->where('visible_on_map', true) + ->with([ + 'city.country', + ]) + ->whereHas('city.country', + fn($query) => $query->where('countries.code', $this->country->code)) + ->get() + ->map(fn($meetup) => [ + 'id' => $meetup->id, + 'name' => $meetup->name, + 'coords' => [$meetup->city->latitude, $meetup->city->longitude], + ]), ])->layout('layouts.app', [ 'SEOData' => new SEOData( title: __('Meetups'), diff --git a/app/Http/Livewire/Meetup/WorldMap.php b/app/Http/Livewire/Meetup/WorldMap.php index 2607b3ef..73637e53 100644 --- a/app/Http/Livewire/Meetup/WorldMap.php +++ b/app/Http/Livewire/Meetup/WorldMap.php @@ -14,7 +14,7 @@ class WorldMap extends Component public function filterByMarker($id) { $meetup = Meetup::with(['city.country']) - ->find($id); + ->find($id); return to_route('meetup.landing', [ 'country' => $meetup->city->country->code, @@ -26,15 +26,16 @@ class WorldMap extends Component { return view('livewire.meetup.world-map', [ 'allMarkers' => Meetup::query() - ->with([ - 'city.country', - ]) - ->get() - ->map(fn ($meetup) => [ - 'id' => $meetup->id, - 'name' => $meetup->name, - 'coords' => [$meetup->city->latitude, $meetup->city->longitude], - ]), + ->where('visible_on_map', true) + ->with([ + 'city.country', + ]) + ->get() + ->map(fn($meetup) => [ + 'id' => $meetup->id, + 'name' => $meetup->name, + 'coords' => [$meetup->city->latitude, $meetup->city->longitude], + ]), ])->layout('layouts.app', [ 'SEOData' => new SEOData( title: __('World map of meetups'), diff --git a/database/migrations/2023_08_07_134026_add_visible_on_map_field_to_meetups_table.php b/database/migrations/2023_08_07_134026_add_visible_on_map_field_to_meetups_table.php new file mode 100644 index 00000000..04858569 --- /dev/null +++ b/database/migrations/2023_08_07_134026_add_visible_on_map_field_to_meetups_table.php @@ -0,0 +1,27 @@ +boolean('visible_on_map')->default(true); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('meetups', function (Blueprint $table) { + // + }); + } +}; diff --git a/routes/api.php b/routes/api.php index 19d03ba2..c4a62161 100644 --- a/routes/api.php +++ b/routes/api.php @@ -19,123 +19,124 @@ use Illuminate\Support\Facades\Route; */ Route::middleware('auth:sanctum') - ->get('/user', function (Request $request) { - return $request->user(); - }); + ->get('/user', function (Request $request) { + return $request->user(); + }); Route::middleware([]) - ->as('api.') - ->group(function () { - Route::resource('countries', \App\Http\Controllers\Api\CountryController::class); - Route::resource('meetup', \App\Http\Controllers\Api\MeetupController::class); - Route::resource('lecturers', \App\Http\Controllers\Api\LecturerController::class); - Route::resource('courses', \App\Http\Controllers\Api\CourseController::class); - Route::resource('cities', \App\Http\Controllers\Api\CityController::class); - Route::resource('venues', \App\Http\Controllers\Api\VenueController::class); - Route::resource('languages', \App\Http\Controllers\Api\LanguageController::class); - Route::get('meetups', function () { - return \App\Models\Meetup::query() - ->with([ - 'city', - ]) - ->get() - ->map(fn($meetup) => [ - 'name' => $meetup->name, - 'url' => $meetup->telegram_link ?? $meetup->webpage, - 'top' => $meetup->github_data['top'] ?? null, - 'left' => $meetup->github_data['left'] ?? null, - 'country' => str($meetup->city->country->code)->upper(), - 'state' => $meetup->github_data['state'] ?? null, - 'city' => $meetup->city->name, - 'longitude' => (float) $meetup->city->longitude, - 'latitude' => (float) $meetup->city->latitude, - 'twitter_username' => $meetup->twitter_username, - 'website' => $meetup->webpage, - ]); - }); - Route::get('btc-map-communities', function () { - return response()->json(\App\Models\Meetup::query() - ->with([ - 'media', - 'city.country', - ]) - ->where('community', '=', 'einundzwanzig') - ->when(app()->environment('production'), - fn($query) => $query->whereHas('city', - fn($query) => $query - ->whereNotNull('cities.simplified_geojson') - ->whereNotNull('cities.population') - ->whereNotNull('cities.population_date') - )) - ->get() - ->map(fn($meetup) => [ - 'id' => $meetup->slug, - 'tags' => [ - 'type' => 'community', - 'name' => $meetup->name, - 'continent' => 'europe', - 'icon:square' => $meetup->logoSquare, - //'contact:email' => null, - 'contact:twitter' => $meetup->twitter_username ? 'https://twitter.com/'.$meetup->twitter_username : null, - 'contact:website' => $meetup->webpage, - 'contact:telegram' => $meetup->telegram_link, - 'contact:nostr' => $meetup->nostr, - //'tips:lightning_address' => null, - 'organization' => 'einundzwanzig', - 'language' => $meetup->city->country->language_codes[0] ?? 'de', - 'geo_json' => $meetup->city->simplified_geojson, - 'population' => $meetup->city->population, - 'population:date' => $meetup->city->population_date, - ], - ]) - ->toArray(), 200, - ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_SLASHES); - }); - }); + ->as('api.') + ->group(function () { + Route::resource('countries', \App\Http\Controllers\Api\CountryController::class); + Route::resource('meetup', \App\Http\Controllers\Api\MeetupController::class); + Route::resource('lecturers', \App\Http\Controllers\Api\LecturerController::class); + Route::resource('courses', \App\Http\Controllers\Api\CourseController::class); + Route::resource('cities', \App\Http\Controllers\Api\CityController::class); + Route::resource('venues', \App\Http\Controllers\Api\VenueController::class); + Route::resource('languages', \App\Http\Controllers\Api\LanguageController::class); + Route::get('meetups', function () { + return \App\Models\Meetup::query() + ->where('visible_on_map', true) + ->with([ + 'city', + ]) + ->get() + ->map(fn($meetup) => [ + 'name' => $meetup->name, + 'url' => $meetup->telegram_link ?? $meetup->webpage, + 'top' => $meetup->github_data['top'] ?? null, + 'left' => $meetup->github_data['left'] ?? null, + 'country' => str($meetup->city->country->code)->upper(), + 'state' => $meetup->github_data['state'] ?? null, + 'city' => $meetup->city->name, + 'longitude' => (float)$meetup->city->longitude, + 'latitude' => (float)$meetup->city->latitude, + 'twitter_username' => $meetup->twitter_username, + 'website' => $meetup->webpage, + ]); + }); + Route::get('btc-map-communities', function () { + return response()->json(\App\Models\Meetup::query() + ->with([ + 'media', + 'city.country', + ]) + ->where('community', '=', 'einundzwanzig') + ->when(app()->environment('production'), + fn($query) => $query->whereHas('city', + fn($query) => $query + ->whereNotNull('cities.simplified_geojson') + ->whereNotNull('cities.population') + ->whereNotNull('cities.population_date') + )) + ->get() + ->map(fn($meetup) => [ + 'id' => $meetup->slug, + 'tags' => [ + 'type' => 'community', + 'name' => $meetup->name, + 'continent' => 'europe', + 'icon:square' => $meetup->logoSquare, + //'contact:email' => null, + 'contact:twitter' => $meetup->twitter_username ? 'https://twitter.com/' . $meetup->twitter_username : null, + 'contact:website' => $meetup->webpage, + 'contact:telegram' => $meetup->telegram_link, + 'contact:nostr' => $meetup->nostr, + //'tips:lightning_address' => null, + 'organization' => 'einundzwanzig', + 'language' => $meetup->city->country->language_codes[0] ?? 'de', + 'geo_json' => $meetup->city->simplified_geojson, + 'population' => $meetup->city->population, + 'population:date' => $meetup->city->population_date, + ], + ]) + ->toArray(), 200, + ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_SLASHES); + }); + }); Route::get('/lnurl-auth-callback', function (Request $request) { if (lnurl\auth($request->k1, $request->sig, $request->key)) { // find User by $wallet_public_key if ($user = User::query() - ->where('change', $request->k1) - ->where('change_time', '>', now()->subMinutes(5)) - ->first()) { + ->where('change', $request->k1) + ->where('change_time', '>', now()->subMinutes(5)) + ->first()) { $user->public_key = $request->key; $user->change = null; $user->change_time = null; $user->save(); } else { $user = User::query() - ->whereBlind('public_key', 'public_key_index', $request->key) - ->first(); + ->whereBlind('public_key', 'public_key_index', $request->key) + ->first(); } if (!$user) { $fakeName = str()->random(10); // create User $user = User::create([ - 'public_key' => $request->key, + 'public_key' => $request->key, 'is_lecturer' => true, - 'name' => $fakeName, - 'email' => str($request->key)->substr(-12).'@portal.einundzwanzig.space', - 'lnbits' => [ - 'read_key' => null, - 'url' => null, + 'name' => $fakeName, + 'email' => str($request->key)->substr(-12) . '@portal.einundzwanzig.space', + 'lnbits' => [ + 'read_key' => null, + 'url' => null, 'wallet_id' => null, ], ]); $user->ownedTeams() - ->save(Team::forceCreate([ - 'user_id' => $user->id, - 'name' => $fakeName."'s Team", - 'personal_team' => true, - ])); + ->save(Team::forceCreate([ + 'user_id' => $user->id, + 'name' => $fakeName . "'s Team", + 'personal_team' => true, + ])); } // check if $k1 is in the database, if not, add it $loginKey = LoginKey::where('k1', $request->k1) - ->first(); + ->first(); if (!$loginKey) { LoginKey::create([ - 'k1' => $request->k1, + 'k1' => $request->k1, 'user_id' => $user->id, ]); } @@ -145,4 +146,4 @@ Route::get('/lnurl-auth-callback', function (Request $request) { return response()->json(['status' => 'ERROR', 'reason' => 'Signature was NOT VERIFIED']); }) - ->name('auth.ln.callback'); + ->name('auth.ln.callback'); diff --git a/yarn.lock b/yarn.lock index 29c12ff9..a471e280 100644 --- a/yarn.lock +++ b/yarn.lock @@ -729,9 +729,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001426, caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001450 - resolution: "caniuse-lite@npm:1.0.30001450" - checksum: 511b360bfc907b2e437699364cf96b83507bc45043926450056642332bcd6f65a1e72540c828534ae15e0ac906e3e9af46cb2bb84458dd580bc31478e9dce282 + version: 1.0.30001519 + resolution: "caniuse-lite@npm:1.0.30001519" + checksum: 66085133ede05d947e30b62fed2cbae18e5767afda8b0de38840883e1cfe5846bf1568ddbafd31647544e59112355abedaf9c867ac34541bfc20d69e7a19d94c languageName: node linkType: hard