api code global jain

This commit is contained in:
Abhishek Mali
2025-11-05 10:37:10 +05:30
commit 52fe7e2bec
2834 changed files with 1784903 additions and 0 deletions

View File

@@ -0,0 +1,271 @@
<?php
namespace App\Repositories\Backend\User;
use App\Constant\Constant;
use App\Exceptions\GeneralException;
use App\Services\BaseService;
use Carbon\Carbon;
use Domains\User\Http\Jobs\Backend\SendInviteUserJob;
use App\Models\User;
use Exception;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Spatie\Permission\Models\Role;
use Yajra\DataTables\Facades\DataTables;
class AdminService extends BaseService
{
/**
* Associated Service Model.
*/
protected const MODEL = User::class;
/**
* 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.email',
'users.name',
'users.email_verified_at',
'users.created_at',
'users.status',
'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'))
->where('roles.name','!=',config('access.users.shravak'));
// $columns = ['', 'id', 'name', 'email', 'status', 'email_verified_at', 'created_at'];
$columns = ['', 'id', 'name', 'email', 'created_at'];
if (isset($request['status']) && $request['status'] != '') {
$searchQuery = $searchQuery->where('users.status', $request['status']);
}
if (isset($request['email']) && !empty($request['email'])) {
$searchQuery = $searchQuery->where('email', 'like', "%".$request['email']."%");
}
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->checkbox_action;
}
)
->addIndexColumn()
// ->addColumn(
// 'status',
// function ($user) {
// return $user->status_action;
// }
// )
// ->addColumn(
// 'email_verified_at',
// function ($user) {
// return (($user->email_verified_at) ? defaultDateTimeFormat($user->email_verified_at) : '-');
// }
// )
->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->admin_action_buttons;
}
return "";
}
)
->setRowId(
function ($user) {
return 'recordRow-' . $user->id;
}
)
->rawColumns(['status', 'action', 'checkbox_action', 'email_verified_at'])
->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(array $request): User
{
try {
return DB::transaction(
function () use ($request) {
$user = $this->query()->create(
[
'name' => $request['name'],
'email' => $request['email'],
'email_hash' => $request['email'],
'password' => !empty($request['password']) ? bcrypt($request['password']) : Constant::NULL,
'username' => generateUsername($request['name']),
// 'status' => !empty($request['status']) ? Constant::STATUS_ONE : Constant::STATUS_ZERO,
// 'email_verified_at' => !empty($request['is_verify']) ? Carbon::now() : Constant::NULL,
// 'invite_status' => !empty($request['save_and_invite']) ? Constant::STATUS_ONE : Constant::STATUS_ZERO,
// 'invite_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : Constant::NULL,
// 'created_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : Constant::NULL
]
);
// This function call for assign the role for the user
$user->assignRole($request['role_id']);
//Send invite email to the user
// SendInviteUserJob::dispatch($user);
return $user;
}
);
} catch (Exception $ex) {
Log::error($ex->getMessage());
throw new GeneralException(__('message.create_admin_error'));
}
}
/**
* This function is for the update user
*
* @param object $user
* @param array $request
* @return User
* @throws GeneralException
*/
public function update(object $user, array $request): User
{
try {
return DB::transaction(
function () use ($user, $request) {
$this->query()->where('id', $user->id)->update(
[
'name' => !empty($request['name']) ? $request['name'] : $user->name,
'email' => !empty($request['email']) ? encryptMe(strtolower($request['email'])) : $user->email,
'email_hash' => !empty($request['email']) ? md5(strtolower($request['email'])) : $user->email_hash,
'password' => !empty($request['password']) ? bcrypt($request['password']) : $user->password,
// 'username' => !empty($request['username']) ? $request['username'] : $user->username,
// 'status' => isset($request['status']) ? Constant::STATUS_ONE : Constant::STATUS_ZERO,
// 'email_verified_at' => isset($request['is_verify']) ? Carbon::now() : $user->email_verified_at,
// 'invite_status' => isset($request['save_and_invite']) ? Constant::STATUS_ONE : $user->invite_status,
// 'invite_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : $user->invite_by,
// 'updated_by' => !empty(loggedInUser()->id) ? loggedInUser()->id : $user->updated_by,
]
);
$user->assignRole($request['role_id']);
//Send invite email to the user
// if (!empty($request['save_and_invite'])) {
// SendInviteUserJob::dispatch($user);
// }
return $user;
});
} catch (Exception $ex) {
Log::error($ex->getMessage());
throw new GeneralException(__('message.update_admin_error'));
}
}
/**
* This function is for the flush existing role and assign the updated role to the user
*
* @param string $roles
* @param object $user
* @return void
*/
protected function flushRoles(string $roles, object $user)
{
//Flush roles out, then add array of new ones
if (!empty($user->roles[0]->id)) {
$user->removeRole($user->roles[0]->id);
}
$user->assignRole($roles);
}
/**
* 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)->forceDelete();
return Constant::STATUS_TRUE;
default:
break;
}
} catch (Exception $ex) {
Log::error($ex->getMessage());
throw new GeneralException(__('message.delete_admin_error'));
}
}
}