<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\Permission\CreateRequest;
use App\Http\Requests\Admin\Permission\DropRequest;
use App\Http\Requests\Admin\Permission\GetListRequest;
use App\Http\Requests\Admin\Permission\PermissionTreeRequest;
use App\Http\Requests\Admin\Permission\UpdateRequest;
use App\Http\Response\ApiCode;
use App\Models\Permission;
use Exception;
use Illuminate\Http\Request;
use MarcinOrlowski\ResponseBuilder\ResponseBuilder;
use Spatie\Permission\Exceptions\PermissionDoesNotExist;
use Symfony\Component\HttpFoundation\Response;
class PermissionController extends Controller
{
public function permission(Request $request): Response
{
$id = $request->post('id', 0);
try {
$permission = Permission::find($id);
return ResponseBuilder::asSuccess(ApiCode::HTTP_OK)
->withHttpCode(ApiCode::HTTP_OK)
->withData($permission)
->withMessage(__('message.common.search.success'))
->build();
} catch (PermissionDoesNotExist $exception) {
return ResponseBuilder::asError(ApiCode::HTTP_BAD_REQUEST)
->withHttpCode(ApiCode::HTTP_BAD_REQUEST)
->withMessage(__('message.common.search.fail'))
->build();
}
}
public function permissions(GetListRequest $request): Response
{
$validated = $request->validated();
return ResponseBuilder::asSuccess(ApiCode::HTTP_OK)
->withHttpCode(ApiCode::HTTP_OK)
->withData(Permission::getList($validated))
->withMessage(__('message.common.search.success'))
->build();
}
public function permissionsTree(PermissionTreeRequest $request): Response
{
$validated = $request->validated();
return ResponseBuilder::asSuccess(ApiCode::HTTP_OK)
->withHttpCode(ApiCode::HTTP_OK)
->withData([
'tree' => Permission::tree($validated)
])
->withMessage(__('message.common.search.success'))
->build();
}
public function drop(DropRequest $request): Response
{
$validated = $request->validated();
$result = Permission::drop($validated['dragging'], $validated['drop'], $validated['type']);
if ($result) {
return ResponseBuilder::asSuccess(ApiCode::HTTP_OK)
->withHttpCode(ApiCode::HTTP_OK)
->withMessage(__('message.common.update.success'))
->build();
}
return ResponseBuilder::asError(ApiCode::HTTP_BAD_REQUEST)
->withHttpCode(ApiCode::HTTP_BAD_REQUEST)
->withMessage(__('message.common.update.fail'))
->build();
}
public function create(CreateRequest $request): Response
{
$validated = $request->validated();
return ResponseBuilder::asSuccess(ApiCode::HTTP_OK)
->withHttpCode(ApiCode::HTTP_OK)
->withData(Permission::create($validated))
->withMessage(__('message.common.create.success'))
->build();
}
public function update(UpdateRequest $request): Response
{
$validated = $request->validated();
$id = $validated['id'];
unset($validated['id']);
$permission = Permission::find($id);
$result = $permission->update($validated);
if ($result) {
return ResponseBuilder::asSuccess(ApiCode::HTTP_OK)
->withHttpCode(ApiCode::HTTP_OK)
->withData($permission)
->withMessage(__('message.common.update.success'))
->build();
}
return ResponseBuilder::asError(ApiCode::HTTP_BAD_REQUEST)
->withHttpCode(ApiCode::HTTP_BAD_REQUEST)
->withData($permission)
->withMessage(__('message.common.update.fail'))
->build();
}
public function delete(Request $request): Response
{
$id = $request->post('id', 0);
$response = Permission::__deleted($id);
if ($response['result']) {
return ResponseBuilder::asSuccess(ApiCode::HTTP_OK)
->withHttpCode(ApiCode::HTTP_OK)
->withMessage($response['message'])
->build();
}
return ResponseBuilder::asError(ApiCode::HTTP_BAD_REQUEST)
->withHttpCode(ApiCode::HTTP_BAD_REQUEST)
->withMessage($response['message'])
->build();
}
}