From d3d39dcc49ddc982114c7594adc79f60fb2a6b04 Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Mon, 3 Nov 2025 19:28:32 +0330 Subject: [PATCH 1/4] crate service and request for create user --- .../V3/Dashboard/UserManagementController.php | 403 ++++++++++++------ .../ChangeConfirmEnabelRequest.php | 32 ++ .../ChangeConfirmStatusRequest.php | 29 ++ .../UserManagement/ChangePasswordRequest.php | 29 ++ .../UserManagement/GiveRoleRequest.php | 3 +- .../UserManagement/StoreExrtraRequest.php | 42 ++ .../Dashboard/UserManagement/StoreRequest.php | 13 +- .../UserManagement/UpdateRequest.php | 6 +- .../UserManagement/UserManagementService.php | 28 ++ routes/v3.php | 11 +- 10 files changed, 437 insertions(+), 159 deletions(-) create mode 100644 app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmEnabelRequest.php create mode 100644 app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmStatusRequest.php create mode 100644 app/Http/Requests/V3/Dashboard/UserManagement/ChangePasswordRequest.php create mode 100644 app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php create mode 100644 app/Services/Cartables/UserManagement/UserManagementService.php diff --git a/app/Http/Controllers/V3/Dashboard/UserManagementController.php b/app/Http/Controllers/V3/Dashboard/UserManagementController.php index 32631968..72ebb554 100644 --- a/app/Http/Controllers/V3/Dashboard/UserManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/UserManagementController.php @@ -2,9 +2,11 @@ namespace App\Http\Controllers\V3\Dashboard; -use App\Facades\DataTable\DataTableFacade; use App\Facades\File\FileFacade; use App\Http\Controllers\Controller; +use App\Http\Requests\V3\Dashboard\UserManagement\ChangeConfirmEnabelRequest; +use App\Http\Requests\V3\Dashboard\UserManagement\ChangeConfirmStatusRequest; +use App\Http\Requests\V3\Dashboard\UserManagement\ChangePasswordRequest; use App\Http\Requests\V3\Dashboard\UserManagement\GivePermissionRequest; use App\Http\Requests\V3\Dashboard\UserManagement\GiveRoleRequest; use App\Http\Requests\V3\Dashboard\UserManagement\StoreRequest; @@ -16,10 +18,10 @@ use App\Models\EdarateShahri; use App\Models\Province; use App\Models\Role; use App\Models\User; +use App\Services\Cartables\UserManagement\UserManagementService; use Carbon\Carbon; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; -use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; @@ -27,37 +29,61 @@ class UserManagementController extends Controller { use ApiResponse; - public function index(Request $request): JsonResponse + public function index(Request $request, UserManagementService $userManagementService): JsonResponse { - Auth::user()->addActivityComplete(1038); + auth()->user()->addActivityComplete(1038); - $data = DataTableFacade::run( - User::query(), - $request, - allowedFilters: ['*'], - allowedSortings: ['*'], - ); + $data = $userManagementService->datatable($request); - return $this->successResponse($data); + return response()->json($data); } public function store(StoreRequest $request): jsonResponse { auth()->user()->addActivityComplete(1039); + User::query()->create([ + 'username' => $request->username, + 'national_code' => $request->national_code, + 'password' => Hash::make($request->password), + 'province_id' => $request->province_id, + 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::query()->find($request->province_id)->name_fa, + 'city_id' => $request->city_id, + 'city_fa' => ($request->city_id == 0) ? null : City::query()->find($request->city_id)->name_fa, + 'edarate_ostani_id' => $request->edarate_ostani_id, + 'edarate_ostani_name' => $request->edarate_ostani_id == null ? + null : + EdarateOstani::query()->find($request->edarate_ostani_id), + 'edarate_shahri_id' => $request->edarate_shahri_id, + 'edarate_shahri_name' => $request->edarate_shahri_id == null ? + null : + EdarateShahri::query()->find($request->edarate_shahri_id), + ]); + + return $this->successResponse(); + } + + public function storeExtra(StoreRequest $request): jsonResponse + { DB::transaction(function () use ($request) { + auth()->user()->addActivityComplete(1039); + $user = User::query()->create([ 'username' => $request->username, 'national_code' => $request->national_code, 'password' => Hash::make($request->password), - 'province_id' => $request->province_id ?: null, - 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::find($request->province_id)->name_fa, - 'city_id' => $request->city_id ?: null, - 'city_fa' => ($request->city_id == 0) ? null : City::find($request->city_id)->name_fa, + 'province_id' => $request->province_id, + 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::query()->find($request->province_id)->name_fa, + 'city_id' => $request->city_id, + 'city_fa' => ($request->city_id == 0) ? null : City::query()->find($request->city_id)->name_fa, 'edarate_ostani_id' => $request->edarate_ostani_id, - 'edarate_ostani_name' => EdarateOstani::query()->find($request->edarate_ostani_name), + 'edarate_ostani_name' => $request->edarate_ostani_id == null ? + null : + EdarateOstani::query()->find($request->edarate_ostani_id), 'edarate_shahri_id' => $request->edarate_shahri_id, - 'edarate_shahri_name' => EdarateShahri::query()->find($request->edarate_shahri_name), + 'edarate_shahri_name' => $request->edarate_shahri_id == null ? + null : + EdarateShahri::query()->find($request->edarate_shahri_id), 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'position' => $request->position, @@ -65,147 +91,157 @@ class UserManagementController extends Controller 'degree' => $request->degree, 'major' => $request->major, ]); - $user->avatar = FileFacade::save($request->file('avatar'), "avatar/{$user->id}"); + $user->avatar = $request->has('avatar') ? + FileFacade::save($request->avatar, "user/{$user->id}") : + null; }); return $this->successResponse(); } - public function show(User $user) + public function show(User $user): JsonResponse { - $user = User::where('id', $user->id)->with(['roles', 'permissions'])->get(); - - return $this->successResponse($user); + return $this->successResponse($user->with(['roles', 'permissions'])->get()); } + /** + * @throws \Throwable + */ public function update(UpdateRequest $request, User $user): JsonResponse { - auth()->user()->addActivityComplete(1040); DB::transaction(function () use ($request, $user) { + auth()->user()->addActivityComplete(1040); - $user->update([ + $data = [ 'username' => $request->username, 'national_code' => $request->national_code, - 'province_id' => $request->province_id ?: null, - 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::find($request->province_id)->name_fa, - 'city_id' => $request->city_id ?: null, - 'city_fa' => ($request->city_id == 0) ? null : City::find($request->city_id)->name_fa, + 'province_id' => $request->province_id, + 'province_fa' => ($request->province_id == 0) ? 'ستاد' : Province::query()->find($request->province_id)->name_fa, + 'city_id' => $request->city_id, + 'city_fa' => ($request->city_id == 0) ? null : City::query()->find($request->city_id)->name_fa, 'edarate_ostani_id' => $request->edarate_ostani_id, - 'edarate_ostani_name' => EdarateOstani::query()->find($request->edarate_ostani_name), + 'edarate_ostani_name' => $request->edarate_ostani_id == null ? + null : + EdarateOstani::query()->find($request->edarate_ostani_id), 'edarate_shahri_id' => $request->edarate_shahri_id, - 'edarate_shahri_name' => EdarateShahri::query()->find($request->edarate_shahri_name), + 'edarate_shahri_name' => $request->edarate_shahri_id == null ? + null : + EdarateShahri::query()->find($request->edarate_shahri_id), 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'position' => $request->position, 'mobile' => $request->mobile, 'degree' => $request->degree, 'major' => $request->major, - ]); + ]; if ($request->has('avatar')) { - FileFacade::delete($user->avatar, true); - $user['avatar'] = FileFacade::save($request->file('avatar'), "avatar/{$user->id}/"); + if ($user->avatar) { + FileFacade::delete($user->avatar, true); + } + $data['avatar'] = FileFacade::save($request->file('avatar'), "avatar/{$user->id}/"); } - if (! is_null($request->password)) { - $user->password = Hash::make($request->password); - } - - if (! is_null($request->permissions)) { - $user->syncPermissions(explode(',', $request->permissions)); - } - - if ($request->filled('roles')) { - $user->syncRoles($request->roles); - } - - $user->save(); + $user->update($data); }); return $this->successResponse(); } - public function destroy(User $user) + public function destroy(User $user): JsonResponse { - $user->delete(); + DB::transaction(function () use ($user) { + if ($user->avatar) { + FileFacade::delete($user->avatar, true); + } + if ($user->photo) { + FileFacade::delete($user->photo, true); + } + + $user->roles()->detach(); + $user->permissions()->detach(); + $user->delete(); + }); + + return $this->successResponse(); + } + + public function changePassword(User $user, ChangePasswordRequest $request): JsonResponse + { + $user->update([ + 'password' => Hash::make($request->new_password), + ]); return $this->successResponse(); } public function givePermissionsTo(GivePermissionRequest $request, User $user): JsonResponse { + $user->syncPermissions($request->permissions); - $user->givePermissionTo($request->permissions); - - return $this->successResponse($user->load('permissions')); + return $this->successResponse(); } - public function givePermissionsToRole(GivePermissionRequest $request, Role $role): JsonResponse + public function giveRoleToUser(GiveRoleRequest $request, User $user): JsonResponse { - $permissionId = $request->permissions; - $role->syncPermissions($permissionId); + $user->syncRoles($request->role); - return $this->successResponse($role->load('permissions')); + return $this->successResponse(); } - public function giveRolesToUser(GiveRoleRequest $request, User $user): JsonResponse + public function changeConfirmedStatus(ChangeConfirmStatusRequest $request, User $user): JsonResponse { - $roles = $request->roles; - - $user->assignRole($roles); - - return $this->successResponse($user->load('roles')); - } - - public function getUserPermissions(): JsonResponse - { - $userPermissions = Auth::user()->getUserPermissions(); - - return $this->successResponse($userPermissions); - } - - public function activityReport() - { - return view('version2.dashboard_pages.user_management.activity_report'); - } - - public function userActivityLogs() - { - return response()->json([ - 'status' => 'succeed', - 'message' => '', - 'data' => auth()->user()->activityLogs, - ], 200); - } - - public function changeConfirmedStatus(Request $request) - { - $request->validate([ - 'user_ids' => 'required|regex:/^(\d+)(,\d+)*$/', - 'confirm' => 'required|in:0,1', - ]); - - $user_ids = explode(',', $request->user_ids); - - User::whereIn('id', $user_ids)->update([ + $user->update([ 'confirmed' => $request->confirm, ]); return $this->successResponse(); - } - public function changePassword(User $user, Request $request) + public function changeUserEnabeld(ChangeConfirmEnabelRequest $request, User $user): JsonResponse { - $validData = $request->validate([ - 'password' => 'required|string|min:8|confirmed', + $user->update([ + 'enabled' => $request->enabled, ]); - $user->password = Hash::make($request->password); - $user->save(); return $this->successResponse(); } + // public function userActivityLogs() + // { + // return response()->json([ + // 'status' => 'succeed', + // 'message' => '', + // 'data' => auth()->user()->activityLogs, + // ], 200); + // } + + // public function userPermission($id) + // { + // $user = User::find($id); + // + // return response()->json([ + // 'message' => 'success', + // 'data' => $user->permissions, + // ]); + // } + + // public function assignPermission(Request $request, User $user) + // { + // if (auth()->user()) { + // auth()->user()->addActivityComplete(1042); + // } + // $permissions = explode(',', $request->permissions); + // if (! $permissions == null) { + // $user->syncPermissions($permissions); + // } + // + // return response()->json([ + // 'message' => 'status', + // 'data' => User::where('id', $user->id)->with(['permissions'])->get(), + // ]); + // } + public function getUserSummaryReport(Request $request, User $user) { $request->fromDate = $request->fromDate ? $request->fromDate.' 00:00:00' : Carbon::now()->subDays(30)->format('Y-m-d 00:00:00'); @@ -498,46 +534,137 @@ class UserManagementController extends Controller return View('word.user-activity-individual', compact('data')); } - public function userPermission($id) + public function indexShow(Request $request) { - $user = User::find($id); + $request->fromDate = $request->fromDate ? $request->fromDate.' 00:00:00' : Carbon::now()->format('Y-m-d 00:00:00'); + $request->toDate = $request->toDate ? $request->toDate.' 23:59:59' : Carbon::now()->format('Y-m-d 23:59:59'); + + $roles_must_show_report = Role::where('for_report', 1)->get(); + + $data = []; + + $users_activity = []; + + foreach ($roles_must_show_report as $key => $value) { + $ids_list = ''; + $users = $value->users()->select('id')->get()->toArray(); + foreach ($users as $index => $item) { + if (! $index) { + $ids_list = $item['id']; + } else { + $ids_list .= ','.$item['id']; + } + } + $temp_sql = " + SELECT sum(majmoe) AS activity FROM (SELECT *, + COUNT(quantity) AS majmoe + FROM ( + SELECT *, + COUNT(*) AS quantity + FROM user_activity_logs + WHERE (created_at between '{$request->fromDate}' and '{$request->toDate}') and user_id IN(".$ids_list.') + GROUP BY yy, + mm, + dd, + hh, + user_id + ) user_activity_by_hour_and_ + GROUP BY user_id) AS calculated_table;'; + + $activity = DB::select($temp_sql)[0]->activity; + $users_activity[] = [ + 'activity_time' => $ids_list ? $activity : null, + 'average' => round(($ids_list ? $activity : 0) / count($users), 2), + 'group_name' => $value->name_fa, + 'user_count' => count($users), + 'is_static' => 0, + 'group_id' => $value->id, + ]; + } + + $country_group_ids_list = ''; + $country_group_user_quantity = 0; + foreach (Role::whereIn('id', $this->country_group_ids_list_array)->get() as $key => $value) { + $users = $value->users()->select('id')->get(); + $country_group_user_quantity += count($users); + foreach ($users as $index => $item) { + if (! $key) { + $country_group_ids_list = $item->id; + } else { + $country_group_ids_list .= ','.$item->id; + } + } + } + + $country_temp_sql = " + SELECT sum(majmoe) AS activity FROM (SELECT *, + COUNT(quantity) AS majmoe + FROM ( + SELECT *, + COUNT(*) AS quantity + FROM user_activity_logs + WHERE (created_at between '{$request->fromDate}' and '{$request->toDate}') and user_id IN(".$country_group_ids_list.') + GROUP BY yy, + mm, + dd, + hh, + user_id + ) user_activity_by_hour_and_ + GROUP BY user_id) AS calculated_table;'; + + $users_activity[] = [ + 'activity_time' => $country_group_ids_list ? DB::select($country_temp_sql)[0]->activity : null, + 'average' => round(($country_group_ids_list ? DB::select($country_temp_sql)[0]->activity : 0) / $country_group_user_quantity, 2), + 'group_name' => 'کشوری', + 'user_count' => $country_group_user_quantity, + 'is_static' => 1, + 'group_id' => 3, + ]; + + $organization_group_ids_list = ''; + $organization_group_user_quantity = 0; + foreach (Role::whereIn('id', $this->organization_group_ids_list_array)->get() as $key => $value) { + $users = $value->users()->select('id')->get(); + $organization_group_user_quantity += count($users); + foreach ($users as $index => $item) { + if (! $key) { + $organization_group_ids_list = $item->id; + } else { + $organization_group_ids_list .= ','.$item->id; + } + } + } + + $organization_temp_sql = " + SELECT sum(majmoe) AS activity FROM (SELECT *, + COUNT(quantity) AS majmoe + FROM ( + SELECT *, + COUNT(*) AS quantity + FROM user_activity_logs + WHERE (created_at between '{$request->fromDate}' and '{$request->toDate}') and user_id IN(".$organization_group_ids_list.') + + GROUP BY yy, + mm, + dd, + hh, + user_id + ) user_activity_by_hour_and_ + GROUP BY user_id) AS calculated_table;'; + + $users_activity[] = [ + 'activity_time' => $organization_group_ids_list ? DB::select($organization_temp_sql)[0]->activity : null, + 'average' => round(($organization_group_ids_list ? DB::select($organization_temp_sql)[0]->activity : 0) / $organization_group_user_quantity, 2), + 'group_name' => 'سازمانی', + 'user_count' => $organization_group_user_quantity, + 'is_static' => 2, + 'group_id' => 3, + ]; return response()->json([ - 'message' => 'success', - 'data' => $user->permissions, - ]); - } - - public function assignPermission(Request $request, User $user) - { - if (auth()->user()) { - auth()->user()->addActivityComplete(1042); - } - $permissions = explode(',', $request->permissions); - if (! $permissions == null) { - $user->syncPermissions($permissions); - } - - return response()->json([ - 'message' => 'status', - 'data' => User::where('id', $user->id)->with(['permissions'])->get(), - ]); - } - - public function changeUserEnabeld(User $user) - { - if (Auth::user()->checkUserHasPermission('full-user-management')) { - $user->enabled = ! $user->enabled; - - return $this->successResponse($user); - } elseif (Auth::user()->checkUserHasPermission('limited-user-management') && Auth::user()->province_id == $user->province_id) { - $user->enabled = ! $user->enabled; - - return $this->successResponse(); - } else { - return response()->json([ - 'message' => 'Forbidden', - ], 403); - } + 'status' => 'succeed', + 'message' => '', + 'data' => $users_activity, + ], 200); } } diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmEnabelRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmEnabelRequest.php new file mode 100644 index 00000000..52ec36bd --- /dev/null +++ b/app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmEnabelRequest.php @@ -0,0 +1,32 @@ +user(); + + return $user->hasPermissionTo('full-user-management') || + ($user->hasPermissionTo('limited-user-management') && $this->province_id == $user->province_id); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules(): array + { + return [ + 'enabled' => 'required|in:0,1', + ]; + } +} diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmStatusRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmStatusRequest.php new file mode 100644 index 00000000..accbbb4d --- /dev/null +++ b/app/Http/Requests/V3/Dashboard/UserManagement/ChangeConfirmStatusRequest.php @@ -0,0 +1,29 @@ + + */ + public function rules(): array + { + return [ + 'confirm' => 'required|in:0,1', + ]; + } +} diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/ChangePasswordRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/ChangePasswordRequest.php new file mode 100644 index 00000000..36f91819 --- /dev/null +++ b/app/Http/Requests/V3/Dashboard/UserManagement/ChangePasswordRequest.php @@ -0,0 +1,29 @@ + + */ + public function rules(): array + { + return [ + 'password' => 'required|string|confirmed|min:8', + ]; + } +} diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/GiveRoleRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/GiveRoleRequest.php index 6826799a..de1735cc 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/GiveRoleRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/GiveRoleRequest.php @@ -23,8 +23,7 @@ class GiveRoleRequest extends FormRequest public function rules(): array { return [ - 'roles' => 'array', - 'roles.*' => 'integer|exists:permissions,id', + 'role' => 'required|exists:roles,id', ]; } } diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php new file mode 100644 index 00000000..2663aeb0 --- /dev/null +++ b/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php @@ -0,0 +1,42 @@ + + */ + public function rules(): array + { + return [ + 'edarate_ostani_id' => 'nullable|exists:edarate_ostanis,id|required_without:edarate_shahri_id', + 'edarate_shahri_id' => 'nullable|exists:edarate_shahris,id|required_without:edarate_ostani_id', + 'province_id' => 'required|exists:provinces,id', + 'city_id' => 'exists:cities,id', + 'username' => 'required|unique:users,username', + 'national_code' => 'unique:users,national_code', + 'password' => 'required|string|confirmed|min:8', + 'first_name' => 'required|string', + 'last_name' => 'required|string', + 'position' => 'string', + 'mobile' => 'required|string', + 'degree' => 'string', + 'major' => 'string', + 'avatar' => 'required|file|mimes:pdf,jpg,jpeg,png', + ]; + } +} diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php index be9e5a1a..e6b6c29d 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php @@ -23,20 +23,13 @@ class StoreRequest extends FormRequest public function rules(): array { return [ + 'edarate_ostani_id' => 'nullable|exists:edarate_ostanis,id|required_without:edarate_shahri_id', + 'edarate_shahri_id' => 'nullable|exists:edarate_shahris,id|required_without:edarate_ostani_id', 'province_id' => 'required|exists:provinces,id', - 'edarate_ostani_id' => 'exists:edarate_ostanis,id', 'city_id' => 'exists:cities,id', - 'edarate_shahri_id' => 'exists:edarate_shahris,id', 'username' => 'required|unique:users,username', 'national_code' => 'unique:users,national_code', - 'password' => 'required|min:8', - 'first_name' => 'string', - 'last_name' => 'string', - 'position' => 'string', - 'mobile' => 'string', - 'degree' => 'string', - 'major' => 'string', - 'avatar' => 'required|file|mimes:pdf,jpg,jpeg,png', + 'password' => 'required|string|confirmed|min:8', ]; } } diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php index 82a041fd..d41eea2e 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php @@ -25,12 +25,10 @@ class UpdateRequest extends FormRequest { return [ 'province_id' => 'required|exists:provinces,id', - 'edarate_ostani_id' => 'exists:edarate_ostanis,id', - 'city_id' => 'exists:cities,id', - 'edarate_shahri_id' => 'exists:edarate_shahris,id', + 'edarate_ostani_id' => 'nullable|exists:edarate_ostanis,id|required_without:edarate_shahri_id', + 'edarate_shahri_id' => 'nullable|exists:edarate_shahris,id|required_without:edarate_ostani_id', 'city_id' => 'exists:cities,id', 'username' => [Rule::unique('users', 'username')->ignore($this->user->id)], 'national_code' => ['required', Rule::unique('users', 'national_code')->ignore($this->user->id)], - 'password' => 'min:8', 'first_name' => 'required|string', 'last_name' => 'required|string', 'position' => 'string', diff --git a/app/Services/Cartables/UserManagement/UserManagementService.php b/app/Services/Cartables/UserManagement/UserManagementService.php new file mode 100644 index 00000000..36f02645 --- /dev/null +++ b/app/Services/Cartables/UserManagement/UserManagementService.php @@ -0,0 +1,28 @@ +hasPermissionTo('full-user-management') ? + User::query() : + User::query()->where('province_id', '=', $user->province_id); + + return DataTableFacade::run( + $query, + $request, + allowedFilters: ['*'], + allowedSortings: ['*'], + allowedSelects: ['id', 'username', 'status', 'province_id', 'province_fa', 'city_id', 'city_fa', 'first_name', 'last_name', 'mobile', 'position', 'major', 'setad_id', 'last_login', 'roles', 'edarate_shahri_id', 'edarate_shahri_name', 'national_code', 'name', 'enabled', 'email', + 'edarate_ostani_id', 'edarate_ostani_name', 'degree', 'confirmed', 'checked', 'updated_at', 'photo', 'created_at'], + ); + } +} diff --git a/routes/v3.php b/routes/v3.php index 3d98b316..d93ff295 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -590,23 +590,24 @@ Route::prefix('user_management') Route::get('/', 'index')->name('index')->middleware( 'permission:full-user-management|limited-user-management'); Route::post('/', 'store')->name('store'); + Route::post('/store_extra', 'storeExtra')->name('storeExtra'); Route::get('/{user}', 'show')->name('show'); Route::post('/{user}', 'update')->name('update'); Route::delete('/{user}', 'destroy')->name('destroy'); + Route::post('/change_password/{user}', 'changePassword')->name('changePassword'); Route::post('/give_permissions_to', 'givePermissionsTo')->name('givePermissionsTo'); - Route::post('/give_permissions_to_role', 'givePermissionsToRole')->name('givePermissionsToRole'); - Route::post('/give_roles_to_user','giveRolesToUser')->name('giveRolesToUser'); + Route::post('/give_role_to_user','giveRoleToUser')->name('giveRoleToUser'); + Route::post('/change_confirmed_status', 'changeConfirmedStatus')->name('changeConfirmedStatus'); + Route::post('/change_user_enabeld','changeUserEnabeld')->name('changeUserEnabeld')->middleware( + 'permission:full-user-management|limited-user-management'); Route::get('/activity_report', 'activityReport')->name('activityReport'); Route::get('/userActivityLogs', 'userActivityLogs')->name('userActivityLogs'); - Route::post('/change_confirmed_status', 'changeConfirmedStatus')->name('changeConfirmedStatus'); Route::get('/give_permissions_to', 'givePermissionsTo')->name('givePermissionsTo'); Route::get('/get_user_permissions', 'getUserPermissions')->name('getUserPermissions'); Route::get('/get_user_summary_report', 'getUserSummaryReport')->name('getUserSummaryReport'); Route::get('/print_group', 'printGroup')->name('printGroup'); Route::get('/user_permission', 'userPermission')->name('userPermission'); Route::get('/assign_permission', 'assignPermission')->name('assignPermission'); - Route::post('/change_user_enabeld','changeUserEnabeld')->name('changeUserEnabeld'); - Route::post('/change_password/{user}', 'changePassword')->name('changePassword'); }); Route::prefix('role') ->name('role.') From b22a24637c83091ff5453eae0b90d0be4f94fdbf Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Tue, 4 Nov 2025 17:33:55 +0330 Subject: [PATCH 2/4] updade and fix service and request for create user --- .env.example | 6 ++- .../Harim/PanjareVahedController.php | 2 +- .../V3/Dashboard/UserManagementController.php | 44 +++++++++++++------ .../UserManagement/StoreExrtraRequest.php | 23 +++++++--- .../Dashboard/UserManagement/StoreRequest.php | 21 +++++++-- .../UserManagement/UpdateRequest.php | 17 ++++++- .../UserManagement/UserManagementService.php | 2 +- resources/lang/fa/validation.php | 4 +- routes/v3.php | 14 +++--- 9 files changed, 97 insertions(+), 36 deletions(-) diff --git a/.env.example b/.env.example index af200645..5a6b45c4 100644 --- a/.env.example +++ b/.env.example @@ -93,4 +93,8 @@ HARIM_NEED_GUARANTEE_LETTER_USERNAME= BACKUP_TARGET_DIR= BACKUP_USER= -BACKUP_PASSWORD= \ No newline at end of file +BACKUP_PASSWORD= + + +HARIM_ENCRYPTION_KEY="TestKey" +HARIM_ENCRYPTION_IV="1111000011110101" diff --git a/app/Http/Controllers/V3/Dashboard/Harim/PanjareVahedController.php b/app/Http/Controllers/V3/Dashboard/Harim/PanjareVahedController.php index 75af3678..cc177988 100644 --- a/app/Http/Controllers/V3/Dashboard/Harim/PanjareVahedController.php +++ b/app/Http/Controllers/V3/Dashboard/Harim/PanjareVahedController.php @@ -22,7 +22,7 @@ class PanjareVahedController extends Controller public function receiveNewRequest(ReceiveNewRequest $request): JsonResponse { $iv = config('harim_web_services.Harim_Info.iv'); - $keyString = config('harim_web_services.Harim_Info.keyString'); + $keyString = config('harim_web_services.Harim_Info.key'); $key = hash('sha256',$keyString, true); diff --git a/app/Http/Controllers/V3/Dashboard/UserManagementController.php b/app/Http/Controllers/V3/Dashboard/UserManagementController.php index 72ebb554..a3514002 100644 --- a/app/Http/Controllers/V3/Dashboard/UserManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/UserManagementController.php @@ -24,6 +24,7 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Hash; +use Throwable; class UserManagementController extends Controller { @@ -38,7 +39,7 @@ class UserManagementController extends Controller return response()->json($data); } - public function store(StoreRequest $request): jsonResponse + public function limitStore(StoreRequest $request): jsonResponse { auth()->user()->addActivityComplete(1039); @@ -53,17 +54,20 @@ class UserManagementController extends Controller 'edarate_ostani_id' => $request->edarate_ostani_id, 'edarate_ostani_name' => $request->edarate_ostani_id == null ? null : - EdarateOstani::query()->find($request->edarate_ostani_id), + EdarateOstani::query()->find($request->edarate_ostani_id)->name_fa, 'edarate_shahri_id' => $request->edarate_shahri_id, 'edarate_shahri_name' => $request->edarate_shahri_id == null ? null : - EdarateShahri::query()->find($request->edarate_shahri_id), + EdarateShahri::query()->find($request->edarate_shahri_id)->name_fa, ]); return $this->successResponse(); } - public function storeExtra(StoreRequest $request): jsonResponse + /** + * @throws Throwable + */ + public function fullStore(StoreRequest $request): jsonResponse { DB::transaction(function () use ($request) { auth()->user()->addActivityComplete(1039); @@ -79,11 +83,11 @@ class UserManagementController extends Controller 'edarate_ostani_id' => $request->edarate_ostani_id, 'edarate_ostani_name' => $request->edarate_ostani_id == null ? null : - EdarateOstani::query()->find($request->edarate_ostani_id), + EdarateOstani::query()->find($request->edarate_ostani_id)->name_fa, 'edarate_shahri_id' => $request->edarate_shahri_id, 'edarate_shahri_name' => $request->edarate_shahri_id == null ? null : - EdarateShahri::query()->find($request->edarate_shahri_id), + EdarateShahri::query()->find($request->edarate_shahri_id)->name_fa, 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'position' => $request->position, @@ -91,6 +95,7 @@ class UserManagementController extends Controller 'degree' => $request->degree, 'major' => $request->major, ]); + $user->avatar = $request->has('avatar') ? FileFacade::save($request->avatar, "user/{$user->id}") : null; @@ -101,11 +106,22 @@ class UserManagementController extends Controller public function show(User $user): JsonResponse { - return $this->successResponse($user->with(['roles', 'permissions'])->get()); + return $this->successResponse($user); + } + + public function userPermissions(User $user): JsonResponse + { + $role = $user->roles()->pluck('name')->first(); + $permissions = $user->getAllPermissions()->pluck('name'); + + return $this->successResponse([ + 'role' => $role, + 'permissions' => $permissions, + ]); } /** - * @throws \Throwable + * @throws Throwable */ public function update(UpdateRequest $request, User $user): JsonResponse { @@ -122,11 +138,11 @@ class UserManagementController extends Controller 'edarate_ostani_id' => $request->edarate_ostani_id, 'edarate_ostani_name' => $request->edarate_ostani_id == null ? null : - EdarateOstani::query()->find($request->edarate_ostani_id), + EdarateOstani::query()->find($request->edarate_ostani_id)->name_fa, 'edarate_shahri_id' => $request->edarate_shahri_id, 'edarate_shahri_name' => $request->edarate_shahri_id == null ? null : - EdarateShahri::query()->find($request->edarate_shahri_id), + EdarateShahri::query()->find($request->edarate_shahri_id)->name_fa, 'first_name' => $request->first_name, 'last_name' => $request->last_name, 'position' => $request->position, @@ -139,7 +155,7 @@ class UserManagementController extends Controller if ($user->avatar) { FileFacade::delete($user->avatar, true); } - $data['avatar'] = FileFacade::save($request->file('avatar'), "avatar/{$user->id}/"); + $data['avatar'] = FileFacade::save($request->file('avatar'), "avatars/{$user->id}/"); } $user->update($data); @@ -148,15 +164,15 @@ class UserManagementController extends Controller return $this->successResponse(); } + /** + * @throws Throwable + */ public function destroy(User $user): JsonResponse { DB::transaction(function () use ($user) { if ($user->avatar) { FileFacade::delete($user->avatar, true); } - if ($user->photo) { - FileFacade::delete($user->photo, true); - } $user->roles()->detach(); $user->permissions()->detach(); diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php index 2663aeb0..f7b6b85b 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php @@ -4,6 +4,7 @@ namespace App\Http\Requests\V3\Dashboard\UserManagement; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class StoreExrtraRequest extends FormRequest { @@ -23,17 +24,29 @@ class StoreExrtraRequest extends FormRequest public function rules(): array { return [ - 'edarate_ostani_id' => 'nullable|exists:edarate_ostanis,id|required_without:edarate_shahri_id', - 'edarate_shahri_id' => 'nullable|exists:edarate_shahris,id|required_without:edarate_ostani_id', + 'edarate_ostani_id' => [ + 'nullable', + 'integer', + Rule::exists('edarate_ostani', 'id'), + Rule::prohibitedIf(fn () => filled($this->input('edarate_shahri_id'))), + Rule::requiredIf(fn () => blank($this->input('edarate_shahri_id'))), + ], + 'edarate_shahri_id' => [ + 'nullable', + 'integer', + Rule::exists('edarate_shahri', 'id'), + Rule::prohibitedIf(fn () => filled($this->input('edarate_ostani_id'))), + Rule::requiredIf(fn () => blank($this->input('edarate_ostani_id'))), + ], 'province_id' => 'required|exists:provinces,id', 'city_id' => 'exists:cities,id', 'username' => 'required|unique:users,username', - 'national_code' => 'unique:users,national_code', - 'password' => 'required|string|confirmed|min:8', + 'national_code' => 'unique:users,national_code|digits:10', + 'password' => 'required|confirmed|min:8', 'first_name' => 'required|string', 'last_name' => 'required|string', 'position' => 'string', - 'mobile' => 'required|string', + 'mobile' => 'required|regex:/^09\d{9}$/|numeric|digits:11', 'degree' => 'string', 'major' => 'string', 'avatar' => 'required|file|mimes:pdf,jpg,jpeg,png', diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php index e6b6c29d..4c3583d0 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php @@ -4,6 +4,7 @@ namespace App\Http\Requests\V3\Dashboard\UserManagement; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; +use Illuminate\Validation\Rule; class StoreRequest extends FormRequest { @@ -23,13 +24,25 @@ class StoreRequest extends FormRequest public function rules(): array { return [ - 'edarate_ostani_id' => 'nullable|exists:edarate_ostanis,id|required_without:edarate_shahri_id', - 'edarate_shahri_id' => 'nullable|exists:edarate_shahris,id|required_without:edarate_ostani_id', + 'edarate_ostani_id' => [ + 'nullable', + 'integer', + Rule::exists('edarate_ostani', 'id'), + Rule::prohibitedIf(fn () => filled($this->input('edarate_shahri_id'))), + Rule::requiredIf(fn () => blank($this->input('edarate_shahri_id'))), + ], + 'edarate_shahri_id' => [ + 'nullable', + 'integer', + Rule::exists('edarate_shahri', 'id'), + Rule::prohibitedIf(fn () => filled($this->input('edarate_ostani_id'))), + Rule::requiredIf(fn () => blank($this->input('edarate_ostani_id'))), + ], 'province_id' => 'required|exists:provinces,id', 'city_id' => 'exists:cities,id', 'username' => 'required|unique:users,username', - 'national_code' => 'unique:users,national_code', - 'password' => 'required|string|confirmed|min:8', + 'national_code' => 'unique:users,national_code|digits:10', + 'password' => 'required|confirmed|min:8', ]; } } diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php index d41eea2e..8dbbc53b 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php @@ -25,8 +25,21 @@ class UpdateRequest extends FormRequest { return [ 'province_id' => 'required|exists:provinces,id', - 'edarate_ostani_id' => 'nullable|exists:edarate_ostanis,id|required_without:edarate_shahri_id', - 'edarate_shahri_id' => 'nullable|exists:edarate_shahris,id|required_without:edarate_ostani_id', 'city_id' => 'exists:cities,id', + 'edarate_ostani_id' => [ + 'nullable', + 'integer', + Rule::exists('edarate_ostani', 'id'), + Rule::prohibitedIf(fn () => filled($this->input('edarate_shahri_id'))), + Rule::requiredIf(fn () => blank($this->input('edarate_shahri_id'))), + ], + 'edarate_shahri_id' => [ + 'nullable', + 'integer', + Rule::exists('edarate_shahri', 'id'), + Rule::prohibitedIf(fn () => filled($this->input('edarate_ostani_id'))), + Rule::requiredIf(fn () => blank($this->input('edarate_ostani_id'))), + ], + 'city_id' => 'exists:cities,id', 'username' => [Rule::unique('users', 'username')->ignore($this->user->id)], 'national_code' => ['required', Rule::unique('users', 'national_code')->ignore($this->user->id)], 'first_name' => 'required|string', diff --git a/app/Services/Cartables/UserManagement/UserManagementService.php b/app/Services/Cartables/UserManagement/UserManagementService.php index 36f02645..dbd0f56f 100644 --- a/app/Services/Cartables/UserManagement/UserManagementService.php +++ b/app/Services/Cartables/UserManagement/UserManagementService.php @@ -21,7 +21,7 @@ class UserManagementService $request, allowedFilters: ['*'], allowedSortings: ['*'], - allowedSelects: ['id', 'username', 'status', 'province_id', 'province_fa', 'city_id', 'city_fa', 'first_name', 'last_name', 'mobile', 'position', 'major', 'setad_id', 'last_login', 'roles', 'edarate_shahri_id', 'edarate_shahri_name', 'national_code', 'name', 'enabled', 'email', + allowedSelects: ['id', 'username', 'province_id', 'province_fa', 'city_id', 'city_fa', 'first_name', 'last_name', 'mobile', 'position', 'major', 'setad_id', 'last_login', 'edarate_shahri_id', 'edarate_shahri_name', 'national_code', 'name', 'enabled', 'email', 'edarate_ostani_id', 'edarate_ostani_name', 'degree', 'confirmed', 'checked', 'updated_at', 'photo', 'created_at'], ); } diff --git a/resources/lang/fa/validation.php b/resources/lang/fa/validation.php index 1907f5e7..d58a36b0 100644 --- a/resources/lang/fa/validation.php +++ b/resources/lang/fa/validation.php @@ -12,7 +12,7 @@ return [ | as the size rules. Feel free to tweak each of these messages here. | */ - + 'prohibited' => ':attribute در این حالت مجاز نیست.', "accepted" => ":attribute باید پذیرفته شده باشد.", "active_url" => "آدرس :attribute معتبر نیست", "after" => ":attribute باید بعد از :date باشد.", @@ -286,5 +286,7 @@ return [ 'forbidden_area' => 'محدوده ممنوعه', 'forbidden_area.type' => 'نوع محدوده محدوده', 'forbidden_area.coordinates' => 'مختصات محدوده ممنوعه', + 'edarate_ostani_id' => 'اداره استانی', + 'edarate_shahri_id' => ' اداره شهری' ], ]; diff --git a/routes/v3.php b/routes/v3.php index d93ff295..fede5047 100644 --- a/routes/v3.php +++ b/routes/v3.php @@ -586,19 +586,19 @@ Route::prefix('user_management') ->name('user_management.') ->controller(UserManagementController::class) ->group(function () { -// Route::get('/', 'index')->name('index'); Route::get('/', 'index')->name('index')->middleware( 'permission:full-user-management|limited-user-management'); - Route::post('/', 'store')->name('store'); - Route::post('/store_extra', 'storeExtra')->name('storeExtra'); + Route::post('/limit_store', 'limitStore')->name('limitStore'); + Route::post('/full_store', 'fullStore')->name('fullStore'); Route::get('/{user}', 'show')->name('show'); + Route::get('/user_permissions/{user}', 'userPermissions')->name('userPermissions'); Route::post('/{user}', 'update')->name('update'); Route::delete('/{user}', 'destroy')->name('destroy'); Route::post('/change_password/{user}', 'changePassword')->name('changePassword'); - Route::post('/give_permissions_to', 'givePermissionsTo')->name('givePermissionsTo'); - Route::post('/give_role_to_user','giveRoleToUser')->name('giveRoleToUser'); - Route::post('/change_confirmed_status', 'changeConfirmedStatus')->name('changeConfirmedStatus'); - Route::post('/change_user_enabeld','changeUserEnabeld')->name('changeUserEnabeld')->middleware( + Route::post('/give_permissions_to/{user}', 'givePermissionsTo')->name('givePermissionsTo'); + Route::post('/give_role_to_user/{user}','giveRoleToUser')->name('giveRoleToUser'); + Route::post('/change_confirmed_status/{user}', 'changeConfirmedStatus')->name('changeConfirmedStatus'); + Route::post('/change_user_enabeld/{user}','changeUserEnabeld')->name('changeUserEnabeld')->middleware( 'permission:full-user-management|limited-user-management'); Route::get('/activity_report', 'activityReport')->name('activityReport'); Route::get('/userActivityLogs', 'userActivityLogs')->name('userActivityLogs'); From b736a8a8547259106e3d4fc56305205ce56ae053 Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Wed, 5 Nov 2025 10:47:37 +0330 Subject: [PATCH 3/4] change two item in fromrequest --- .../V3/Dashboard/UserManagementController.php | 7 ++++--- ...ExrtraRequest.php => FullStoreRequest.php} | 18 +++--------------- ...StoreRequest.php => LimitStoreRequest.php} | 19 +++---------------- .../UserManagement/UpdateRequest.php | 16 ++-------------- 4 files changed, 12 insertions(+), 48 deletions(-) rename app/Http/Requests/V3/Dashboard/UserManagement/{StoreExrtraRequest.php => FullStoreRequest.php} (62%) rename app/Http/Requests/V3/Dashboard/UserManagement/{StoreRequest.php => LimitStoreRequest.php} (52%) diff --git a/app/Http/Controllers/V3/Dashboard/UserManagementController.php b/app/Http/Controllers/V3/Dashboard/UserManagementController.php index a3514002..cb5abc76 100644 --- a/app/Http/Controllers/V3/Dashboard/UserManagementController.php +++ b/app/Http/Controllers/V3/Dashboard/UserManagementController.php @@ -7,9 +7,10 @@ use App\Http\Controllers\Controller; use App\Http\Requests\V3\Dashboard\UserManagement\ChangeConfirmEnabelRequest; use App\Http\Requests\V3\Dashboard\UserManagement\ChangeConfirmStatusRequest; use App\Http\Requests\V3\Dashboard\UserManagement\ChangePasswordRequest; +use App\Http\Requests\V3\Dashboard\UserManagement\FullStoreRequest; use App\Http\Requests\V3\Dashboard\UserManagement\GivePermissionRequest; use App\Http\Requests\V3\Dashboard\UserManagement\GiveRoleRequest; -use App\Http\Requests\V3\Dashboard\UserManagement\StoreRequest; +use App\Http\Requests\V3\Dashboard\UserManagement\LimitStoreRequest; use App\Http\Requests\V3\Dashboard\UserManagement\UpdateRequest; use App\Http\Traits\ApiResponse; use App\Models\City; @@ -39,7 +40,7 @@ class UserManagementController extends Controller return response()->json($data); } - public function limitStore(StoreRequest $request): jsonResponse + public function limitStore(LimitStoreRequest $request): jsonResponse { auth()->user()->addActivityComplete(1039); @@ -67,7 +68,7 @@ class UserManagementController extends Controller /** * @throws Throwable */ - public function fullStore(StoreRequest $request): jsonResponse + public function fullStore(FullStoreRequest $request): jsonResponse { DB::transaction(function () use ($request) { auth()->user()->addActivityComplete(1039); diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/FullStoreRequest.php similarity index 62% rename from app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php rename to app/Http/Requests/V3/Dashboard/UserManagement/FullStoreRequest.php index f7b6b85b..03b6a2e1 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/StoreExrtraRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/FullStoreRequest.php @@ -6,7 +6,7 @@ use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; use Illuminate\Validation\Rule; -class StoreExrtraRequest extends FormRequest +class FullStoreRequest extends FormRequest { /** * Determine if the user is authorized to make this request. @@ -24,20 +24,8 @@ class StoreExrtraRequest extends FormRequest public function rules(): array { return [ - 'edarate_ostani_id' => [ - 'nullable', - 'integer', - Rule::exists('edarate_ostani', 'id'), - Rule::prohibitedIf(fn () => filled($this->input('edarate_shahri_id'))), - Rule::requiredIf(fn () => blank($this->input('edarate_shahri_id'))), - ], - 'edarate_shahri_id' => [ - 'nullable', - 'integer', - Rule::exists('edarate_shahri', 'id'), - Rule::prohibitedIf(fn () => filled($this->input('edarate_ostani_id'))), - Rule::requiredIf(fn () => blank($this->input('edarate_ostani_id'))), - ], + 'edarate_ostani_id' => 'exists:edarate_ostani,id|integer|prohibited_if:edarate_shahri_id,!=,null', + 'edarate_shahri_id' => 'exists:edarate_shahri,id|integer|prohibited_if:edarate_ostani_id,!=,null', 'province_id' => 'required|exists:provinces,id', 'city_id' => 'exists:cities,id', 'username' => 'required|unique:users,username', diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/LimitStoreRequest.php similarity index 52% rename from app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php rename to app/Http/Requests/V3/Dashboard/UserManagement/LimitStoreRequest.php index 4c3583d0..2a1fde8f 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/StoreRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/LimitStoreRequest.php @@ -4,9 +4,8 @@ namespace App\Http\Requests\V3\Dashboard\UserManagement; use Illuminate\Contracts\Validation\ValidationRule; use Illuminate\Foundation\Http\FormRequest; -use Illuminate\Validation\Rule; -class StoreRequest extends FormRequest +class LimitStoreRequest extends FormRequest { /** * Determine if the user is authorized to make this request. @@ -24,20 +23,8 @@ class StoreRequest extends FormRequest public function rules(): array { return [ - 'edarate_ostani_id' => [ - 'nullable', - 'integer', - Rule::exists('edarate_ostani', 'id'), - Rule::prohibitedIf(fn () => filled($this->input('edarate_shahri_id'))), - Rule::requiredIf(fn () => blank($this->input('edarate_shahri_id'))), - ], - 'edarate_shahri_id' => [ - 'nullable', - 'integer', - Rule::exists('edarate_shahri', 'id'), - Rule::prohibitedIf(fn () => filled($this->input('edarate_ostani_id'))), - Rule::requiredIf(fn () => blank($this->input('edarate_ostani_id'))), - ], + 'edarate_ostani_id' => 'exists:edarate_ostani,id|integer|prohibited_if:edarate_shahri_id', + 'edarate_shahri_id' => 'exists:edarate_shahri,id|integer|prohibited_if:edarate_ostani_id', 'province_id' => 'required|exists:provinces,id', 'city_id' => 'exists:cities,id', 'username' => 'required|unique:users,username', diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php index 8dbbc53b..a19cf756 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php @@ -25,20 +25,8 @@ class UpdateRequest extends FormRequest { return [ 'province_id' => 'required|exists:provinces,id', - 'edarate_ostani_id' => [ - 'nullable', - 'integer', - Rule::exists('edarate_ostani', 'id'), - Rule::prohibitedIf(fn () => filled($this->input('edarate_shahri_id'))), - Rule::requiredIf(fn () => blank($this->input('edarate_shahri_id'))), - ], - 'edarate_shahri_id' => [ - 'nullable', - 'integer', - Rule::exists('edarate_shahri', 'id'), - Rule::prohibitedIf(fn () => filled($this->input('edarate_ostani_id'))), - Rule::requiredIf(fn () => blank($this->input('edarate_ostani_id'))), - ], + 'edarate_ostani_id' => 'exists:edarate_ostani,id|integer|prohibited_if:edarate_shahri_id,!=,null', + 'edarate_shahri_id' => 'exists:edarate_shahri,id|integer|prohibited_if:edarate_ostani_id,!=,null', 'city_id' => 'exists:cities,id', 'username' => [Rule::unique('users', 'username')->ignore($this->user->id)], 'national_code' => ['required', Rule::unique('users', 'national_code')->ignore($this->user->id)], From cbeb116845259b8a2bc49115d691b0a0a750eea8 Mon Sep 17 00:00:00 2001 From: faezehzafarbakhsh Date: Wed, 5 Nov 2025 10:59:42 +0330 Subject: [PATCH 4/4] change item in fromrequest --- .../Requests/V3/Dashboard/UserManagement/FullStoreRequest.php | 4 ++-- .../Requests/V3/Dashboard/UserManagement/UpdateRequest.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/FullStoreRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/FullStoreRequest.php index 03b6a2e1..dd605e04 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/FullStoreRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/FullStoreRequest.php @@ -24,8 +24,8 @@ class FullStoreRequest extends FormRequest public function rules(): array { return [ - 'edarate_ostani_id' => 'exists:edarate_ostani,id|integer|prohibited_if:edarate_shahri_id,!=,null', - 'edarate_shahri_id' => 'exists:edarate_shahri,id|integer|prohibited_if:edarate_ostani_id,!=,null', + 'edarate_ostani_id' => 'exists:edarate_ostani,id|integer|prohibited_if:edarate_shahri_id', + 'edarate_shahri_id' => 'exists:edarate_shahri,id|integer|prohibited_if:edarate_ostani_id', 'province_id' => 'required|exists:provinces,id', 'city_id' => 'exists:cities,id', 'username' => 'required|unique:users,username', diff --git a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php index a19cf756..188a55e7 100644 --- a/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php +++ b/app/Http/Requests/V3/Dashboard/UserManagement/UpdateRequest.php @@ -25,8 +25,8 @@ class UpdateRequest extends FormRequest { return [ 'province_id' => 'required|exists:provinces,id', - 'edarate_ostani_id' => 'exists:edarate_ostani,id|integer|prohibited_if:edarate_shahri_id,!=,null', - 'edarate_shahri_id' => 'exists:edarate_shahri,id|integer|prohibited_if:edarate_ostani_id,!=,null', + 'edarate_ostani_id' => 'exists:edarate_ostani,id|integer|prohibited_if:edarate_shahri_id', + 'edarate_shahri_id' => 'exists:edarate_shahri,id|integer|prohibited_if:edarate_ostani_id', 'city_id' => 'exists:cities,id', 'username' => [Rule::unique('users', 'username')->ignore($this->user->id)], 'national_code' => ['required', Rule::unique('users', 'national_code')->ignore($this->user->id)],