From d6f1b71647237a7ca98db590ea047ac1bcf680ab Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 4 Apr 2021 22:12:54 +0800 Subject: [PATCH 01/17] User can add person cemetery data and stored to user metadata --- app/Http/Controllers/UsersController.php | 18 ++++++++- app/Http/Requests/Users/UpdateRequest.php | 5 +++ app/UserMetadata.php | 12 ++++++ ...021_04_04_215601_create_user_metadata_table.php | 34 ++++++++++++++++ .../views/users/partials/edit_death.blade.php | 4 ++ tests/Feature/UsersProfileTest.php | 47 ++++++++++++++++++++++ 6 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 app/UserMetadata.php create mode 100644 database/migrations/2021_04_04_215601_create_user_metadata_table.php diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 9152e32..53c2e26 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -6,7 +6,9 @@ use App\Couple; use App\Http\Requests\Users\UpdateRequest; use App\Jobs\Users\DeleteAndReplaceUser; use App\User; +use App\UserMetadata; use Illuminate\Http\Request; +use Ramsey\Uuid\Uuid; use Storage; class UsersController extends Controller @@ -125,7 +127,21 @@ class UsersController extends Controller */ public function update(UpdateRequest $request, User $user) { - $user->update($request->validated()); + $userAttributes = $request->validated(); + $user->update($userAttributes); + $userAttributes = collect($userAttributes); + foreach (['cemetery_location_name', 'cemetery_location_address', 'cemetery_location_latitude', 'cemetery_location_longitude'] as $key) { + if ($userAttributes->has($key)) { + $userMeta = UserMetadata::where('name', $key)->firstOrNew(); + if (!$userMeta->exists) { + $userMeta->id = Uuid::uuid4()->toString(); + $userMeta->user_id = $user->id; + $userMeta->name = $key; + } + $userMeta->value = $userAttributes->get($key); + $userMeta->save(); + } + } return redirect()->route('users.show', $user->id); } diff --git a/app/Http/Requests/Users/UpdateRequest.php b/app/Http/Requests/Users/UpdateRequest.php index ba34ff6..ad4d219 100644 --- a/app/Http/Requests/Users/UpdateRequest.php +++ b/app/Http/Requests/Users/UpdateRequest.php @@ -39,6 +39,11 @@ class UpdateRequest extends FormRequest 'email' => 'nullable|string|max:255', 'password' => 'nullable|min:6|max:15', 'birth_order' => 'nullable|numeric|min:1', + + 'cemetery_location_name' => 'nullable|string|max:255', + 'cemetery_location_address' => 'nullable|string|max:255', + 'cemetery_location_latitude' => 'required_with:cemetery_location_longitude|nullable|string|max:255', + 'cemetery_location_longitude' => 'required_with:cemetery_location_latitude|nullable|string|max:255', ]; } diff --git a/app/UserMetadata.php b/app/UserMetadata.php new file mode 100644 index 0000000..99e3d38 --- /dev/null +++ b/app/UserMetadata.php @@ -0,0 +1,12 @@ +uuid('id')->primary(); + $table->foreignId('user_id')->constrained('users')->onDelete('cascade'); + $table->string('name')->index(); + $table->text('value'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_metadata'); + } +} diff --git a/resources/views/users/partials/edit_death.blade.php b/resources/views/users/partials/edit_death.blade.php index 6e8ff6e..0bce3a4 100644 --- a/resources/views/users/partials/edit_death.blade.php +++ b/resources/views/users/partials/edit_death.blade.php @@ -2,3 +2,7 @@
{!! FormField::text('yod', ['label' => __('user.yod'), 'placeholder' => __('app.example').' 2003']) !!}
{!! FormField::text('dod', ['label' => __('user.dod'), 'placeholder' => __('app.example').' 2003-10-17']) !!}
+{!! FormField::text('cemetery_location_name', ['label' => __('user.cemetery_location_name')]) !!} +{!! FormField::text('cemetery_location_address', ['label' => __('user.cemetery_location_address')]) !!} +{!! FormField::text('cemetery_location_latitude', ['label' => __('user.cemetery_location_latitude')]) !!} +{!! FormField::text('cemetery_location_longitude', ['label' => __('user.cemetery_location_longitude')]) !!} \ No newline at end of file diff --git a/tests/Feature/UsersProfileTest.php b/tests/Feature/UsersProfileTest.php index 420c427..10145ec 100644 --- a/tests/Feature/UsersProfileTest.php +++ b/tests/Feature/UsersProfileTest.php @@ -168,6 +168,53 @@ class UsersProfileTest extends TestCase } /** @test */ + public function user_can_update_died_person_cemetary_location() + { + $user = $this->loginAsUser(); + $this->visit(route('users.edit', [$user->id, 'tab' => 'death'])); + $this->seePageIs(route('users.edit', [$user->id, 'tab' => 'death'])); + + $this->submitForm(trans('app.update'), [ + 'dod' => '', + 'yod' => '2003', + 'cemetery_location_name' => 'Some name', + 'cemetery_location_address' => 'Some address', + 'cemetery_location_latitude' => '-3.333333', + 'cemetery_location_longitude' => '114.583333', + ]); + + $this->seeInDatabase('users', [ + 'id' => $user->id, + 'dod' => null, + 'yod' => '2003', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_name', + 'value' => 'Some name', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_address', + 'value' => 'Some address', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_latitude', + 'value' => '-3.333333', + ]); + + $this->seeInDatabase('user_metadata', [ + 'user_id' => $user->id, + 'name' => 'cemetery_location_longitude', + 'value' => '114.583333', + ]); + } + + /** @test */ public function manager_can_add_login_account_on_a_user() { $manager = $this->loginAsUser(); From 751b9b3c4b7e3dd567d381acfa0a88d43d588564 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 4 Apr 2021 22:18:04 +0800 Subject: [PATCH 02/17] Change column name from name to key --- app/Http/Controllers/UsersController.php | 4 ++-- .../migrations/2021_04_04_215601_create_user_metadata_table.php | 2 +- tests/Feature/UsersProfileTest.php | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 53c2e26..54e8b1b 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -132,11 +132,11 @@ class UsersController extends Controller $userAttributes = collect($userAttributes); foreach (['cemetery_location_name', 'cemetery_location_address', 'cemetery_location_latitude', 'cemetery_location_longitude'] as $key) { if ($userAttributes->has($key)) { - $userMeta = UserMetadata::where('name', $key)->firstOrNew(); + $userMeta = UserMetadata::where('key', $key)->firstOrNew(); if (!$userMeta->exists) { $userMeta->id = Uuid::uuid4()->toString(); $userMeta->user_id = $user->id; - $userMeta->name = $key; + $userMeta->key = $key; } $userMeta->value = $userAttributes->get($key); $userMeta->save(); diff --git a/database/migrations/2021_04_04_215601_create_user_metadata_table.php b/database/migrations/2021_04_04_215601_create_user_metadata_table.php index d059545..e6c10e5 100644 --- a/database/migrations/2021_04_04_215601_create_user_metadata_table.php +++ b/database/migrations/2021_04_04_215601_create_user_metadata_table.php @@ -16,7 +16,7 @@ class CreateUserMetadataTable extends Migration Schema::create('user_metadata', function (Blueprint $table) { $table->uuid('id')->primary(); $table->foreignId('user_id')->constrained('users')->onDelete('cascade'); - $table->string('name')->index(); + $table->string('key')->index(); $table->text('value'); $table->timestamps(); }); diff --git a/tests/Feature/UsersProfileTest.php b/tests/Feature/UsersProfileTest.php index 10145ec..4a17761 100644 --- a/tests/Feature/UsersProfileTest.php +++ b/tests/Feature/UsersProfileTest.php @@ -191,25 +191,25 @@ class UsersProfileTest extends TestCase $this->seeInDatabase('user_metadata', [ 'user_id' => $user->id, - 'name' => 'cemetery_location_name', + 'key' => 'cemetery_location_name', 'value' => 'Some name', ]); $this->seeInDatabase('user_metadata', [ 'user_id' => $user->id, - 'name' => 'cemetery_location_address', + 'key' => 'cemetery_location_address', 'value' => 'Some address', ]); $this->seeInDatabase('user_metadata', [ 'user_id' => $user->id, - 'name' => 'cemetery_location_latitude', + 'key' => 'cemetery_location_latitude', 'value' => '-3.333333', ]); $this->seeInDatabase('user_metadata', [ 'user_id' => $user->id, - 'name' => 'cemetery_location_longitude', + 'key' => 'cemetery_location_longitude', 'value' => '114.583333', ]); } From 6a0b0b0c000086c5f2346cb385862fa3772f3a29 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 4 Apr 2021 22:25:51 +0800 Subject: [PATCH 03/17] Make user_metadata.value nullabe --- database/migrations/2021_04_04_215601_create_user_metadata_table.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/2021_04_04_215601_create_user_metadata_table.php b/database/migrations/2021_04_04_215601_create_user_metadata_table.php index e6c10e5..c154cba 100644 --- a/database/migrations/2021_04_04_215601_create_user_metadata_table.php +++ b/database/migrations/2021_04_04_215601_create_user_metadata_table.php @@ -17,7 +17,7 @@ class CreateUserMetadataTable extends Migration $table->uuid('id')->primary(); $table->foreignId('user_id')->constrained('users')->onDelete('cascade'); $table->string('key')->index(); - $table->text('value'); + $table->text('value')->nullable(); $table->timestamps(); }); } From 96e8e917f46fd06bea7e14777d47785c73eb9538 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 4 Apr 2021 22:35:41 +0800 Subject: [PATCH 04/17] Update user death form views --- resources/lang/en/address.php | 8 ++++++++ resources/lang/en/user.php | 2 ++ resources/lang/id/address.php | 8 ++++++++ resources/lang/id/user.php | 2 ++ resources/views/users/partials/edit_death.blade.php | 14 ++++++++++---- 5 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 resources/lang/en/address.php create mode 100644 resources/lang/id/address.php diff --git a/resources/lang/en/address.php b/resources/lang/en/address.php new file mode 100644 index 0000000..fa89ac2 --- /dev/null +++ b/resources/lang/en/address.php @@ -0,0 +1,8 @@ + 'Address', + 'location_name' => 'Location Name', + 'latitude' => 'Latitude', + 'longitude' => 'Longitude', +]; diff --git a/resources/lang/en/user.php b/resources/lang/en/user.php index e612bd0..db08fb0 100644 --- a/resources/lang/en/user.php +++ b/resources/lang/en/user.php @@ -51,6 +51,8 @@ return [ 'phone' => 'Phone', 'manager' => 'Manager', + 'cemetery_location' => 'Cemetary Location', + // Photo 'reupload_photo' => 'Re-upload Photo', 'update_photo' => 'Update Photo', diff --git a/resources/lang/id/address.php b/resources/lang/id/address.php new file mode 100644 index 0000000..521a206 --- /dev/null +++ b/resources/lang/id/address.php @@ -0,0 +1,8 @@ + 'Alamat', + 'location_name' => 'Nama Lokasi', + 'latitude' => 'Latitude', + 'longitude' => 'Longitude', +]; diff --git a/resources/lang/id/user.php b/resources/lang/id/user.php index 8668553..8c4e8a3 100644 --- a/resources/lang/id/user.php +++ b/resources/lang/id/user.php @@ -51,6 +51,8 @@ return [ 'phone' => 'Telp.', 'manager' => 'Pengelola', + 'cemetery_location' => 'Cemetary Location', + // Photo 'reupload_photo' => 'Upload ulang Foto', 'update_photo' => 'Update Foto', diff --git a/resources/views/users/partials/edit_death.blade.php b/resources/views/users/partials/edit_death.blade.php index 0bce3a4..0b42a64 100644 --- a/resources/views/users/partials/edit_death.blade.php +++ b/resources/views/users/partials/edit_death.blade.php @@ -2,7 +2,13 @@
{!! FormField::text('yod', ['label' => __('user.yod'), 'placeholder' => __('app.example').' 2003']) !!}
{!! FormField::text('dod', ['label' => __('user.dod'), 'placeholder' => __('app.example').' 2003-10-17']) !!}
-{!! FormField::text('cemetery_location_name', ['label' => __('user.cemetery_location_name')]) !!} -{!! FormField::text('cemetery_location_address', ['label' => __('user.cemetery_location_address')]) !!} -{!! FormField::text('cemetery_location_latitude', ['label' => __('user.cemetery_location_latitude')]) !!} -{!! FormField::text('cemetery_location_longitude', ['label' => __('user.cemetery_location_longitude')]) !!} \ No newline at end of file + +
+ {{ __('user.cemetery_location') }} + {!! FormField::text('cemetery_location_name', ['label' => __('address.location_name')]) !!} + {!! FormField::textarea('cemetery_location_address', ['label' => __('address.address')]) !!} +
+
{!! FormField::text('cemetery_location_latitude', ['label' => __('address.latitude')]) !!}
+
{!! FormField::text('cemetery_location_longitude', ['label' => __('address.longitude')]) !!}
+
+
From 680e46eedfaa74df4e9489c909cdd29ca2ae6fd8 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 4 Apr 2021 23:10:02 +0800 Subject: [PATCH 05/17] Add prefilled input value from user metadata --- app/User.php | 18 ++++++++++++ app/UserMetadata.php | 2 ++ database/factories/ModelFactory.php | 26 ++++++++++++----- .../views/users/partials/edit_death.blade.php | 8 +++--- tests/Feature/UsersProfileTest.php | 21 ++++++++++++++ tests/Unit/UserTest.php | 33 +++++++++++++++++++++- 6 files changed, 96 insertions(+), 12 deletions(-) diff --git a/app/User.php b/app/User.php index 26bafb6..f8aa68b 100644 --- a/app/User.php +++ b/app/User.php @@ -314,4 +314,22 @@ class User extends Authenticatable return Carbon::now()->diffInDays($this->birthday, false); } } + + public function metadata() + { + return $this->hasMany(UserMetadata::class, 'user_id', 'id'); + } + + public function getMetadata($key) + { + $metadata = $this->metadata; + + $meta = $metadata->filter(function ($meta) use ($key) { + return $meta->key == $key; + })->first(); + + if ($meta) { + return $meta->value; + } + } } diff --git a/app/UserMetadata.php b/app/UserMetadata.php index 99e3d38..29a3c87 100644 --- a/app/UserMetadata.php +++ b/app/UserMetadata.php @@ -9,4 +9,6 @@ class UserMetadata extends Model public $incrementing = false; protected $keyType = 'string'; + + protected $fillable = ['id', 'user_id', 'key', 'value']; } diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 4e2bf11..93db9b8 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -2,6 +2,7 @@ use App\Couple; use App\User; +use App\UserMetadata; /* |-------------------------------------------------------------------------- @@ -18,10 +19,10 @@ use App\User; $factory->define(User::class, function (Faker\Generator $faker) { $name = $faker->name; return [ - 'id' => $faker->uuid, - 'name' => $name, - 'nickname' => $name, - 'gender_id' => rand(1, 2), + 'id' => $faker->uuid, + 'name' => $name, + 'nickname' => $name, + 'gender_id' => rand(1, 2), 'manager_id' => $faker->uuid, ]; }); @@ -36,15 +37,26 @@ $factory->state(User::class, 'female', function (Faker\Generator $faker) { $factory->define(Couple::class, function (Faker\Generator $faker) { return [ - 'id' => $faker->uuid, + 'id' => $faker->uuid, 'husband_id' => function () { return factory(User::class)->states('male')->create()->id; }, - 'wife_id' => function () { + 'wife_id' => function () { return factory(User::class)->states('female')->create()->id; }, 'manager_id' => function () { return factory(User::class)->create()->id; }, ]; -}); \ No newline at end of file +}); + +$factory->define(UserMetadata::class, function (Faker\Generator $faker) { + return [ + 'id' => $faker->uuid, + 'user_id' => function () { + return factory(User::class)->create()->id; + }, + 'key' => $faker->name, + 'value' => $faker->sentence, + ]; +}); diff --git a/resources/views/users/partials/edit_death.blade.php b/resources/views/users/partials/edit_death.blade.php index 0b42a64..fff0c56 100644 --- a/resources/views/users/partials/edit_death.blade.php +++ b/resources/views/users/partials/edit_death.blade.php @@ -5,10 +5,10 @@
{{ __('user.cemetery_location') }} - {!! FormField::text('cemetery_location_name', ['label' => __('address.location_name')]) !!} - {!! FormField::textarea('cemetery_location_address', ['label' => __('address.address')]) !!} + {!! FormField::text('cemetery_location_name', ['label' => __('address.location_name'), 'value' => old('cemetery_location_name', $user->getMetadata('cemetery_location_name'))]) !!} + {!! FormField::textarea('cemetery_location_address', ['label' => __('address.address'), 'value' => old('cemetery_location_address', $user->getMetadata('cemetery_location_address'))]) !!}
-
{!! FormField::text('cemetery_location_latitude', ['label' => __('address.latitude')]) !!}
-
{!! FormField::text('cemetery_location_longitude', ['label' => __('address.longitude')]) !!}
+
{!! FormField::text('cemetery_location_latitude', ['label' => __('address.latitude'), 'value' => old('cemetery_location_latitude', $user->getMetadata('cemetery_location_latitude'))]) !!}
+
{!! FormField::text('cemetery_location_longitude', ['label' => __('address.longitude'), 'value' => old('cemetery_location_longitude', $user->getMetadata('cemetery_location_longitude'))]) !!}
diff --git a/tests/Feature/UsersProfileTest.php b/tests/Feature/UsersProfileTest.php index 4a17761..219680f 100644 --- a/tests/Feature/UsersProfileTest.php +++ b/tests/Feature/UsersProfileTest.php @@ -4,6 +4,8 @@ namespace Tests\Feature; use App\User; use Illuminate\Foundation\Testing\RefreshDatabase; +use Illuminate\Support\Facades\DB; +use Ramsey\Uuid\Uuid; use Storage; use Tests\TestCase; @@ -215,6 +217,25 @@ class UsersProfileTest extends TestCase } /** @test */ + public function user_metadata_can_be_prefilled_on_the_edit_form() + { + $user = $this->loginAsUser(); + DB::table('user_metadata')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'user_id' => $user->id, + 'key' => 'cemetery_location_name', + 'value' => 'Some place name', + ]); + + $this->visit(route('users.edit', [$user->id, 'tab' => 'death'])); + $this->seePageIs(route('users.edit', [$user->id, 'tab' => 'death'])); + $this->seeElement('input', [ + 'name' => 'cemetery_location_name', + 'value' => 'Some place name', + ]); + } + + /** @test */ public function manager_can_add_login_account_on_a_user() { $manager = $this->loginAsUser(); diff --git a/tests/Unit/UserTest.php b/tests/Unit/UserTest.php index 000dba1..ae7fd5e 100644 --- a/tests/Unit/UserTest.php +++ b/tests/Unit/UserTest.php @@ -4,9 +4,12 @@ namespace Tests\Unit; use App\Couple; use App\User; +use App\UserMetadata; use Carbon\Carbon; +use Illuminate\Database\Eloquent\Collection; use Illuminate\Foundation\Testing\RefreshDatabase; -use Illuminate\Support\Collection; +use Illuminate\Support\Facades\DB; +use Ramsey\Uuid\Nonstandard\Uuid; use Tests\TestCase; class UserTest extends TestCase @@ -110,6 +113,34 @@ class UserTest extends TestCase } /** @test */ + public function a_user_has_many_metadata_relation() + { + $user = factory(User::class)->create(); + $metadata = factory(UserMetadata::class)->create(['user_id' => $user->id]); + + $this->assertInstanceOf(Collection::class, $user->metadata); + $this->assertInstanceOf(UserMetadata::class, $user->metadata->first()); + } + + /** @test */ + public function user_model_has_get_metadata_method() + { + $user = factory(User::class)->create(); + + $this->assertNull($user->getMetadata('cemetery_location_address')); + + DB::table('user_metadata')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'user_id' => $user->id, + 'key' => 'cemetery_location_address', + 'value' => 'Some address', + ]); + $user = $user->fresh(); + + $this->assertEquals('Some address', $user->getMetadata('cemetery_location_address')); + } + + /** @test */ public function user_have_mother_link_method() { $mother = factory(User::class)->create(); From 9f1fd6f9f295f9849ca022ceefc2b63aa35889c0 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 4 Apr 2021 23:17:45 +0800 Subject: [PATCH 06/17] getMetadata will return collections of user meta if key is null --- app/User.php | 11 ++++++++++- tests/Unit/UserTest.php | 18 ++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/User.php b/app/User.php index f8aa68b..73c93b3 100644 --- a/app/User.php +++ b/app/User.php @@ -320,10 +320,19 @@ class User extends Authenticatable return $this->hasMany(UserMetadata::class, 'user_id', 'id'); } - public function getMetadata($key) + public function getMetadata($key = null) { $metadata = $this->metadata; + if (is_null($key)) { + $metadataCollection = []; + foreach ($metadata as $metaKey => $metaValue) { + $metadataCollection[$metaKey] = $metaValue; + } + + return collect($metadataCollection); + } + $meta = $metadata->filter(function ($meta) use ($key) { return $meta->key == $key; })->first(); diff --git a/tests/Unit/UserTest.php b/tests/Unit/UserTest.php index ae7fd5e..9f139de 100644 --- a/tests/Unit/UserTest.php +++ b/tests/Unit/UserTest.php @@ -141,6 +141,24 @@ class UserTest extends TestCase } /** @test */ + public function user_model_get_metadata_method_returns_all_metadata_if_key_is_null() + { + $user = factory(User::class)->create(); + + $this->assertEmpty($user->getMetadata()); + + DB::table('user_metadata')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'user_id' => $user->id, + 'key' => 'cemetery_location_address', + 'value' => 'Some address', + ]); + $user = $user->fresh(); + + $this->assertCount(1, $user->getMetadata()); + } + + /** @test */ public function user_have_mother_link_method() { $mother = factory(User::class)->create(); From dc6181d1b26a67b3494adea0ed142654f29a84dc Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 5 Apr 2021 19:23:39 +0800 Subject: [PATCH 07/17] Update table constrain --- database/migrations/2021_04_04_215601_create_user_metadata_table.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/database/migrations/2021_04_04_215601_create_user_metadata_table.php b/database/migrations/2021_04_04_215601_create_user_metadata_table.php index c154cba..c4be9a2 100644 --- a/database/migrations/2021_04_04_215601_create_user_metadata_table.php +++ b/database/migrations/2021_04_04_215601_create_user_metadata_table.php @@ -15,10 +15,12 @@ class CreateUserMetadataTable extends Migration { Schema::create('user_metadata', function (Blueprint $table) { $table->uuid('id')->primary(); - $table->foreignId('user_id')->constrained('users')->onDelete('cascade'); + $table->uuid('user_id'); $table->string('key')->index(); $table->text('value')->nullable(); $table->timestamps(); + + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); }); } From cb5c00e510dc6309cfdb7fa7bc30f48ce866ffa2 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 5 Apr 2021 21:29:03 +0800 Subject: [PATCH 08/17] Update coordinate from pointing on the map --- .../views/users/partials/edit_death.blade.php | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/resources/views/users/partials/edit_death.blade.php b/resources/views/users/partials/edit_death.blade.php index fff0c56..dca9ecc 100644 --- a/resources/views/users/partials/edit_death.blade.php +++ b/resources/views/users/partials/edit_death.blade.php @@ -12,3 +12,51 @@
{!! FormField::text('cemetery_location_longitude', ['label' => __('address.longitude'), 'value' => old('cemetery_location_longitude', $user->getMetadata('cemetery_location_longitude'))]) !!}
+
+ +@section('ext_css') + + + +@endsection + +@section('script') + + +@endsection From 97419c87d82ddc33312b75d6043db60b277cf925 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Mon, 5 Apr 2021 21:34:56 +0800 Subject: [PATCH 09/17] Move leaflet scripts into the main view --- resources/views/users/edit.blade.php | 51 ++++++++++++++++++++++ .../views/users/partials/edit_death.blade.php | 48 -------------------- 2 files changed, 51 insertions(+), 48 deletions(-) diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index ab80a45..813f867 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -34,6 +34,9 @@ {{ Form::close() }}
@includeWhen(request('tab') == null || !in_array(request('tab'), $validTabs), 'users.partials.update_photo') + @if (request('tab') == 'death') +
+ @endif
@@ -43,10 +46,26 @@ @section('ext_css') + +@if (request('tab') == 'death') + + + +@endif @endsection @section('script') +@if (request('tab') == 'death') + +@endif + @endsection diff --git a/resources/views/users/partials/edit_death.blade.php b/resources/views/users/partials/edit_death.blade.php index dca9ecc..fff0c56 100644 --- a/resources/views/users/partials/edit_death.blade.php +++ b/resources/views/users/partials/edit_death.blade.php @@ -12,51 +12,3 @@
{!! FormField::text('cemetery_location_longitude', ['label' => __('address.longitude'), 'value' => old('cemetery_location_longitude', $user->getMetadata('cemetery_location_longitude'))]) !!}
-
- -@section('ext_css') - - - -@endsection - -@section('script') - - -@endsection From 0ed3d10caa200e16a35cc54b11c7e817f74bd34f Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Tue, 6 Apr 2021 12:27:05 +0800 Subject: [PATCH 10/17] The get metadata method accepts a default value --- app/User.php | 4 +++- tests/Unit/UserTest.php | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/app/User.php b/app/User.php index 73c93b3..6798447 100644 --- a/app/User.php +++ b/app/User.php @@ -320,7 +320,7 @@ class User extends Authenticatable return $this->hasMany(UserMetadata::class, 'user_id', 'id'); } - public function getMetadata($key = null) + public function getMetadata($key = null, $defaultValue = null) { $metadata = $this->metadata; @@ -340,5 +340,7 @@ class User extends Authenticatable if ($meta) { return $meta->value; } + + return $defaultValue; } } diff --git a/tests/Unit/UserTest.php b/tests/Unit/UserTest.php index 9f139de..5ead72a 100644 --- a/tests/Unit/UserTest.php +++ b/tests/Unit/UserTest.php @@ -159,6 +159,24 @@ class UserTest extends TestCase } /** @test */ + public function user_model_get_metadata_method_accepts_a_default_value() + { + $user = factory(User::class)->create(); + + $this->assertEquals('Default value', $user->getMetadata('some_missing_key', 'Default value')); + + DB::table('user_metadata')->insert([ + 'id' => Uuid::uuid4()->toString(), + 'user_id' => $user->id, + 'key' => 'some_missing_key', + 'value' => 'Some value', + ]); + $user = $user->fresh(); + + $this->assertEquals('Some value', $user->getMetadata('some_missing_key', 'Default value')); + } + + /** @test */ public function user_have_mother_link_method() { $mother = factory(User::class)->create(); From cf1dd627e992ba7ad20b86b032c8d7261cadcc2d Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Tue, 6 Apr 2021 12:43:10 +0800 Subject: [PATCH 11/17] Add default coordinate and map zoom level for empty map data --- app/Http/Controllers/UsersController.php | 15 +++++++++++++-- resources/views/users/edit.blade.php | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 54e8b1b..d7b5662 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -115,7 +115,18 @@ class UsersController extends Controller $validTabs = ['death', 'contact_address', 'login_account']; - return view('users.edit', compact('user', 'replacementUsers', 'validTabs')); + $mapZoomLevel = 4; + $mapCenterLatitude = $user->getMetadata('cemetery_location_latitude'); + $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); + if ($mapCenterLatitude && $mapCenterLongitude) { + $mapZoomLevel = 18; + $mapCenterLatitude = $mapCenterLatitude ?: '-0.87887'; + $mapCenterLongitude = $mapCenterLongitude ?: '117.4863'; + } + + return view('users.edit', compact( + 'user', 'replacementUsers', 'validTabs', 'mapZoomLevel', 'mapCenterLatitude', 'mapCenterLongitude' + )); } /** @@ -132,7 +143,7 @@ class UsersController extends Controller $userAttributes = collect($userAttributes); foreach (['cemetery_location_name', 'cemetery_location_address', 'cemetery_location_latitude', 'cemetery_location_longitude'] as $key) { if ($userAttributes->has($key)) { - $userMeta = UserMetadata::where('key', $key)->firstOrNew(); + $userMeta = UserMetadata::where('user_id', $user->id)->where('key', $key)->firstOrNew(); if (!$userMeta->exists) { $userMeta->id = Uuid::uuid4()->toString(); $userMeta->user_id = $user->id; diff --git a/resources/views/users/edit.blade.php b/resources/views/users/edit.blade.php index 813f867..334f9a7 100644 --- a/resources/views/users/edit.blade.php +++ b/resources/views/users/edit.blade.php @@ -77,8 +77,8 @@ })(); @if (request('tab') == 'death') - var mapCenter = [{{ $user->getMetadata('cemetery_location_latitude') }}, {{ $user->getMetadata('cemetery_location_longitude') }}]; - var map = L.map('mapid').setView(mapCenter, 18); + var mapCenter = [{{ $mapCenterLatitude }}, {{ $mapCenterLongitude }}]; + var map = L.map('mapid').setView(mapCenter, {{ $mapZoomLevel }}); L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' From c8af19ee9c6843b1d8360dce77bcb1647697e7ed Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Thu, 22 Apr 2021 22:16:20 +0800 Subject: [PATCH 12/17] Add user death info page --- app/Http/Controllers/UsersController.php | 24 ++++++- resources/lang/id/user.php | 2 +- resources/views/users/death.blade.php | 78 ++++++++++++++++++++++ .../views/users/partials/action-buttons.blade.php | 5 +- routes/web.php | 1 + 5 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 resources/views/users/death.blade.php diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index d7b5662..5403c40 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -99,6 +99,26 @@ class UsersController extends Controller } /** + * Show user death info. + * + * @param \App\User $user + * @return \Illuminate\View\View + */ + public function death(User $user) + { + $mapZoomLevel = 4; + $mapCenterLatitude = $user->getMetadata('cemetery_location_latitude'); + $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); + if ($mapCenterLatitude && $mapCenterLongitude) { + $mapZoomLevel = 18; + } + $mapCenterLatitude = $mapCenterLatitude ?: '-0.87887'; + $mapCenterLongitude = $mapCenterLongitude ?: '117.4863'; + + return view('users.death', compact('user', 'mapZoomLevel', 'mapCenterLatitude', 'mapCenterLongitude')); + } + + /** * Show the form for editing the specified User. * * @param \App\User $user @@ -120,9 +140,9 @@ class UsersController extends Controller $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); if ($mapCenterLatitude && $mapCenterLongitude) { $mapZoomLevel = 18; - $mapCenterLatitude = $mapCenterLatitude ?: '-0.87887'; - $mapCenterLongitude = $mapCenterLongitude ?: '117.4863'; } + $mapCenterLatitude = $mapCenterLatitude ?: '-0.87887'; + $mapCenterLongitude = $mapCenterLongitude ?: '117.4863'; return view('users.edit', compact( 'user', 'replacementUsers', 'validTabs', 'mapZoomLevel', 'mapCenterLatitude', 'mapCenterLongitude' diff --git a/resources/lang/id/user.php b/resources/lang/id/user.php index 8c4e8a3..cbde562 100644 --- a/resources/lang/id/user.php +++ b/resources/lang/id/user.php @@ -51,7 +51,7 @@ return [ 'phone' => 'Telp.', 'manager' => 'Pengelola', - 'cemetery_location' => 'Cemetary Location', + 'cemetery_location' => 'Lokasi Makam', // Photo 'reupload_photo' => 'Upload ulang Foto', diff --git a/resources/views/users/death.blade.php b/resources/views/users/death.blade.php new file mode 100644 index 0000000..229d7c0 --- /dev/null +++ b/resources/views/users/death.blade.php @@ -0,0 +1,78 @@ +@extends('layouts.user-profile') + +@section('subtitle', __('user.death')) + +@section('user-content') +
+
+
+
+ @can('edit', $user) + {{ link_to_route('users.edit', __('app.edit'), [$user->id, 'tab' => 'death'], ['class' => 'pull-right']) }} + @endcan +

{{ __('user.death') }}

+
+ + + + + + + + + + + + + + + + + + + +
{{ __('address.location_name') }}{{ $user->getMetadata('cemetery_location_name') }}
{{ __('address.address') }}{{ $user->getMetadata('cemetery_location_address') }}
{{ __('user.dod') }}{{ $user->dod ?: $user->yod }}
{{ __('user.age') }} + @if ($user->age) + {!! $user->age_string !!} + @endif +
+
+
+
+
+

{{ __('user.cemetery_location') }}

+
+
+
+
+
+
+@endsection + + +@section('ext_css') + + + +@endsection + +@section('script') + + + +@endsection diff --git a/resources/views/users/partials/action-buttons.blade.php b/resources/views/users/partials/action-buttons.blade.php index 4b78ac1..691370a 100644 --- a/resources/views/users/partials/action-buttons.blade.php +++ b/resources/views/users/partials/action-buttons.blade.php @@ -6,4 +6,7 @@ {{ link_to_route('users.chart', trans('app.show_family_chart'), [$user->id], ['class' => Request::segment(3) == 'chart' ? 'btn btn-default active' : 'btn btn-default']) }} {{ link_to_route('users.tree', trans('app.show_family_tree'), [$user->id], ['class' => Request::segment(3) == 'tree' ? 'btn btn-default active' : 'btn btn-default']) }} {{ link_to_route('users.marriages', trans('app.show_marriages'), [$user->id], ['class' => Request::segment(3) == 'marriages' ? 'btn btn-default active' : 'btn btn-default']) }} - \ No newline at end of file + @if ($user->yod) + {{ link_to_route('users.death', trans('user.death'), [$user->id], ['class' => Request::segment(3) == 'death' ? 'btn btn-default active' : 'btn btn-default']) }} + @endif + diff --git a/routes/web.php b/routes/web.php index 7403c45..6f9bfd6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -35,6 +35,7 @@ Route::get('users/{user}/edit', 'UsersController@edit')->name('users.edit'); Route::patch('users/{user}', 'UsersController@update')->name('users.update'); Route::get('users/{user}/chart', 'UsersController@chart')->name('users.chart'); Route::get('users/{user}/tree', 'UsersController@tree')->name('users.tree'); +Route::get('users/{user}/death', 'UsersController@death')->name('users.death'); Route::patch('users/{user}/photo-upload', 'UsersController@photoUpload')->name('users.photo-upload'); Route::delete('users/{user}', 'UsersController@destroy')->name('users.destroy'); From 48a9283d29ac22e66c5cf5cac99f894224c4f1a6 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Thu, 22 Apr 2021 22:21:54 +0800 Subject: [PATCH 13/17] Add open in google map button --- resources/lang/en/app.php | 2 ++ resources/lang/id/app.php | 2 ++ resources/views/users/death.blade.php | 12 ++++++++++-- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php index 37eeb93..f454dae 100644 --- a/resources/lang/en/app.php +++ b/resources/lang/en/app.php @@ -39,4 +39,6 @@ return [ 'download' => 'Download', 'delete' => 'Delete', 'cancel' => 'Cancel', + + 'open_in_google_map' => 'Open in Google Map', ]; \ No newline at end of file diff --git a/resources/lang/id/app.php b/resources/lang/id/app.php index 425eeeb..1f1d01e 100644 --- a/resources/lang/id/app.php +++ b/resources/lang/id/app.php @@ -39,4 +39,6 @@ return [ 'download' => 'Download', 'delete' => 'Hapus', 'cancel' => 'Batal', + + 'open_in_google_map' => 'Buka di Google Map', ]; \ No newline at end of file diff --git a/resources/views/users/death.blade.php b/resources/views/users/death.blade.php index 229d7c0..d05adca 100644 --- a/resources/views/users/death.blade.php +++ b/resources/views/users/death.blade.php @@ -41,8 +41,16 @@

{{ __('user.cemetery_location') }}

-
-
+
+
From b2ae796b43cd9823434ac34c6502a22343902ebc Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Thu, 22 Apr 2021 22:30:50 +0800 Subject: [PATCH 14/17] Don't show cemetery location map if no coordinates available --- app/Http/Controllers/UsersController.php | 7 +--- resources/lang/en/app.php | 1 + resources/lang/id/app.php | 1 + resources/views/users/death.blade.php | 71 +++++++++++++++++--------------- 4 files changed, 41 insertions(+), 39 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 5403c40..7382137 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -106,14 +106,9 @@ class UsersController extends Controller */ public function death(User $user) { - $mapZoomLevel = 4; + $mapZoomLevel = 18; $mapCenterLatitude = $user->getMetadata('cemetery_location_latitude'); $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); - if ($mapCenterLatitude && $mapCenterLongitude) { - $mapZoomLevel = 18; - } - $mapCenterLatitude = $mapCenterLatitude ?: '-0.87887'; - $mapCenterLongitude = $mapCenterLongitude ?: '117.4863'; return view('users.death', compact('user', 'mapZoomLevel', 'mapCenterLatitude', 'mapCenterLongitude')); } diff --git a/resources/lang/en/app.php b/resources/lang/en/app.php index f454dae..fb6ef17 100644 --- a/resources/lang/en/app.php +++ b/resources/lang/en/app.php @@ -41,4 +41,5 @@ return [ 'cancel' => 'Cancel', 'open_in_google_map' => 'Open in Google Map', + 'data_not_available' => 'Data not available.', ]; \ No newline at end of file diff --git a/resources/lang/id/app.php b/resources/lang/id/app.php index 1f1d01e..cfbf474 100644 --- a/resources/lang/id/app.php +++ b/resources/lang/id/app.php @@ -41,4 +41,5 @@ return [ 'cancel' => 'Batal', 'open_in_google_map' => 'Buka di Google Map', + 'data_not_available' => 'Data tidak tersedia.', ]; \ No newline at end of file diff --git a/resources/views/users/death.blade.php b/resources/views/users/death.blade.php index d05adca..2ceb4f5 100644 --- a/resources/views/users/death.blade.php +++ b/resources/views/users/death.blade.php @@ -41,46 +41,51 @@

