Files
Global-Jain/app/Repositories/Backend/User/UserService.php
2025-11-05 10:37:10 +05:30

266 lines
9.8 KiB
PHP

<?php
namespace App\Repositories\Backend\User;
use App\Constant\Constant;
use App\Exceptions\GeneralException;
use App\Models\User;
use App\Models\UserDetail;
use App\Services\BaseService;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Yajra\DataTables\Facades\DataTables;
class UserService extends BaseService
{
/**
* Associated Service Model.
*/
protected const MODEL = User::class;
/**
* @param User $user
* UserRepository constructor.
*
*/
public function __construct(UserDetail $userDetail)
{
$this->userDetail = $userDetail;
}
/**
* This function is use for search query in Datatable.
* Also for sorting function we are using join query for appropriate sorting result
* @param $request
* @return $this|array|Builder
*/
public function prepareSearchQuery($request)
{
$searchQuery = [];
try {
$searchQuery = $this->query()->select(
'users.id',
'users.name',
//'status',
'users.email',
'users.created_at',
'roles.name as role_name',
'roles.id as role_id'
)
->join('model_has_roles', 'users.id', '=', 'model_has_roles.model_id')
->join('roles', 'model_has_roles.role_id', '=', 'roles.id')
->where('roles.name', '!=', config('access.users.admin_role'))
->where('roles.name', '!=', config('access.users.super_admin_role'));
$columns = ['', 'id', 'name', 'status', 'created_at'];
if (isset($request['status']) && $request['status'] != '') {
$searchQuery = $searchQuery->where('users.status', $request['status']);
}
if (isset($request['name']) && $request['name'] != '') {
$searchQuery = $searchQuery->where('users.name', 'like', '%' . $request['name'] . '%');
}
if (isset($request['order']) && $request['order'] != "") {
$searchQuery = $searchQuery->orderBy(
$columns[$request['order'][0]['column']],
$request['order'][0]['dir']
);
}
} catch (Exception $ex) {
Log::error($ex->getMessage());
}
return $searchQuery;
}
/**
* This function is for the format the Datatable columns
*
* @param $request
* @return object
*/
public function getForDataTable($request): object
{
$response = (object)[];
try {
$dataTableQuery = $this->prepareSearchQuery($request);
// ->orderBy('id', 'DESC');
$response = Datatables::of($dataTableQuery)
/*->addColumn(
'checkbox_action',
function ($user) {
return $user->user_checkbox_action;
}
)*/
->addIndexColumn()
/*->addColumn(
'status',
function ($user) {
return $user->user_status_action;
}
)*/
->addColumn(
'email',
function ($user) {
return $user->email;
}
)
->addColumn(
'created_at',
function ($user) {
return (($user->created_at) ? defaultDateTimeFormat($user->created_at) : '-');
}
)
->addColumn(
'action',
function ($user) {
if (
!empty($user->roles[0]['name']) != config('access.users.admin_role')
|| !empty($user->roles[0]['name']) != config('access.users.super_admin_role')
|| loggedInUser()->isSuperAdmin()
|| loggedInUser()->isAdmin()
) {
return $user->user_action_buttons;
}
return "";
}
)
->setRowId(
function ($user) {
return 'recordRow-' . $user->id;
}
)
->rawColumns(['status', 'action', 'checkbox_action'])
->make(true);
} catch (Exception $ex) {
Log::error($ex->getMessage());
}
return $response;
}
/**
* This function is for the create user
*
* @param array $request
* @return User
* @throws GeneralException
*/
public function create($request): User
{
try {
$userData['name'] = $request['name'] ?? Constant::NULL;
$userData['email'] = $request['email'] ?? Constant::NULL;
$userData['mobile'] = $request['mobile'] ?? Constant::NULL;
$userData['dharma_id'] = $request['dharma_id'] ?? Constant::NULL;
$userData['status'] = '1' ?? Constant::NULL;
$userData['username'] = generateUsername($request['name']) ?? Constant::NULL;
$userData['gender'] = $request['gender'] ?? Constant::NULL;
if(!empty($request['avatar'])) {
$imageName = uploadImage($request, 'avatar', Constant::USER_IMAGE_UPLOAD_PATH . Constant::SLASH);
$userData['avatar'] = $imageName['image_name'] ?? Constant::NULL;
}
$user = $this->query()->create($userData);
$user->assignRole(config('access.users.shravak'));
if($user) {
$userDetailData['user_id'] = $user->id ?? Constant::NULL;
$userDetailData['jati_id'] = $request['jati_id'] ?? Constant::NULL;
$userDetailData['profession'] = $request['profession'] ?? Constant::NULL;
$userDetailData['profession_speciality'] = $request['profession_speciality'] ?? Constant::NULL;
/*$userDetailData['location'] = $request['location'] ?? Constant::NULL;
$userDetailData['native_place'] = $request['native_place'] ?? Constant::NULL;*/
$userDetail = $this->userDetail->query()->create($userDetailData);
}
return $user;
} catch (\Exception $ex) {
Log::error($ex);
throw new GeneralException(__('message.create_user_error'));
}
}
/**
* This function is for the update user
*
* @param object $user
* @param array $request
* @return User
* @throws GeneralException
*/
public function update(object $user, $request): User
{
try {
$userData['name'] = $request['name'] ?? $user->name;
$userData['email'] = $request['email'] ?? $user->email;
$userData['mobile'] = $request['mobile'] ?? $user->mobile;
$userData['dharma_id'] = $request['dharma_id'] ?? $user->dharma_id;
$userData['status'] = '1' ?? $user->status;
$userData['username'] = $user->username;
$userData['gender'] = $request['gender'] ?? $user->gender;
if(!empty($request['avatar'])) {
$imageName = uploadImage($request, 'avatar', Constant::SANT_IMAGE_UPLOAD_PATH . Constant::SLASH, $user->getRawOriginal('avatar'));
$userData['avatar'] = $imageName['image_name'] ?? $user->avatar;
}
$userUpdated = $this->query()->where('id',$user->id)->update($userData);
$userDetail = UserDetail::where('user_id',$user->id)->first();
if($userDetail) {
$userDetailData['user_id'] = $user->id;
$userDetailData['jati_id'] = $request['jati_id'] ?? $userDetail->jati_id;
$userDetailData['profession'] = $request['profession'] ?? $userDetail->profession;
$userDetailData['profession_speciality'] = $request['profession_speciality'] ?? $userDetail->profession_speciality;
/* $userDetailData['location'] = $request['location'] ?? $userDetail->location;
$userDetailData['native_place'] = $request['native_place'] ?? $userDetail->native_place;*/
$userDetailUpdated = $this->userDetail->query()->where('user_id',$user->id)->update($userDetailData);
}
return $user;
} catch (\Exception $ex) {
Log::error($ex);
throw new GeneralException(__('message.update_user_error'));
}
}
/**
* This function is for the multiple records action from the grid
*
* @param string $actionType
* @param array $data
* @return bool
* @throws GeneralException
*/
public function gridActions(string $actionType, array $data): bool
{
try {
switch ($actionType) {
case Constant::STATUS_ACTIVE:
$this->query()->whereIn('id', $data)->update(['status' => Constant::STATUS_ONE]);
return Constant::STATUS_TRUE;
case Constant::STATUS_INACTIVE:
$this->query()->whereIn('id', $data)->update(['status' => Constant::STATUS_ZERO]);
return Constant::STATUS_TRUE;
case Constant::STATUS_DELETE:
$this->query()->whereIn('id', $data)->delete();
return Constant::STATUS_TRUE;
default:
break;
}
} catch (Exception $ex) {
Log::error($ex->getMessage());
throw new GeneralException(__('message.delete_user_error'));
}
}
}