add crud api global setting and make global api response and handle response web and api on bootstrap app

This commit is contained in:
arifal hidayat
2025-01-27 02:08:40 +07:00
parent 5d0965bd3b
commit f1aa8868be
8 changed files with 95 additions and 27 deletions

View File

@@ -2,15 +2,15 @@
namespace App\Http\Controllers\Api; namespace App\Http\Controllers\Api;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\PbgTask; use App\Traits\GlobalApiResponse;
use App\Models\PbgTaskRetributions;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
class DashboardController extends Controller class DashboardController extends Controller
{ {
use GlobalApiResponse;
public function businnessDocument(Request $request){ public function businnessDocument(Request $request){
$businessData = DB::table('pbg_task') $businessData = DB::table('pbg_task')
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid') ->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
@@ -30,7 +30,7 @@ class DashboardController extends Controller
"series" => [$taskCount], "series" => [$taskCount],
"total" => $taskTotal "total" => $taskTotal
]; ];
return ApiResponse::successResponse($result, "Successfully count businness doucument"); return $this->resSuccess($result);
} }
public function nonBusinnessDocument(Request $request){ public function nonBusinnessDocument(Request $request){
$businessData = DB::table('pbg_task') $businessData = DB::table('pbg_task')
@@ -50,7 +50,7 @@ class DashboardController extends Controller
"series" => [$taskCount], "series" => [$taskCount],
"total" => $taskTotal "total" => $taskTotal
]; ];
return ApiResponse::successResponse($result, "Successfully count not businness doucument"); return $this->resSuccess($result);
} }
public function allTaskDocuments(){ public function allTaskDocuments(){
$query = DB::table('pbg_task') $query = DB::table('pbg_task')
@@ -67,6 +67,6 @@ class DashboardController extends Controller
"series" => [$taskCount], "series" => [$taskCount],
"total" => $taskTotal "total" => $taskTotal
]; ];
return ApiResponse::successResponse($result, "Successfully count all tasks documents"); return $this->resSuccess($result);
} }
} }

View File

@@ -6,10 +6,12 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\GlobalSettingRequest; use App\Http\Requests\GlobalSettingRequest;
use App\Http\Resources\GlobalSettingResource; use App\Http\Resources\GlobalSettingResource;
use App\Models\GlobalSetting; use App\Models\GlobalSetting;
use Illuminate\Http\Request; use App\Traits\GlobalApiResponse;
use Exception;
class GlobalSettingsController extends Controller class GlobalSettingsController extends Controller
{ {
use GlobalApiResponse;
/** /**
* Display a listing of the resource. * Display a listing of the resource.
*/ */
@@ -25,15 +27,10 @@ class GlobalSettingsController extends Controller
public function store(GlobalSettingRequest $request) public function store(GlobalSettingRequest $request)
{ {
try { try {
//code...
$data = GlobalSetting::create($request->validated()); $data = GlobalSetting::create($request->validated());
return new GlobalSettingResource($data); return new GlobalSettingResource($data);
} catch (\Exception $e) { } catch (\Exception $e) {
return response()->json( return $this->resError($e->getMessage(), null, $e->getCode());
[
"errors" => $e->getMessage()
]
);
} }
} }
@@ -42,15 +39,36 @@ class GlobalSettingsController extends Controller
*/ */
public function show(string $id) public function show(string $id)
{ {
// try{
$data = GlobalSetting::find($id);
if(!$data){
return $this->resError("Invalid id", null, 404);
}
return new GlobalSettingResource($data);
}catch(Exception $e){
return $this->resError($e->getMessage(), null, $e->getCode());
}
} }
/** /**
* Update the specified resource in storage. * Update the specified resource in storage.
*/ */
public function update(Request $request, string $id) public function update(GlobalSettingRequest $request, string $id)
{ {
// try{
$data = GlobalSetting::find($id);
if(!$data){
return $this->resError("Invalid id", null, 400);
}
$data->update($request->validated());
return new GlobalSettingResource($data);
}catch(Exception $e){
return $this->resError($e->getMessage(), null, $e->getCode());
}
} }
/** /**
@@ -58,6 +76,17 @@ class GlobalSettingsController extends Controller
*/ */
public function destroy(string $id) public function destroy(string $id)
{ {
// try{
$data = GlobalSetting::find($id);
if(!$data){
return $this->resError("Invalid id", null, 404);
}
$data->delete();
return new GlobalSettingResource($data);
}catch(Exception $e){
return $this->resError($e->getMessage(), null, $e->getCode());
}
} }
} }

View File

@@ -5,7 +5,7 @@ namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest; use App\Http\Requests\Auth\LoginRequest;
use App\Models\User; use App\Models\User;
use Hash; use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request; use Illuminate\Http\Request;
class UsersController extends Controller class UsersController extends Controller

View File

