mirror of
https://github.com/Einundzwanzig-Podcast/einundzwanzig-portal.git
synced 2025-12-11 06:46:47 +00:00
add visible_on_map field to meetups table
This commit is contained in:
@@ -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'),
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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) {
|
||||
//
|
||||
});
|
||||
}
|
||||
};
|
||||
181
routes/api.php
181
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');
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user