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;
use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller;
use App\Models\PbgTask;
use App\Models\PbgTaskRetributions;
use App\Traits\GlobalApiResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
class DashboardController extends Controller
{
use GlobalApiResponse;
public function businnessDocument(Request $request){
$businessData = DB::table('pbg_task')
->leftJoin('pbg_task_retributions', 'pbg_task.uuid', '=', 'pbg_task_retributions.pbg_task_uid')
@@ -30,7 +30,7 @@ class DashboardController extends Controller
"series" => [$taskCount],
"total" => $taskTotal
];
return ApiResponse::successResponse($result, "Successfully count businness doucument");
return $this->resSuccess($result);
}
public function nonBusinnessDocument(Request $request){
$businessData = DB::table('pbg_task')
@@ -50,7 +50,7 @@ class DashboardController extends Controller
"series" => [$taskCount],
"total" => $taskTotal
];
return ApiResponse::successResponse($result, "Successfully count not businness doucument");
return $this->resSuccess($result);
}
public function allTaskDocuments(){
$query = DB::table('pbg_task')
@@ -67,6 +67,6 @@ class DashboardController extends Controller
"series" => [$taskCount],
"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\Resources\GlobalSettingResource;
use App\Models\GlobalSetting;
use Illuminate\Http\Request;
use App\Traits\GlobalApiResponse;
use Exception;
class GlobalSettingsController extends Controller
{
use GlobalApiResponse;
/**
* Display a listing of the resource.
*/
@@ -25,15 +27,10 @@ class GlobalSettingsController extends Controller
public function store(GlobalSettingRequest $request)
{
try {
//code...
$data = GlobalSetting::create($request->validated());
return new GlobalSettingResource($data);
} catch (\Exception $e) {
return response()->json(
[
"errors" => $e->getMessage()
]
);
return $this->resError($e->getMessage(), null, $e->getCode());
}
}
@@ -42,15 +39,36 @@ class GlobalSettingsController extends Controller
*/
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.
*/
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)
{
//
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\Requests\Auth\LoginRequest;
use App\Models\User;
use Hash;
use Illuminate\Support\Facades\Hash;
use Illuminate\Http\Request;
class UsersController extends Controller

View File

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

View File

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

View File

@@ -3,17 +3,18 @@
namespace App;
use App\Enums\ImportDatasourceStatus;
use App\Helpers\ApiResponse;
use App\Models\ImportDatasource;
use App\Models\PbgTaskIndexIntegrations;
use App\Models\PbgTaskPrasarana;
use App\Models\PbgTaskRetributions;
use Exception;
use App\Models\PbgTask;
use App\Traits\GlobalApiResponse;
use Illuminate\Support\Facades\Log;
class ServiceSIMBG
{
use GlobalApiResponse;
private $email;
private $password;
/**
@@ -106,7 +107,7 @@ class ServiceSIMBG
'status' => ImportDatasourceStatus::Failed->value,
'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'];
@@ -127,7 +128,7 @@ class ServiceSIMBG
'status' => ImportDatasourceStatus::Failed->value,
'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'];
@@ -214,7 +215,7 @@ class ServiceSIMBG
]);
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\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;
use Illuminate\Http\Request;
use Symfony\Component\HttpKernel\Exception\HttpException;
return Application::configure(basePath: dirname(__DIR__))
@@ -15,8 +16,13 @@ return Application::configure(basePath: dirname(__DIR__))
->withMiddleware(function (Middleware $middleware) {
})
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (HttpException $exception){
if($exception->getStatusCode() == 404) {
$exceptions->shouldRenderJsonWhen(function (Request $request, Throwable $th){
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);
}
});