@@ -15,6 +15,7 @@ class GlobalSettingResource extends JsonResource
public function toArray(Request $request): array public function toArray(Request $request): array
{ {
return [ return [
'id' => $this->id,
'key' => $this->key, 'key' => $this->key,
'value' => $this->value, 'value' => $this->value,
'type' => $this->type, 'type' => $this->type,

View File

@@ -1,11 +1,12 @@
<?php <?php
namespace App; namespace App;
use App\Helpers\ApiResponse; use App\Traits\GlobalApiResponse;
use GuzzleHttp\Client; use GuzzleHttp\Client;
use Exception; use Exception;
class ServiceClient class ServiceClient
{ {
use GlobalApiResponse;
private $client; private $client;
private $baseUrl; private $baseUrl;
private $headers; private $headers;
@@ -41,9 +42,9 @@ class ServiceClient
$response = $this->client->request($method, $this->baseUrl . $url, $options); $response = $this->client->request($method, $this->baseUrl . $url, $options);
$resultResponse = json_decode($response->getBody(), true); $resultResponse = json_decode($response->getBody(), true);
return ApiResponse::successResponse($resultResponse, "Successfully fetched data"); return $this->resSuccess($resultResponse);
} catch (Exception $e) { } catch (Exception $e) {
return ApiResponse::errorResponse($e->getMessage(), $e->getCode()); return $this->resError($e->getMessage());
} }
} }

View File

@@ -3,17 +3,18 @@
namespace App; namespace App;
use App\Enums\ImportDatasourceStatus; use App\Enums\ImportDatasourceStatus;
use App\Helpers\ApiResponse;
use App\Models\ImportDatasource; use App\Models\ImportDatasource;
use App\Models\PbgTaskIndexIntegrations; use App\Models\PbgTaskIndexIntegrations;
use App\Models\PbgTaskPrasarana; use App\Models\PbgTaskPrasarana;
use App\Models\PbgTaskRetributions; use App\Models\PbgTaskRetributions;
use Exception; use Exception;
use App\Models\PbgTask; use App\Models\PbgTask;
use App\Traits\GlobalApiResponse;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
class ServiceSIMBG class ServiceSIMBG
{ {
use GlobalApiResponse;
private $email; private $email;
private $password; private $password;
/** /**
@@ -106,7 +107,7 @@ class ServiceSIMBG
'status' => ImportDatasourceStatus::Failed->value, 'status' => ImportDatasourceStatus::Failed->value,
'message' => 'Failed to retrive token' 'message' => 'Failed to retrive token'
]); ]);
return ApiResponse::errorResponse("Failed to retrieve token", 401); return $this->resError("Failed to retrive token");
} }
$apiToken = $resToken->original['data']['token']['access']; $apiToken = $resToken->original['data']['token']['access'];
@@ -127,7 +128,7 @@ class ServiceSIMBG
'status' => ImportDatasourceStatus::Failed->value, 'status' => ImportDatasourceStatus::Failed->value,
'message' => 'Invalid response: no total_page' 'message' => 'Invalid response: no total_page'
]); ]);
return ApiResponse::errorResponse("Invalid response from API", 400); return $this->resError("Invalid response from API");
} }
$totalPage = $initialResponse->original['data']['total_page']; $totalPage = $initialResponse->original['data']['total_page'];
@@ -214,7 +215,7 @@ class ServiceSIMBG
]); ]);
Log::info("syncTaskList completed", $result); Log::info("syncTaskList completed", $result);
return ApiResponse::successResponse(json_encode($result), "Successfully saved"); return $this->resSuccess($result);
} }

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Traits;
use Illuminate\Support\Facades\Log;
trait GlobalApiResponse
{
protected function resSuccess($result, $code = 200){
$response = [
'success' => true,
'data' => $result
];
if(!empty($message)){
$response['message'] = $message;
}
return response()->json($response, $code);
}
protected function resError(string $message, $errors = null, int $code = 400){
Log::error($message);
return response()->json([
'success' => false,
'message' => $message,
'errors' => $errors,
], $code);
}
}

View File

@@ -3,6 +3,7 @@
use Illuminate\Foundation\Application; use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware; use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\HttpException; use Symfony\Component\HttpKernel\Exception\HttpException;
return Application::configure(basePath: dirname(__DIR__)) return Application::configure(basePath: dirname(__DIR__))
@@ -15,8 +16,13 @@ return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) { ->withMiddleware(function (Middleware $middleware) {
}) })
->withExceptions(function (Exceptions $exceptions) { ->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (HttpException $exception){ $exceptions->shouldRenderJsonWhen(function (Request $request, Throwable $th){
if($exception->getStatusCode() == 404) { if($request->is('api/*')){
return true;
}
});
$exceptions->render(function (HttpException $exception, Request $request){
if($exception->getStatusCode() == 404 && $request->isNot('api/*')) {
return response()->view('pages.404',[],404); return response()->view('pages.404',[],404);
} }
}); });