From 785e48d175a8737928b1d966dbd78dfe82e518c9 Mon Sep 17 00:00:00 2001 From: Nurmuhammet Allanov Date: Sun, 23 Mar 2025 23:46:02 +0500 Subject: [PATCH] profile update --- app/Http/Controllers/ProfileController.php | 19 ++++++++++++- .../Requests/UpdateUserProfileRequest.php | 24 ++++++++++++++-- app/Models/User.php | 10 +++++++ ...3_19_172127_add_options_to_users_table.php | 28 +++++++++++++++++++ migrate.md | 2 +- 5 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 database/migrations/2025_03_19_172127_add_options_to_users_table.php diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index 355de5f..149c35b 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -12,11 +12,14 @@ class ProfileController extends Controller */ public function index(): JsonResponse { + /** @var \App\Models\User */ $user = auth()->user(); return response()->json([ 'name' => $user->name, '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 { - 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([ 'message' => __('Successfully updated profile'), diff --git a/app/Http/Requests/UpdateUserProfileRequest.php b/app/Http/Requests/UpdateUserProfileRequest.php index 8139838..08fe803 100644 --- a/app/Http/Requests/UpdateUserProfileRequest.php +++ b/app/Http/Requests/UpdateUserProfileRequest.php @@ -2,6 +2,7 @@ namespace App\Http\Requests; +use App\Repos\System\Settings\Legal\PassportRepo; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; @@ -27,14 +28,33 @@ class UpdateUserProfileRequest extends FormRequest * * @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) * - * @example Mpassword + * @example MyFcpassword */ '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'], ]; } } diff --git a/app/Models/User.php b/app/Models/User.php index 5e0b331..d4cef73 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -24,6 +24,7 @@ use Spatie\Permission\Traits\HasRoles; * @property null|\Illuminate\Support\Carbon $phone_verified_at * @property string $password * @property string $locale + * @property null|array $options * @property bool $active * @property string $remember_token * @property \Illuminate\Support\Carbon $created_at @@ -71,6 +72,7 @@ class User extends Authenticatable protected $casts = [ 'email_verified_at' => 'datetime', 'password' => 'hashed', + 'options' => 'array', ]; /** @@ -210,4 +212,12 @@ class User extends Authenticatable { 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] : ''; + } } diff --git a/database/migrations/2025_03_19_172127_add_options_to_users_table.php b/database/migrations/2025_03_19_172127_add_options_to_users_table.php new file mode 100644 index 0000000..3a2027c --- /dev/null +++ b/database/migrations/2025_03_19_172127_add_options_to_users_table.php @@ -0,0 +1,28 @@ +json('options')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('options'); + }); + } +}; diff --git a/migrate.md b/migrate.md index c5102ee..b210586 100644 --- a/migrate.md +++ b/migrate.md @@ -7,7 +7,7 @@ Schema::getColumnListing('branches') -$a = collect(Schema::getColumns('branches'))->map(fn ($column) => [ +$a = collect(Schema::getColumns('users'))->map(fn ($column) => [ 'name' => $column['name'], 'type' => ($column['nullable'] ? 'null|' : '') . dbTypeToPhp($column['type']), ])->pluck('type', 'name')