add visible_on_map field to meetups table

This commit is contained in:
HolgerHatGarKeineNode
2023-08-07 15:43:13 +02:00
parent 1339b49a33
commit 34e065a06e
6 changed files with 174 additions and 143 deletions

View File

@@ -22,7 +22,7 @@ class MeetupEventTable extends Component
public function mount() public function mount()
{ {
if (! $this->year) { if (!$this->year) {
$this->year = now()->year; $this->year = now()->year;
} }
} }
@@ -31,33 +31,34 @@ class MeetupEventTable extends Component
{ {
return view('livewire.meetup.meetup-event-table', [ return view('livewire.meetup.meetup-event-table', [
'markers' => MeetupEvent::query() 'markers' => MeetupEvent::query()
->with([ ->where('visible_on_map', true)
'meetup.city.country', ->with([
]) 'meetup.city.country',
->where('meetup_events.start', '>=', now()->subDay()) ])
->whereHas('meetup.city.country', ->where('meetup_events.start', '>=', now()->subDay())
fn ($query) => $query->where('countries.code', $this->country->code)) ->whereHas('meetup.city.country',
->get() fn($query) => $query->where('countries.code', $this->country->code))
->map(fn ($event) => [ ->get()
'id' => $event->id, ->map(fn($event) => [
'name' => $event->meetup->name.': '.$event->location, 'id' => $event->id,
'coords' => [$event->meetup->city->latitude, $event->meetup->city->longitude], 'name' => $event->meetup->name . ': ' . $event->location,
]), 'coords' => [$event->meetup->city->latitude, $event->meetup->city->longitude],
]),
'events' => MeetupEvent::query() 'events' => MeetupEvent::query()
->with([ ->with([
'meetup.city.country', 'meetup.city.country',
]) ])
->where('meetup_events.start', '>=', now()->subDay()) ->where('meetup_events.start', '>=', now()->subDay())
->whereHas('meetup.city.country', ->whereHas('meetup.city.country',
fn ($query) => $query->where('countries.code', $this->country->code)) fn($query) => $query->where('countries.code', $this->country->code))
->get() ->get()
->map(fn ($event) => [ ->map(fn($event) => [
'id' => $event->id, 'id' => $event->id,
'startDate' => $event->start, 'startDate' => $event->start,
'endDate' => $event->start->addHours(1), 'endDate' => $event->start->addHours(1),
'location' => $event->location, 'location' => $event->location,
'description' => $event->description, 'description' => $event->description,
]), ]),
])->layout('layouts.app', [ ])->layout('layouts.app', [
'SEOData' => new SEOData( 'SEOData' => new SEOData(
title: __('Meetup dates'), title: __('Meetup dates'),

View File

@@ -17,11 +17,11 @@ class MeetupTable extends Component
public function filterByMarker($id) public function filterByMarker($id)
{ {
$meetup = Meetup::with(['city.country']) $meetup = Meetup::with(['city.country'])
->find($id); ->find($id);
return to_route('meetup.landing', [ return to_route('meetup.landing', [
'country' => $meetup->city->country->code, 'country' => $meetup->city->country->code,
'meetup' => $meetup, 'meetup' => $meetup,
]); ]);
} }
@@ -31,17 +31,18 @@ class MeetupTable extends Component
return view('livewire.meetup.meetup-table', [ return view('livewire.meetup.meetup-table', [
'markers' => Meetup::query() 'markers' => Meetup::query()
->with([ ->where('visible_on_map', true)
'city.country', ->with([
]) 'city.country',
->whereHas('city.country', ])
fn($query) => $query->where('countries.code', $this->country->code)) ->whereHas('city.country',
->get() fn($query) => $query->where('countries.code', $this->country->code))
->map(fn($meetup) => [ ->get()
'id' => $meetup->id, ->map(fn($meetup) => [
'name' => $meetup->name, 'id' => $meetup->id,
'coords' => [$meetup->city->latitude, $meetup->city->longitude], 'name' => $meetup->name,
]), 'coords' => [$meetup->city->latitude, $meetup->city->longitude],
]),
])->layout('layouts.app', [ ])->layout('layouts.app', [
'SEOData' => new SEOData( 'SEOData' => new SEOData(
title: __('Meetups'), title: __('Meetups'),

View File

@@ -14,7 +14,7 @@ class WorldMap extends Component
public function filterByMarker($id) public function filterByMarker($id)
{ {
$meetup = Meetup::with(['city.country']) $meetup = Meetup::with(['city.country'])
->find($id); ->find($id);
return to_route('meetup.landing', [ return to_route('meetup.landing', [
'country' => $meetup->city->country->code, 'country' => $meetup->city->country->code,
@@ -26,15 +26,16 @@ class WorldMap extends Component
{ {
return view('livewire.meetup.world-map', [ return view('livewire.meetup.world-map', [
'allMarkers' => Meetup::query() 'allMarkers' => Meetup::query()
->with([ ->where('visible_on_map', true)
'city.country', ->with([
]) 'city.country',
->get() ])
->map(fn ($meetup) => [ ->get()
'id' => $meetup->id, ->map(fn($meetup) => [
'name' => $meetup->name, 'id' => $meetup->id,
'coords' => [$meetup->city->latitude, $meetup->city->longitude], 'name' => $meetup->name,
]), 'coords' => [$meetup->city->latitude, $meetup->city->longitude],
]),
])->layout('layouts.app', [ ])->layout('layouts.app', [
'SEOData' => new SEOData( 'SEOData' => new SEOData(
title: __('World map of meetups'), title: __('World map of meetups'),

View File

@@ -0,0 +1,27 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('meetups', function (Blueprint $table) {
$table->boolean('visible_on_map')->default(true);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('meetups', function (Blueprint $table) {
//
});
}
};

View File

@@ -19,123 +19,124 @@ use Illuminate\Support\Facades\Route;
*/ */
Route::middleware('auth:sanctum') Route::middleware('auth:sanctum')
->get('/user', function (Request $request) { ->get('/user', function (Request $request) {
return $request->user(); return $request->user();
}); });
Route::middleware([]) Route::middleware([])
->as('api.') ->as('api.')
->group(function () { ->group(function () {
Route::resource('countries', \App\Http\Controllers\Api\CountryController::class); Route::resource('countries', \App\Http\Controllers\Api\CountryController::class);
Route::resource('meetup', \App\Http\Controllers\Api\MeetupController::class); Route::resource('meetup', \App\Http\Controllers\Api\MeetupController::class);
Route::resource('lecturers', \App\Http\Controllers\Api\LecturerController::class); Route::resource('lecturers', \App\Http\Controllers\Api\LecturerController::class);
Route::resource('courses', \App\Http\Controllers\Api\CourseController::class); Route::resource('courses', \App\Http\Controllers\Api\CourseController::class);
Route::resource('cities', \App\Http\Controllers\Api\CityController::class); Route::resource('cities', \App\Http\Controllers\Api\CityController::class);
Route::resource('venues', \App\Http\Controllers\Api\VenueController::class); Route::resource('venues', \App\Http\Controllers\Api\VenueController::class);
Route::resource('languages', \App\Http\Controllers\Api\LanguageController::class); Route::resource('languages', \App\Http\Controllers\Api\LanguageController::class);
Route::get('meetups', function () { Route::get('meetups', function () {
return \App\Models\Meetup::query() return \App\Models\Meetup::query()
->with([ ->where('visible_on_map', true)
'city', ->with([
]) 'city',
->get() ])
->map(fn($meetup) => [ ->get()
'name' => $meetup->name, ->map(fn($meetup) => [
'url' => $meetup->telegram_link ?? $meetup->webpage, 'name' => $meetup->name,
'top' => $meetup->github_data['top'] ?? null, 'url' => $meetup->telegram_link ?? $meetup->webpage,
'left' => $meetup->github_data['left'] ?? null, 'top' => $meetup->github_data['top'] ?? null,
'country' => str($meetup->city->country->code)->upper(), 'left' => $meetup->github_data['left'] ?? null,
'state' => $meetup->github_data['state'] ?? null, 'country' => str($meetup->city->country->code)->upper(),
'city' => $meetup->city->name, 'state' => $meetup->github_data['state'] ?? null,
'longitude' => (float) $meetup->city->longitude, 'city' => $meetup->city->name,
'latitude' => (float) $meetup->city->latitude, 'longitude' => (float)$meetup->city->longitude,
'twitter_username' => $meetup->twitter_username, 'latitude' => (float)$meetup->city->latitude,
'website' => $meetup->webpage, 'twitter_username' => $meetup->twitter_username,
]); 'website' => $meetup->webpage,
}); ]);
Route::get('btc-map-communities', function () { });
return response()->json(\App\Models\Meetup::query() Route::get('btc-map-communities', function () {
->with([ return response()->json(\App\Models\Meetup::query()
'media', ->with([
'city.country', 'media',
]) 'city.country',
->where('community', '=', 'einundzwanzig') ])
->when(app()->environment('production'), ->where('community', '=', 'einundzwanzig')
fn($query) => $query->whereHas('city', ->when(app()->environment('production'),
fn($query) => $query fn($query) => $query->whereHas('city',
->whereNotNull('cities.simplified_geojson') fn($query) => $query
->whereNotNull('cities.population') ->whereNotNull('cities.simplified_geojson')
->whereNotNull('cities.population_date') ->whereNotNull('cities.population')
)) ->whereNotNull('cities.population_date')
->get() ))
->map(fn($meetup) => [ ->get()
'id' => $meetup->slug, ->map(fn($meetup) => [
'tags' => [ 'id' => $meetup->slug,
'type' => 'community', 'tags' => [
'name' => $meetup->name, 'type' => 'community',
'continent' => 'europe', 'name' => $meetup->name,
'icon:square' => $meetup->logoSquare, 'continent' => 'europe',
//'contact:email' => null, 'icon:square' => $meetup->logoSquare,
'contact:twitter' => $meetup->twitter_username ? 'https://twitter.com/'.$meetup->twitter_username : null, //'contact:email' => null,
'contact:website' => $meetup->webpage, 'contact:twitter' => $meetup->twitter_username ? 'https://twitter.com/' . $meetup->twitter_username : null,
'contact:telegram' => $meetup->telegram_link, 'contact:website' => $meetup->webpage,
'contact:nostr' => $meetup->nostr, 'contact:telegram' => $meetup->telegram_link,
//'tips:lightning_address' => null, 'contact:nostr' => $meetup->nostr,
'organization' => 'einundzwanzig', //'tips:lightning_address' => null,
'language' => $meetup->city->country->language_codes[0] ?? 'de', 'organization' => 'einundzwanzig',
'geo_json' => $meetup->city->simplified_geojson, 'language' => $meetup->city->country->language_codes[0] ?? 'de',
'population' => $meetup->city->population, 'geo_json' => $meetup->city->simplified_geojson,
'population:date' => $meetup->city->population_date, '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); ->toArray(), 200,
}); ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_SLASHES);
}); });
});
Route::get('/lnurl-auth-callback', function (Request $request) { Route::get('/lnurl-auth-callback', function (Request $request) {
if (lnurl\auth($request->k1, $request->sig, $request->key)) { if (lnurl\auth($request->k1, $request->sig, $request->key)) {
// find User by $wallet_public_key // find User by $wallet_public_key
if ($user = User::query() if ($user = User::query()
->where('change', $request->k1) ->where('change', $request->k1)
->where('change_time', '>', now()->subMinutes(5)) ->where('change_time', '>', now()->subMinutes(5))
->first()) { ->first()) {
$user->public_key = $request->key; $user->public_key = $request->key;
$user->change = null; $user->change = null;
$user->change_time = null; $user->change_time = null;
$user->save(); $user->save();
} else { } else {
$user = User::query() $user = User::query()
->whereBlind('public_key', 'public_key_index', $request->key) ->whereBlind('public_key', 'public_key_index', $request->key)
->first(); ->first();
} }
if (!$user) { if (!$user) {
$fakeName = str()->random(10); $fakeName = str()->random(10);
// create User // create User
$user = User::create([ $user = User::create([
'public_key' => $request->key, 'public_key' => $request->key,
'is_lecturer' => true, 'is_lecturer' => true,
'name' => $fakeName, 'name' => $fakeName,
'email' => str($request->key)->substr(-12).'@portal.einundzwanzig.space', 'email' => str($request->key)->substr(-12) . '@portal.einundzwanzig.space',
'lnbits' => [ 'lnbits' => [
'read_key' => null, 'read_key' => null,
'url' => null, 'url' => null,
'wallet_id' => null, 'wallet_id' => null,
], ],
]); ]);
$user->ownedTeams() $user->ownedTeams()
->save(Team::forceCreate([ ->save(Team::forceCreate([
'user_id' => $user->id, 'user_id' => $user->id,
'name' => $fakeName."'s Team", 'name' => $fakeName . "'s Team",
'personal_team' => true, 'personal_team' => true,
])); ]));
} }
// check if $k1 is in the database, if not, add it // check if $k1 is in the database, if not, add it
$loginKey = LoginKey::where('k1', $request->k1) $loginKey = LoginKey::where('k1', $request->k1)
->first(); ->first();
if (!$loginKey) { if (!$loginKey) {
LoginKey::create([ LoginKey::create([
'k1' => $request->k1, 'k1' => $request->k1,
'user_id' => $user->id, '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']); return response()->json(['status' => 'ERROR', 'reason' => 'Signature was NOT VERIFIED']);
}) })
->name('auth.ln.callback'); ->name('auth.ln.callback');

View File

@@ -729,9 +729,9 @@ __metadata:
linkType: hard linkType: hard
"caniuse-lite@npm:^1.0.30001426, caniuse-lite@npm:^1.0.30001449": "caniuse-lite@npm:^1.0.30001426, caniuse-lite@npm:^1.0.30001449":
version: 1.0.30001450 version: 1.0.30001519
resolution: "caniuse-lite@npm:1.0.30001450" resolution: "caniuse-lite@npm:1.0.30001519"
checksum: 511b360bfc907b2e437699364cf96b83507bc45043926450056642332bcd6f65a1e72540c828534ae15e0ac906e3e9af46cb2bb84458dd580bc31478e9dce282 checksum: 66085133ede05d947e30b62fed2cbae18e5767afda8b0de38840883e1cfe5846bf1568ddbafd31647544e59112355abedaf9c867ac34541bfc20d69e7a19d94c
languageName: node languageName: node
linkType: hard linkType: hard