diff --git a/backend/app/Admin/Controllers/ProfileController.php b/backend/app/Admin/Controllers/ProfileController.php index 5b825966..dde39f98 100755 --- a/backend/app/Admin/Controllers/ProfileController.php +++ b/backend/app/Admin/Controllers/ProfileController.php @@ -3,6 +3,7 @@ namespace App\Admin\Controllers; use App\Admin\Requests\Profile\ChangePasswordRequest; +use App\Admin\Requests\Profile\EditRequest; use App\Admin\Resources\ExpertResource; use App\Http\Controllers\Controller; use App\Traits\ApiResponse; @@ -19,6 +20,25 @@ class ProfileController extends Controller return $this->successResponse(new ExpertResource(Auth::guard('expert')->user())); } + public function edit(EditRequest $request): JsonResponse + { + $expert = $request->user('expert'); +// $expert->update($request->validated()); + + $expert->update([ + 'username' => $request->username, + 'first_name' => $request->first_name, + 'last_name' => $request->last_name, + 'email' => $expert->email, + 'national_id' => $request->national_id, + 'phone_number' => $request->phone_number, + 'province_id' => $request->province_id, + 'city_id' => $request->city_id, + ]); + + return $this->successResponse(); + } + public function changePassword(ChangePasswordRequest $request): JsonResponse { $expert = Auth::guard('expert')->user(); diff --git a/backend/app/Admin/Requests/Profile/EditRequest.php b/backend/app/Admin/Requests/Profile/EditRequest.php new file mode 100755 index 00000000..2e56b73f --- /dev/null +++ b/backend/app/Admin/Requests/Profile/EditRequest.php @@ -0,0 +1,78 @@ + + */ + public function rules(): array + { + $user = $this->user(); + return [ + 'first_name' => [ + Rule::prohibitedIf($user->kyc_status == 1), 'string', + ], + + 'last_name' => [ + Rule::prohibitedIf($user->kyc_status == 1), 'string', + ], + + 'national_id' => [ + Rule::prohibitedIf($user->kyc_status == 1), 'string', + ], + 'username' => 'string|max:255', + + 'email' => 'string|email|max:255', + 'phone_number' => 'string', + 'province_id' => 'string', + 'city_id' => 'string', + ]; + } + + public function after(): array + { + return [ + function (Validator $validator) { + $user = $this->user(); + + if (! $user) { + return; + } + + if ($user->kyc_status == 1) { + $lockedFields = [ + 'first_name', + 'last_name', + 'national_id', + ]; + + foreach ($lockedFields as $field) { + if ($this->filled($field)) { + $validator->errors()->add( + $field, + 'After KYC approval, you cannot change this field.' + ); + } + } + } + }, + ]; + } +} diff --git a/backend/app/User/Controllers/ProfileController.php b/backend/app/User/Controllers/ProfileController.php index 78f583c9..9afaa04a 100755 --- a/backend/app/User/Controllers/ProfileController.php +++ b/backend/app/User/Controllers/ProfileController.php @@ -24,17 +24,13 @@ class ProfileController extends Controller { $user = Auth::user(); - $user->update([ - 'first_name' => $request->first_name, - 'last_name' => $request->last_name, - 'national_id' => $request->national_id, - 'address' => $request->address, - 'postal_code' => $request->postal_code, - 'phone_number' => $request->phone_number, - 'province_id' => $request->province_id, - 'city_id' => $request->city_id, - 'status' => 1 - ]); + $data = $request->validated(); + + if ($user->kyc_status === 2) { + $data->safe()->except(['first_name', 'last_name' ,'national_id']); + } + + $user->update($data); return $this->successResponse(); } diff --git a/backend/app/User/Requests/Profile/EditRequest.php b/backend/app/User/Requests/Profile/EditRequest.php index 4eb93a4e..4b0e1eb4 100755 --- a/backend/app/User/Requests/Profile/EditRequest.php +++ b/backend/app/User/Requests/Profile/EditRequest.php @@ -4,6 +4,8 @@ namespace App\User\Requests\Profile; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; +use Illuminate\Validation\Validator; class EditRequest extends FormRequest { @@ -22,10 +24,32 @@ class EditRequest extends FormRequest */ public function rules(): array { + $user = $this->user(); + $isKycApproved = (int) $user->kyc_status === 2; + return [ - 'first_name' => 'required|string', - 'last_name' => 'required|string', - 'national_id' => 'required', + 'first_name' => [ + Rule::prohibitedIf($isKycApproved), + 'required', + 'string', + 'max:255', + ], + + 'last_name' => [ + Rule::prohibitedIf($isKycApproved), + 'required', + 'string', + 'max:255', + ], + + 'national_id' => [ + Rule::prohibitedIf($isKycApproved), + 'required', + 'string', + 'max:20', + Rule::unique('users', 'national_id')->ignore($user->id), + ], + 'address' => 'required', 'postal_code' => 'required', 'phone_number' => 'required', @@ -33,4 +57,16 @@ class EditRequest extends FormRequest 'city_id' => 'required', ]; } + public function after(): array + { + return [ + function (Validator $validator) { + $user = $this->user(); + + if ( $user->kyc_status === 1) { + if + } + }, + ]; + } } diff --git a/backend/database/seeders/PaymentStatusSeeder.php b/backend/database/seeders/PaymentStatusSeeder.php index 5550baae..89ece425 100644 --- a/backend/database/seeders/PaymentStatusSeeder.php +++ b/backend/database/seeders/PaymentStatusSeeder.php @@ -4,6 +4,7 @@ namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; +use Illuminate\Support\Facades\DB; class PaymentStatusSeeder extends Seeder { @@ -12,6 +13,25 @@ class PaymentStatusSeeder extends Seeder */ public function run(): void { - // + DB::table('harim_states')->insert([ + ['id' => 1, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 2, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 3, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 4, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 5, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 6, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 7, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 8, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 9, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 10, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 11, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 12, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 13, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 14, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 15, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 16, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ['id' => 17, 'name' => '', 'created_at' => now(), 'updated_at' => now(),], + ]); + } } diff --git a/backend/routes/expert.php b/backend/routes/expert.php index 50400564..a40d9dcd 100755 --- a/backend/routes/expert.php +++ b/backend/routes/expert.php @@ -4,6 +4,7 @@ use App\Admin\Controllers\AuthController; use App\Admin\Controllers\DocumentationController; use App\Admin\Controllers\ExpertManagementController; use App\Admin\Controllers\PermissionManagementController; +use App\Admin\Controllers\ProfileController; use App\Admin\Controllers\RoleManagementController; use App\Admin\Controllers\UserManagementController; @@ -71,3 +72,13 @@ Route::prefix('expert') Route::post('/{expert}', 'update')->name('update'); Route::delete('/{expert}', 'destroy')->name('destroy'); }); + +Route::prefix('profile') + ->name('profile.') + ->middleware('auth') + ->controller(ProfileController::class) + ->group(function () { + Route::get('info', 'info')->name('info'); + Route::post('edit', 'edit')->name('edit'); + Route::post('change_password', 'changePassword')->name('changePassword'); + });