Merge branch 'change-admin-role-type' of gitlab.com:CIEFWorldwideSdnBhd/exchange-2.0

This commit is contained in:
edmondlang
2023-03-30 16:02:56 +08:00
14 changed files with 339 additions and 13 deletions
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class EmailLike implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->where('email', 'LIKE', '%'.$value.'%');
}
}
@@ -0,0 +1,20 @@
<?php
namespace App\Classes\General\Eloquent\Filters;
use Illuminate\Database\Eloquent\Builder;
class TypeIn implements Filter
{
/**
* @param Builder $builder
* @param $value
* @return Builder|mixed
*/
public static function apply(Builder $builder, $value)
{
return $builder->whereIn('type', $value);
}
}
@@ -4,7 +4,7 @@ namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Services\UpdatesUser;
use App\Classes\Modules\Accounts\Services\UpdatesUserFullName;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Accounts\Standards\Rules\CanUpdateUser;
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
@@ -29,8 +29,8 @@ class UpdateUserLogic extends AbstractControllerLogic
/** @var CanUpdateUser */
private $canUpdateUser;
/** @var UpdatesUser */
private $updatesUser;
/** @var UpdatesUserFullName */
private $updatesUserFullName;
/** @var FetchesUser */
private $fetchesUser;
@@ -41,10 +41,10 @@ class UpdateUserLogic extends AbstractControllerLogic
* @param UpdatesUser $updatesUser
* @param FetchesUser $fetchesUSer
*/
public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser)
public function __construct(CanUpdateUser $canUpdateUser, UpdatesUserFullName $updatesUserFullName, FetchesUser $fetchesUser)
{
$this->canUpdateUser = $canUpdateUser;
$this->updatesUser = $updatesUser;
$this->updatesUserFullName = $updatesUserFullName;
$this->fetchesUser = $fetchesUser;
}
@@ -64,7 +64,7 @@ class UpdateUserLogic extends AbstractControllerLogic
$query = $this->fetchesUser->execute(['id' => $request->route('id')]);
$query = $this->updatesUser->execute($query, $object);
$query = $this->updatesUserFullName->execute($query, $object);
return $this->resourceResponse(new UserResource($query));
@@ -0,0 +1,78 @@
<?php
namespace App\Classes\Modules\Accounts\ControllersLogic;
use App\Classes\General\Abstracts\AbstractControllerLogic;
use App\Classes\Modules\Accounts\Services\UpdatesUser;
use App\Classes\Modules\Accounts\Services\FetchesUser;
use App\Classes\Modules\Accounts\Standards\Rules\CanUpdateUser;
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
use App\Classes\Modules\Accounts\DataTransferObjects\UserObject;
use App\Http\Resources\UserResource;
use ErrorException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateUserRoleLogic extends AbstractControllerLogic
{
/**
* @return array
*/
protected function notification():array {
return [
'title' => 'Updated Admin Role',
'message' => 'You have successfully updated the Admin Role'
];
}
/** @var CanUpdateUser */
private $canUpdateUser;
/** @var UpdatesUser */
private $updatesUser;
/** @var FetchesUser */
private $fetchesUser;
/**
* UpdateAddressLogic constructor.
* @param CanUpdateUser $canUpdateUser
* @param UpdatesUser $updatesUser
* @param FetchesUser $fetchesUSer
*/
public function __construct(CanUpdateUser $canUpdateUser, UpdatesUser $updatesUser, FetchesUser $fetchesUser)
{
$this->canUpdateUser = $canUpdateUser;
$this->updatesUser = $updatesUser;
$this->fetchesUser = $fetchesUser;
}
/**
* @param Request $request
* @return JsonResponse
* @throws ErrorException
*/
public function logic(Request $request) : JsonResponse
{
$query = $this->fetchesUser->execute(['id' => $request->route('id')]);
$object = new UserObject(
$query->name,
$query->email,
$query->password,
$query->password,
$request->input('type'),
$query->status,
);
$this->canUpdateUser->passes($object);
$query = $this->updatesUser->execute($query, $object);
return $this->resourceResponse(new UserResource($query));
}
}
@@ -3,7 +3,7 @@
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
use App\Classes\Modules\Accounts\DataTransferObjects\UserObject;
use App\Models\User;
class UpdatesUser extends AbstractUpdateRecord
@@ -15,9 +15,10 @@ class UpdatesUser extends AbstractUpdateRecord
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(User $model, FullNameObject $object) {
public function execute(User $model, UserObject $object) {
$model->name = $object->getName();
$model->type = $object->getType();
return $this->handler($model);
}
@@ -0,0 +1,24 @@
<?php
namespace App\Classes\Modules\Accounts\Services;
use App\Classes\General\Eloquent\AbstractUpdateRecord;
use App\Classes\Modules\Accounts\DataTransferObjects\FullNameObject;
use App\Models\User;
class UpdatesUserFullName extends AbstractUpdateRecord
{
/**
* @param User $model
* @param FullNameObject $object
* @return \Illuminate\Database\Eloquent\Model
* @throws \App\Classes\Exceptions\MalformedRequestException
*/
public function execute(User $model, FullNameObject $object) {
$model->name = $object->getName();
return $this->handler($model);
}
}
@@ -24,4 +24,11 @@ final class RoleTypes
public const DESTINATION_ACCOUNT_ADMIN = 7;
public const USER_TYPE_ID = [
self::SHADOW_ADMIN => "Shadow Admin",
self::SUPER_ADMIN => "Super Admin",
self::ADMIN => "Admin",
self::USER => "User",
];
}
@@ -0,0 +1,19 @@
<?php
namespace App\Http\Controllers\Accounts;
use App\Classes\Modules\Accounts\ControllersLogic\UpdateUserRoleLogic;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
class UpdateUserRoleController
{
/**
* @param Request $request
* @param UpdateUserLogic $logic
* @return JsonResponse
*/
public function update(Request $request, UpdateUserRoleLogic $logic): JsonResponse {
return $logic->execute($request);
}
}
+4
View File
@@ -2,6 +2,7 @@
namespace App\Http\Resources;
use App\Classes\ValueObjects\Constants\RoleTypes;
use Illuminate\Http\Resources\Json\JsonResource;
class UserResource extends JsonResource
@@ -14,11 +15,14 @@ class UserResource extends JsonResource
*/
public function toArray($request)
{
$userTypeArray = RoleTypes::USER_TYPE_ID;
return [
'id' => $this->id,
'name' => $this->name,
'email' => $this->email,
'type' => (int) $this->type,
'type_name' => ($userTypeArray[(int) $this->type]),
'status' => (int) $this->status
];
}
@@ -0,0 +1,63 @@
<template>
<div class="row" style="width: 450px; margin: auto;" @keyup.enter="submitForm">
<div class="col bg-white padding-40 b-rad-lg">
<div class="row m-b-10">
<div class="col text-center">
<h3>Edit Admin Role Type</h3>
</div>
</div>
<div class="row">
<div class="col">
<div class="row m-t-15 m-b-15">
<div class="col p-r-5">
<div class="b-grey b-a w-100 text-center p-l-15 p-r-15 p-t-10 p-b-10 pointer fs-15" :class="[{'b-primary': parameters.type === 2}]" @click="updateRoleType(2)">Admin</div>
</div>
<div class="col p-l-5">
<div class="b-grey b-a w-100 text-center p-l-15 p-r-15 p-t-10 p-b-10 pointer fs-15" :class="[{'b-primary': parameters.type === 1}]" @click="updateRoleType(1)">Super Admin</div>
</div>
</div>
</div>
</div>
<div class="row m-t-15">
<div class="col-auto p-r-5">
<div class="btn btn-lg btn-default b-rad-none" data-dismiss="modal">Cancel</div>
</div>
<div class="col p-l-5">
<div class="btn btn-primary w-100 btn-lg" @click="submitForm">Confirm</div>
</div>
</div>
</div>
</div>
</template>
<script>
import modalFormHandler from '../../../general/mixins/modalFormHandler';
import { required, minLength } from "vuelidate/lib/validators";
export default {
props: {
data:{
type: Object,
required: true,
}
},
data() {
return {
parameters: {
type: this.data.type,
}
};
},
methods: {
submitForm() {
this.submit(this.route('api.account.user.update.role', this.data.id), 'put', this.section, true, true)
},
updateRoleType(type){
this.parameters.type = type;
}
},
mixins: [modalFormHandler]
}
</script>
@@ -0,0 +1,73 @@
<template>
<div class="row m-b-15 parentContainer">
<div class="col">
<div class="row">
<div class="col">
<div class="row m-b-15">
<div class="col">
<div class="row">
<div class="col p-r-0">
<div class="form-group no-margin form-group-default b-rad-none">
<label class="text-primary">Email Like</label>
<input type="text" class="form-control" v-model="email" @keyup.enter="search"/>
</div>
</div>
</div>
</div>
<div class="col-auto p-l-0 p-r-0">
<div class="btn btn-primary b-rad-none" @click="search">
<i class="fa fa-search lh-40"></i>
</div>
</div>
<div class="col-auto p-l-0">
<div class="btn btn-secondary b-rad-none" @click="reset">
<i class="fa fa-remove lh-40"></i>
</div>
</div>
<div class="col"></div>
</div>
</div>
</div>
<list-component :key="currentKey" :section="section" :endpoint="route('api.account.user.list')" :options="options">
<template slot="list" slot-scope="{data}">
<user-component :data="data"></user-component>
</template>
</list-component>
</div>
</div>
</template>
<script>
import componentHandler from '../../../general/mixins/componentHandler';
export default {
props: {
section: {
type: String,
required: true
}
},
data() {
return {
expanded: false,
currentKey: 1,
email: '',
options: {
'type_in': this.$store.getters.isSuperAdmin ? [1, 2] : [2],
}
}
},
methods: {
search() {
this.options['email_like'] = this.email;
this.currentKey+=1;
console.log(this.options);
},
reset() {
this.email = '';
delete(this.options['email_like']);
this.currentKey+=1;
},
},
mixins: [componentHandler]
}
</script>
@@ -31,6 +31,26 @@
</div>
</div>
</div>
<div class="col">
<div class="row">
<div class="col-auto p-r-10">
<div class="font-heading all-caps fs-8 muted">Role Type</div>
</div>
</div>
<div class="row">
<div class="col">
<div class="font-heading all-caps fs-10">
{{item.type_name }}
<modal-component class="animate__animated animate__fast animate__fadeIn" styleType="fill-in" type="changeAdminRoleType">
<change-admin-role-type-form-component :section="'changeAdminRoleType'" :data="item"></change-admin-role-type-form-component>
</modal-component>
<div class="btn btn-xs b-rad-none pointer requestModal d-inline rounded no-border bg-transparent hover-primary" data-type="changeAdminRoleType" v-if="$store.getters.isSuperAdmin">
<i class="fa fa-edit pointer fa-fw fs-15 m-l-5"></i>
</div>
</div>
</div>
</div>
</div>
<div class="col-auto">
<div class="row">
<div class="col">
+1 -5
View File
@@ -351,11 +351,7 @@
</div>
<div class="row m-b-20">
<div class="col">
<list-component section="accountsSection" :endpoint="route('api.account.user.list')" :options="{'type': 2}">
<template slot="list" slot-scope="{data}">
<user-component :data="data"></user-component>
</template>
</list-component>
<list-admin-component section="accountsSection"></list-admin-component>
</div>
</div>
</div>
+1
View File
@@ -41,6 +41,7 @@ Route::group(['prefix' => 'account', 'namespace' => 'Accounts', 'as' => 'account
Route::post('/admin/create', 'CreateAdminUserController@create')->name('admin.create');
Route::delete('/delete/{id}', 'DeleteUserController@delete')->name('delete');
Route::put('/update/{id}/role', 'UpdateUserRoleController@update')->name('update.role');
});