profile update

This commit is contained in:
2025-03-23 23:46:02 +05:00
parent d25227867c
commit 785e48d175
5 changed files with 79 additions and 4 deletions

View File

@@ -12,11 +12,14 @@ class ProfileController extends Controller
*/ */
public function index(): JsonResponse public function index(): JsonResponse
{ {
/** @var \App\Models\User */
$user = auth()->user(); $user = auth()->user();
return response()->json([ return response()->json([
'name' => $user->name, 'name' => $user->name,
'phone' => $user->phone, 'phone' => $user->phone,
'passport_serie' => $user->getOption('passport_serie'),
'passport_id' => $user->getOption('passport_id'),
]); ]);
} }
@@ -25,7 +28,21 @@ class ProfileController extends Controller
*/ */
public function store(UpdateUserProfileRequest $request): JsonResponse public function store(UpdateUserProfileRequest $request): JsonResponse
{ {
auth()->user()->update($request->validated()); /** @var \App\Models\User */
$user = auth()->user();
$data = [
'name' => $request->name,
'phone' => $request->phone,
'options->passport_serie' => $request->passport_serie,
'options->passport_id' => $request->passport_id,
];
if ($request->password) {
$data['password'] = $request->password;
}
$user->update($data);
return response()->json([ return response()->json([
'message' => __('Successfully updated profile'), 'message' => __('Successfully updated profile'),

View File

@@ -2,6 +2,7 @@
namespace App\Http\Requests; namespace App\Http\Requests;
use App\Repos\System\Settings\Legal\PassportRepo;
use Illuminate\Foundation\Http\FormRequest; use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
@@ -27,14 +28,33 @@ class UpdateUserProfileRequest extends FormRequest
* *
* @example 65707012 * @example 65707012
*/ */
'phone' => ['required', 'int', 'between:61000000,71999999', Rule::unique('users', 'phone')->ignore(auth()->id())], 'phone' => [
'required',
'int',
'between:61000000,71999999',
Rule::unique('users', 'phone')->ignore(auth()->id()),
],
/** /**
* Password (leave empty to save it same) * Password (leave empty to save it same)
* *
* @example Mpassword * @example MyFcpassword
*/ */
'password' => ['nullable', 'string'], 'password' => ['nullable', 'string'],
/**
* Passport serie
*
* @example I-AS
*/
'passport_serie' => ['nullable', 'string', Rule::in(array_keys(PassportRepo::values()))],
/**
* Passport id
*
* @example 100999
*/
'passport_id' => ['nullable', 'numeric', 'digits:6'],
]; ];
} }
} }

View File

@@ -24,6 +24,7 @@ use Spatie\Permission\Traits\HasRoles;
* @property null|\Illuminate\Support\Carbon $phone_verified_at * @property null|\Illuminate\Support\Carbon $phone_verified_at
* @property string $password * @property string $password
* @property string $locale * @property string $locale
* @property null|array $options
* @property bool $active * @property bool $active
* @property string $remember_token * @property string $remember_token
* @property \Illuminate\Support\Carbon $created_at * @property \Illuminate\Support\Carbon $created_at
@@ -71,6 +72,7 @@ class User extends Authenticatable
protected $casts = [ protected $casts = [
'email_verified_at' => 'datetime', 'email_verified_at' => 'datetime',
'password' => 'hashed', 'password' => 'hashed',
'options' => 'array',
]; ];
/** /**
@@ -210,4 +212,12 @@ class User extends Authenticatable
{ {
return sprintf('/resources/users/%s', $this->id); return sprintf('/resources/users/%s', $this->id);
} }
/**
* Get option from options
*/
public function getOption(string $option): null|int|string
{
return $this->options && array_key_exists($option, $this->options) ? $this->options[$option] : '';
}
} }

View File

@@ -0,0 +1,28 @@
<?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('users', function (Blueprint $table) {
$table->json('options')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('options');
});
}
};

View File

@@ -7,7 +7,7 @@
Schema::getColumnListing('branches') Schema::getColumnListing('branches')
$a = collect(Schema::getColumns('branches'))->map(fn ($column) => [ $a = collect(Schema::getColumns('users'))->map(fn ($column) => [
'name' => $column['name'], 'name' => $column['name'],
'type' => ($column['nullable'] ? 'null|' : '') . dbTypeToPhp($column['type']), 'type' => ($column['nullable'] ? 'null|' : '') . dbTypeToPhp($column['type']),
])->pluck('type', 'name') ])->pluck('type', 'name')