Merge pull request #81 from witelgroup/feature/CreateUserManagment

improve code in controller and forme requst
This commit is contained in:
Amir Ghasempoor
2025-10-28 12:05:38 +03:30
committed by GitHub
5 changed files with 89 additions and 149 deletions

View File

@@ -2,6 +2,8 @@
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\GivePermissionRequest;
use App\Http\Requests\V3\Dashboard\UserManagement\GiveRoleRequest;
@@ -25,111 +27,48 @@ class UserManagementController extends Controller
{
use ApiResponse;
public function index(Request $request)
public function index(Request $request): JsonResponse
{
auth()->user()->addActivityComplete(1038);
Auth::user()->addActivityComplete(1038);
$province = $request->province ?? null;
$city = $request->city ?? null;
$province_office = $request->province_office ?? null;
$data = DataTableFacade::run(
User::query(),
$request,
allowedFilters: ['*'],
allowedSortings: ['*'],
);
if (Auth::user()->checkUserHasPermission('full-user-management')) {
$users = User::when($province, function ($query, $province) {
return $query->where('province_id', $province);
})
->when($city, function ($query, $city) {
return $query->where('city_id', $city);
})
->when($province_office, function ($query, $province_office) {
if ($province_office == -1) {
return $query->where('edarate_ostani_id', null)->whereNotNull('edarate_shahri_id');
} else {
return $query->where('edarate_ostani_id', $province_office);
}
})
->with(['roles' => function ($query) {
$query->where('for_report', 1);
}])
->get();
} elseif (Auth::user()->checkUserHasPermission('limited-user-management')) {
$users = User::when($province, function ($query, $province) {
return $query->where('province_id', $province);
})
->where('province_id', Auth::user()->province_id)
->when($city, function ($query, $city) {
return $query->where('city_id', $city);
})
->when($province_office, function ($query, $province_office) {
if ($province_office == -1) {
return $query->where('edarate_ostani_id', null)->whereNotNull('edarate_shahri_id');
} else {
return $query->where('edarate_ostani_id', $province_office);
}
})
->with(['roles' => function ($query) {
$query->where('for_report', 1);
}])
->get();
} else {
return response()->json([
'message' => 'Forbidden',
], 403);
}
return $this->successResponse($users);
return $this->successResponse($data);
}
public function store(StoreRequest $request): jsonResponse
{
$user = auth()->user();
auth()->user()->addActivityComplete(1039);
$user->addActivityComplete(1039);
DB::transaction(function () use ($request) {
$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,
'edarate_ostani_id' => $request->edarate_ostani_id,
'edarate_ostani_name' => EdarateOstani::query()->find($request->edarate_ostani_name),
'edarate_shahri_id' => $request->edarate_shahri_id,
'edarate_shahri_name' => EdarateShahri::query()->find($request->edarate_shahri_name),
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'position' => $request->position,
'mobile' => $request->mobile,
'degree' => $request->degree,
'major' => $request->major,
]);
$user->avatar = FileFacade::save($request->file('avatar'), "avatar/{$user->id}");
});
User::query()->create([
'username' => $request->username,
'national_code' => $request->national_code,
'password' => Hash::make($request->password),
'province_id' => $request->province_id ?: null,
'city_id' => $request->city_id ?: null,
'edarate_ostani_id' => $request->edarate_ostani_id,
'edarate_shahri_id' => $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,
]);
$user->province_fa = ($request->province_id == 0) ? 'ستاد' : Province::find($request->province_id)->name_fa;
$user->city_fa = ($request->city_id == 0) ? null : City::find($request->city_id)->name_fa;
if ($request->edarate_ostani_id != 'null') {
$temp = EdarateOstani::find($request->edarate_ostani_id)->name_fa;
$user->edarate_ostani_id = $request->edarate_ostani_id;
$user->edarate_ostani_name = $temp;
if ($request->province_id == 0) {
$user->name = $temp.' '.$user->province_fa;
} else {
$user->name = $temp.' استان '.$user->province_fa;
}
} else {
$temp = EdarateShahri::find($request->edarate_shahri_id)->name_fa;
$user->edarate_shahri_id = $request->edarate_shahri_id;
$user->edarate_shahri_name = $temp;
if ($request->province_id == 0) {
$user->name = $temp.' '.$user->province_fa;
} else {
$user->name = $temp.' استان '.$user->province_fa;
}
}
$user->password = Hash::make($request->password);
$user->national_code = $request->national_code;
return $this->successResponse($user);
return $this->successResponse();
}
public function show(User $user)
@@ -142,63 +81,48 @@ class UserManagementController extends Controller
public function update(UpdateRequest $request, User $user): JsonResponse
{
auth()->user()->addActivityComplete(1040);
DB::transaction(function () use ($request, $user) {
$user->update([
'username' => $request->username,
'national_code' => $request->national_code,
'password' => Hash::make($request->password),
'province_id' => $request->province_id ?: null,
'city_id' => $request->city_id ?: null,
'edarate_ostani_id' => $request->edarate_ostani_id,
'edarate_shahri_id' => $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,
]);
$user->update([
'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,
'edarate_ostani_id' => $request->edarate_ostani_id,
'edarate_ostani_name' => EdarateOstani::query()->find($request->edarate_ostani_name),
'edarate_shahri_id' => $request->edarate_shahri_id,
'edarate_shahri_name' => EdarateShahri::query()->find($request->edarate_shahri_name),
'first_name' => $request->first_name,
'last_name' => $request->last_name,
'position' => $request->position,
'mobile' => $request->mobile,
'degree' => $request->degree,
'major' => $request->major,
]);
$user->province_fa = ($request->province_id == 0) ? 'ستاد' : Province::find($request->province_id)->name_fa;
$user->city_fa = ($request->city_id == 0) ? null : City::find($request->city_id)->name_fa;
if ($request->edarate_ostani_id != 'null') {
$temp = EdarateOstani::find($request->edarate_ostani_id)->name_fa;
$user->edarate_ostani_id = $request->edarate_ostani_id;
$user->edarate_ostani_name = $temp;
if ($request->province_id == 0) {
$user->name = $temp.' '.$user->province_fa;
} else {
$user->name = $temp.' استان '.$user->province_fa;
if ($request->has('avatar')) {
FileFacade::delete($user->avatar, true);
$user['avatar'] = FileFacade::save($request->file('avatar'), "avatar/{$user->id}/");
}
} else {
$temp = EdarateShahri::find($request->edarate_shahri_id)->name_fa;
$user->edarate_shahri_id = $request->edarate_shahri_id;
$user->edarate_shahri_name = $temp;
if ($request->province_id == 0) {
$user->name = $temp.' '.$user->province_fa;
} else {
$user->name = $temp.' استان '.$user->province_fa;
if (! is_null($request->password)) {
$user->password = Hash::make($request->password);
}
}
if (! is_null($request->password)) {
$user->password = Hash::make($request->password);
}
if (! is_null($request->permissions)) {
$user->syncPermissions(explode(',', $request->permissions));
}
if (! is_null($request->permissions)) {
$user->syncPermissions(explode(',', $request->permissions));
}
if ($request->filled('roles')) {
$user->syncRoles($request->roles);
}
if ($request->filled('roles')) {
$user->syncRoles($request->roles);
}
$user->save();
});
$user->save();
return $this->successResponse($user);
return $this->successResponse();
}
public function destroy(User $user)

View File

@@ -30,7 +30,13 @@ class StoreRequest extends FormRequest
'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',
];
}
}