{{ __('user.cemetery_location') }}

-
- + @if ($mapCenterLatitude && $mapCenterLongitude) +
+ + @else +
{{ __('app.data_not_available') }}
+ @endif
@endsection +@if ($mapCenterLatitude && $mapCenterLongitude) + @section('ext_css') + -@section('ext_css') - - - -@endsection + + @endsection -@section('script') - + @section('script') + - -@endsection + var marker = L.marker(mapCenter).addTo(map); + + @endsection +@endif \ No newline at end of file From 5634d683753098605b159073bd2f455012454515 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Thu, 22 Apr 2021 22:41:26 +0800 Subject: [PATCH 15/17] Add leaflet config file for the map config defaut values --- .env.example | 7 ++++++- app/Http/Controllers/UsersController.php | 10 +++++----- config/leaflet.php | 8 ++++++++ 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 config/leaflet.php diff --git a/.env.example b/.env.example index 73273f2..4ebf478 100644 --- a/.env.example +++ b/.env.example @@ -35,4 +35,9 @@ PUSHER_APP_KEY= PUSHER_APP_SECRET= MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" -MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" \ No newline at end of file +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +LEAFLET_MAP_ZOOM_LEVEL=4 +LEAFLET_MAP_DETAIL_ZOOM_LEVEL=18 +LEAFLET_MAP_CENTER_LATITUDE="-0.87887" +LEAFLET_MAP_CENTER_LONGITUDE="117.4863" \ No newline at end of file diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index 7382137..b480688 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -106,7 +106,7 @@ class UsersController extends Controller */ public function death(User $user) { - $mapZoomLevel = 18; + $mapZoomLevel = config('leaflet.detail_zoom_level'); $mapCenterLatitude = $user->getMetadata('cemetery_location_latitude'); $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); @@ -130,14 +130,14 @@ class UsersController extends Controller $validTabs = ['death', 'contact_address', 'login_account']; - $mapZoomLevel = 4; + $mapZoomLevel = config('leaflet.zoom_level'); $mapCenterLatitude = $user->getMetadata('cemetery_location_latitude'); $mapCenterLongitude = $user->getMetadata('cemetery_location_longitude'); if ($mapCenterLatitude && $mapCenterLongitude) { - $mapZoomLevel = 18; + $mapZoomLevel = config('leaflet.detail_zoom_level'); } - $mapCenterLatitude = $mapCenterLatitude ?: '-0.87887'; - $mapCenterLongitude = $mapCenterLongitude ?: '117.4863'; + $mapCenterLatitude = $mapCenterLatitude ?: config('leaflet.map_center_latitude'); + $mapCenterLongitude = $mapCenterLongitude ?: config('leaflet.map_center_longitude'); return view('users.edit', compact( 'user', 'replacementUsers', 'validTabs', 'mapZoomLevel', 'mapCenterLatitude', 'mapCenterLongitude' diff --git a/config/leaflet.php b/config/leaflet.php new file mode 100644 index 0000000..91b292a --- /dev/null +++ b/config/leaflet.php @@ -0,0 +1,8 @@ + env('LEAFLET_MAP_ZOOM_LEVEL', 4), + 'detail_zoom_level' => env('LEAFLET_MAP_DETAIL_ZOOM_LEVEL', 18), + 'map_center_latitude' => env('LEAFLET_MAP_CENTER_LATITUDE', '-0.87887'), + 'map_center_longitude' => env('LEAFLET_MAP_CENTER_LONGITUDE', '117.4863'), +]; From 1ab7f9fdbab09001f9638acf8663e6214cc47056 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 30 Apr 2021 22:47:48 +0800 Subject: [PATCH 16/17] Refactor user controller on update metadata part --- app/Http/Controllers/UsersController.php | 32 ++++++++++++++++++++------------ app/User.php | 7 +++++++ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index b480688..c442bfc 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -8,6 +8,7 @@ use App\Jobs\Users\DeleteAndReplaceUser; use App\User; use App\UserMetadata; use Illuminate\Http\Request; +use Illuminate\Support\Collection; use Ramsey\Uuid\Uuid; use Storage; @@ -156,18 +157,8 @@ class UsersController extends Controller $userAttributes = $request->validated(); $user->update($userAttributes); $userAttributes = collect($userAttributes); - foreach (['cemetery_location_name', 'cemetery_location_address', 'cemetery_location_latitude', 'cemetery_location_longitude'] as $key) { - if ($userAttributes->has($key)) { - $userMeta = UserMetadata::where('user_id', $user->id)->where('key', $key)->firstOrNew(); - if (!$userMeta->exists) { - $userMeta->id = Uuid::uuid4()->toString(); - $userMeta->user_id = $user->id; - $userMeta->key = $key; - } - $userMeta->value = $userAttributes->get($key); - $userMeta->save(); - } - } + + $this->updateUserMetadata($user, $userAttributes); return redirect()->route('users.show', $user->id); } @@ -274,4 +265,21 @@ class UsersController extends Controller return $allMariageList; } + + private function updateUserMetadata(User $user, Collection $userAttributes) + { + foreach (User::METADATA_KEYS as $key) { + if ($userAttributes->has($key) == false) { + continue; + } + $userMeta = UserMetadata::where('user_id', $user->id)->where('key', $key)->firstOrNew(); + if (!$userMeta->exists) { + $userMeta->id = Uuid::uuid4()->toString(); + $userMeta->user_id = $user->id; + $userMeta->key = $key; + } + $userMeta->value = $userAttributes->get($key); + $userMeta->save(); + } + } } diff --git a/app/User.php b/app/User.php index 6798447..aaca300 100644 --- a/app/User.php +++ b/app/User.php @@ -11,6 +11,13 @@ class User extends Authenticatable { use Notifiable; + const METADATA_KEYS = [ + 'cemetery_location_name', + 'cemetery_location_address', + 'cemetery_location_latitude', + 'cemetery_location_longitude', + ]; + /** * Indicates if the IDs are auto-incrementing. * From 4b9ef3ac3481924547eb35e9a6f010bcd3220c8c Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 30 Apr 2021 22:50:56 +0800 Subject: [PATCH 17/17] Refactor updateUserMetadata method --- app/Http/Controllers/UsersController.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/Http/Controllers/UsersController.php b/app/Http/Controllers/UsersController.php index c442bfc..f825893 100644 --- a/app/Http/Controllers/UsersController.php +++ b/app/Http/Controllers/UsersController.php @@ -272,11 +272,9 @@ class UsersController extends Controller if ($userAttributes->has($key) == false) { continue; } - $userMeta = UserMetadata::where('user_id', $user->id)->where('key', $key)->firstOrNew(); + $userMeta = UserMetadata::firstOrNew(['user_id' => $user->id, 'key' => $key]); if (!$userMeta->exists) { $userMeta->id = Uuid::uuid4()->toString(); - $userMeta->user_id = $user->id; - $userMeta->key = $key; } $userMeta->value = $userAttributes->get($key); $userMeta->save();