Browse Source

User can add person cemetery data and stored to user metadata

pull/68/head
Nafies Luthfi 5 years ago
parent
commit
d6f1b71647
  1. 18
      app/Http/Controllers/UsersController.php
  2. 5
      app/Http/Requests/Users/UpdateRequest.php
  3. 12
      app/UserMetadata.php
  4. 34
      database/migrations/2021_04_04_215601_create_user_metadata_table.php
  5. 4
      resources/views/users/partials/edit_death.blade.php
  6. 47
      tests/Feature/UsersProfileTest.php

18
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);
}

5
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',
];
}

12
app/UserMetadata.php

@ -0,0 +1,12 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class UserMetadata extends Model
{
public $incrementing = false;
protected $keyType = 'string';
}

34
database/migrations/2021_04_04_215601_create_user_metadata_table.php

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUserMetadataTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('user_metadata', function (Blueprint $table) {
$table->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');
}
}

4
resources/views/users/partials/edit_death.blade.php

@ -2,3 +2,7 @@
<div class="col-md-6">{!! FormField::text('yod', ['label' => __('user.yod'), 'placeholder' => __('app.example').' 2003']) !!}</div>
<div class="col-md-6">{!! FormField::text('dod', ['label' => __('user.dod'), 'placeholder' => __('app.example').' 2003-10-17']) !!}</div>
</div>
{!! 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')]) !!}

47
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();

Loading…
Cancel
Save