View File

@@ -28,9 +28,16 @@ class UpdateRequest extends FormRequest
'edarate_ostani_id' => 'exists:edarate_ostanis,id',
'city_id' => 'exists:cities,id',
'edarate_shahri_id' => 'exists:edarate_shahris,id',
'username' => ['required', Rule::unique('users', 'username')->ignore($this->user->id)],
'username' => [Rule::unique('users', 'username')->ignore($this->user->id)],
'national_code' => ['required', Rule::unique('users', 'national_code')->ignore($this->user->id)],
'password' => 'required|min:8',
'password' => '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',
];
}
}

View File

@@ -29,7 +29,9 @@ class User extends Authenticatable
'name', 'email', 'major', 'password', 'username', 'first_name', 'last_name', 'position', 'mobile', 'province_id', 'city_id', 'confirmed', 'enabled', 'avatar', 'city_fa', 'province_fa', 'degree',
'national_code',
'edarate_ostani_id',
'edarate_shahri_id'
'edarate_shahri_id',
'edarate_ostani_name',
'edarate_shahri_name'
];
/**

View File

@@ -587,7 +587,8 @@ Route::prefix('user_management')
->controller(UserManagementController::class)
->group(function () {
// Route::get('/', 'index')->name('index');
Route::get('/', 'index')->name('index');
Route::get('/', 'index')->name('index')->middleware(
'permission:full-user-management|limited-user-management');
Route::post('/', 'store')->name('store');
Route::get('/{user}', 'show')->name('show');
Route::post('/{user}', 'update')->name('update');