add table scraping log and datatable server side
This commit is contained in:
10
app/Enums/ImportDatasourceStatus.php
Normal file
10
app/Enums/ImportDatasourceStatus.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
enum ImportDatasourceStatus: string
|
||||
{
|
||||
case Processing = 'processing';
|
||||
case Success = 'success';
|
||||
case Failed = 'failed';
|
||||
}
|
||||
58
app/Http/Controllers/Api/ImportDatasourceController.php
Normal file
58
app/Http/Controllers/Api/ImportDatasourceController.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Resources\ImportDatasourceResource;
|
||||
use App\Models\ImportDatasource;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class ImportDatasourceController extends Controller
|
||||
{
|
||||
/**
|
||||
* Display a listing of the resource.
|
||||
*/
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = ImportDatasource::query();
|
||||
|
||||
if($request->has("search") && !empty($request->get("search"))){
|
||||
$search = $request->get("search");
|
||||
$query->where('status', 'like', "%".$search."%");
|
||||
}
|
||||
return ImportDatasourceResource::collection($query->paginate()->withQueryString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*/
|
||||
public function store(Request $request)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the specified resource.
|
||||
*/
|
||||
public function show(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*/
|
||||
public function update(Request $request, string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*/
|
||||
public function destroy(string $id)
|
||||
{
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,4 +21,7 @@ class UsersController extends Controller
|
||||
|
||||
return response(['user' => $user, 'token' => $token], 200);
|
||||
}
|
||||
public function index(){
|
||||
return response()->json(User::all());
|
||||
}
|
||||
}
|
||||
|
||||
26
app/Http/Resources/ImportDatasourceResource.php
Normal file
26
app/Http/Resources/ImportDatasourceResource.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Resources;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\Resources\Json\JsonResource;
|
||||
|
||||
class ImportDatasourceResource extends JsonResource
|
||||
{
|
||||
/**
|
||||
* Transform the resource into an array.
|
||||
*
|
||||
* @return array<string, mixed>
|
||||
*/
|
||||
public function toArray(Request $request): array
|
||||
{
|
||||
return [
|
||||
"id"=> $this->id,
|
||||
"message" => $this->message,
|
||||
"response_body" => $this->response_body,
|
||||
"status" => $this->status,
|
||||
"created_at" => $this->created_at->toDateTimeString(),
|
||||
"updated_at" => $this->updated_at->toDateTimeString(),
|
||||
];
|
||||
}
|
||||
}
|
||||
16
app/Models/ImportDatasource.php
Normal file
16
app/Models/ImportDatasource.php
Normal file
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class ImportDatasource extends Model
|
||||
{
|
||||
protected $table = 'import_datasources';
|
||||
protected $fillable = [
|
||||
'id',
|
||||
'message',
|
||||
'response_body',
|
||||
'status'
|
||||
];
|
||||
}
|
||||
@@ -2,7 +2,9 @@
|
||||
|
||||
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;
|
||||
@@ -31,6 +33,7 @@ class ServiceSIMBG
|
||||
|
||||
$res = $clientHelper->post($url, $body);
|
||||
if(!$res->original['success']){
|
||||
\Log::error("Token not retrieved ", ['response' => $res]);
|
||||
return null;
|
||||
}
|
||||
return $res;
|
||||
@@ -90,8 +93,17 @@ class ServiceSIMBG
|
||||
$clientHelper = new ServiceClient($_ENV['SIMBG_HOST']);
|
||||
$resToken = $this->getToken();
|
||||
|
||||
// create log import datasource
|
||||
$importDatasource = ImportDatasource::create([
|
||||
'status' => ImportDatasourceStatus::Processing->value,
|
||||
]);
|
||||
|
||||
if (!isset($resToken) || empty($resToken->original['data']['token']['access'])) {
|
||||
\Log::error("Token not retrieved for syncTaskList");
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Failed->value,
|
||||
'message' => 'Failed to retrive token'
|
||||
]);
|
||||
return ApiResponse::errorResponse("Failed to retrieve token", 401);
|
||||
}
|
||||
|
||||
@@ -109,6 +121,10 @@ class ServiceSIMBG
|
||||
$initialResponse = $clientHelper->get($url, $headers);
|
||||
if (empty($initialResponse->original['data']['total_page'])) {
|
||||
\Log::error("Invalid response: no total_page", ['response' => $initialResponse->original]);
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Failed->value,
|
||||
'message' => 'Invalid response: no total_page'
|
||||
]);
|
||||
return ApiResponse::errorResponse("Invalid response from API", 400);
|
||||
}
|
||||
|
||||
@@ -129,7 +145,10 @@ class ServiceSIMBG
|
||||
|
||||
if (empty($response->original['data']['data'])) {
|
||||
\Log::warning("No data found on page", ['page' => $currentPage]);
|
||||
continue;
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Success->value,
|
||||
'message' => 'Success but no data loaded on page'
|
||||
]);
|
||||
}
|
||||
|
||||
foreach ($response->original['data']['data'] as $item) {
|
||||
@@ -171,6 +190,11 @@ class ServiceSIMBG
|
||||
'error' => $e->getMessage(),
|
||||
'task' => $item,
|
||||
]);
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Failed->value,
|
||||
'message' => $e->getMessage(),
|
||||
'response_body' => $item
|
||||
]);
|
||||
$failedCount++;
|
||||
}
|
||||
}
|
||||
@@ -181,8 +205,13 @@ class ServiceSIMBG
|
||||
"failedCount" => $failedCount,
|
||||
];
|
||||
|
||||
|
||||
$importDatasource->update([
|
||||
'status' => ImportDatasourceStatus::Success->value,
|
||||
'message' => "Successfully success data: " .$savedCount. " failed data : " .$failedCount
|
||||
]);
|
||||
|
||||
\Log::info("syncTaskList completed", $result);
|
||||
|
||||
return ApiResponse::successResponse(json_encode($result), "Successfully saved");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user