fix relation, fix migration, fix all route use token, fix service sync simbg, fix detail pbg

This commit is contained in:
arifal
2025-02-07 16:03:52 +07:00
parent 97ffd322a1
commit 55dc0751d3
18 changed files with 3184 additions and 3033 deletions

View File

@@ -28,7 +28,7 @@ class DashboardController extends Controller
->first(); ->first();
}); });
$taskCount = $query->total_data; $taskCount = $query->total_data ?? 0;
$taskTotal = $query->total_retribution ?? 0; $taskTotal = $query->total_retribution ?? 0;
return $this->resSuccess([ return $this->resSuccess([
@@ -54,7 +54,7 @@ class DashboardController extends Controller
SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions SUM(ptr.nilai_retribusi_bangunan) AS total_retribution') // Menambahkan SUM dari pbg_task_retributions
->first(); ->first();
}); });
$taskCount = $query->total_data; $taskCount = $query->total_data ?? 0;
$taskTotal = $query->total_retribution ?? 0; $taskTotal = $query->total_retribution ?? 0;
return $this->resSuccess([ return $this->resSuccess([
"count" => $taskCount, "count" => $taskCount,
@@ -71,8 +71,8 @@ class DashboardController extends Controller
) )
->first(); ->first();
}); });
$taskCount = $query->task_count; $taskCount = $query->task_count ?? 0;
$taskTotal = $query->total_retribution; $taskTotal = $query->total_retribution ?? 0;
return $this->resSuccess([ return $this->resSuccess([
"count" => $taskCount, "count" => $taskCount,
"total" => $taskTotal "total" => $taskTotal
@@ -90,8 +90,8 @@ class DashboardController extends Controller
->first(); ->first();
}); });
$taskCount = $query->total_data; $taskCount = $query->total_data ?? 0;
$taskTotal = $query->total_retribution; $taskTotal = $query->total_retribution ?? 0;
return $this->resSuccess([ return $this->resSuccess([
"count"=> $taskCount, "count"=> $taskCount,
@@ -113,7 +113,7 @@ class DashboardController extends Controller
->first(); ->first();
}); });
$taskCount = $query->total_data; $taskCount = $query->total_data ?? 0;
$taskTotal = $query->total_retribution ?? 0; $taskTotal = $query->total_retribution ?? 0;
return $this->resSuccess([ return $this->resSuccess([

View File

@@ -70,7 +70,7 @@ class PbgTaskController extends Controller
public function show(string $id) public function show(string $id)
{ {
try{ try{
$pbg_task = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations'])->findOrFail($id); $pbg_task = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations','pbg_task_retributions.pbg_task_prasarana'])->findOrFail($id);
return response()->json([ return response()->json([
"success"=> true, "success"=> true,
"message"=> "Data ditemukan", "message"=> "Data ditemukan",

View File

@@ -37,7 +37,7 @@ class PbgTaskController extends Controller
*/ */
public function show(string $id) public function show(string $id)
{ {
$data = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations'])->findOrFail($id); $data = PbgTask::with(['pbg_task_retributions','pbg_task_index_integrations', 'pbg_task_retributions.pbg_task_prasarana'])->findOrFail($id);
return view("pbg_task.show", compact("data")); return view("pbg_task.show", compact("data"));
} }

View File

@@ -20,5 +20,10 @@ class PbgTaskPrasarana extends Model
'quantity', 'quantity',
'unit', 'unit',
'index_prasarana', 'index_prasarana',
'pbg_task_retribution_id'
]; ];
public function pbg_task_retributions(){
return $this->hasMany(PbgTaskRetributions::class, 'pbg_task_retribution_id', 'id');
}
} }

View File

@@ -35,4 +35,8 @@ class PbgTaskRetributions extends Model
public function pbg_task(){ public function pbg_task(){
return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid'); return $this->belongsTo(PbgTask::class, 'pbg_task_uid', 'uuid');
} }
public function pbg_task_prasarana(){
return $this->hasMany(PbgTaskPrasarana::class, 'pbg_task_retribution_id', 'id');
}
} }

View File

@@ -227,8 +227,6 @@ class ServiceSIMBG
$res = $this->service_client->get($url, $headers); $res = $this->service_client->get($url, $headers);
Log::info("response task detail submit", ['res' => $res]);
if (empty($res->original['success']) || !$res->original['success']) { if (empty($res->original['success']) || !$res->original['success']) {
// Log error // Log error
Log::error("API response indicates failure", ['url' => $url, 'uuid' => $uuid]); Log::error("API response indicates failure", ['url' => $url, 'uuid' => $uuid]);
@@ -249,7 +247,7 @@ class ServiceSIMBG
? Carbon::parse($data['updated_at'])->format('Y-m-d H:i:s') ? Carbon::parse($data['updated_at'])->format('Y-m-d H:i:s')
: null; : null;
PbgTaskRetributions::updateOrCreate( $pbg_task_retributions = PbgTaskRetributions::updateOrCreate(
['detail_id' => $data['id']], ['detail_id' => $data['id']],
[ [
'detail_uid' => $data['uid'] ?? null, 'detail_uid' => $data['uid'] ?? null,
@@ -273,10 +271,13 @@ class ServiceSIMBG
] ]
); );
$pbg_task_retribution_id = $pbg_task_retributions->id;
$prasaranaData = $data['prasarana'] ?? []; $prasaranaData = $data['prasarana'] ?? [];
if (!empty($prasaranaData)) { if (!empty($prasaranaData)) {
$insertData = array_map(fn($item) => [ $insertData = array_map(fn($item) => [
'pbg_task_uid' => $uuid, 'pbg_task_uid' => $uuid,
'pbg_task_retribution_id' => $pbg_task_retribution_id,
'prasarana_id' => $item['id'] ?? null, 'prasarana_id' => $item['id'] ?? null,
'prasarana_type' => $item['prasarana_type'] ?? null, 'prasarana_type' => $item['prasarana_type'] ?? null,
'building_type' => $item['building_type'] ?? null, 'building_type' => $item['building_type'] ?? null,

View File

@@ -12,6 +12,17 @@ return new class extends Migration
public function up(): void public function up(): void
{ {
Schema::table('pbg_task', function (Blueprint $table) { Schema::table('pbg_task', function (Blueprint $table) {
$constraintExists = DB::select("
SELECT COUNT(*) as count
FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'pbg_task'
AND index_name = 'pbg_task_uuid_unique'
");
if ($constraintExists[0]->count > 0) {
$table->dropUnique('pbg_task_uuid_unique');
}
$table->string('uuid')->nullable()->unique()->change(); $table->string('uuid')->nullable()->unique()->change();
}); });
} }
@@ -22,6 +33,7 @@ return new class extends Migration
public function down(): void public function down(): void
{ {
Schema::table('pbg_task', function (Blueprint $table) { Schema::table('pbg_task', function (Blueprint $table) {
$table->dropUnique('pbg_task_uuid_unique');
$table->string('uuid')->nullable()->change(); $table->string('uuid')->nullable()->change();
}); });
} }

View File

@@ -12,6 +12,17 @@ return new class extends Migration
public function up(): void public function up(): void
{ {
Schema::table('pbg_task_index_integrations', function (Blueprint $table) { Schema::table('pbg_task_index_integrations', function (Blueprint $table) {
$constraintExists = DB::select("
SELECT COUNT(*) as count
FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'pbg_task_index_integrations'
AND index_name = 'pbg_task_index_integrations_pbg_task_uid_unique'
");
if ($constraintExists[0]->count > 0) {
$table->dropUnique('pbg_task_index_integrations_pbg_task_uid_unique');
}
$table->string('pbg_task_uid')->unique()->change(); $table->string('pbg_task_uid')->unique()->change();
}); });
} }
@@ -22,6 +33,7 @@ return new class extends Migration
public function down(): void public function down(): void
{ {
Schema::table('pbg_task_index_integrations', function (Blueprint $table) { Schema::table('pbg_task_index_integrations', function (Blueprint $table) {
$table->dropUnique('pbg_task_index_integrations_pbg_task_uid_unique');
$table->string('pbg_task_uid')->unique()->change(); $table->string('pbg_task_uid')->unique()->change();
}); });
} }

View File

@@ -12,6 +12,17 @@ return new class extends Migration
public function up(): void public function up(): void
{ {
Schema::table('pbg_task_retributions', function (Blueprint $table) { Schema::table('pbg_task_retributions', function (Blueprint $table) {
$constraintExists = DB::select("
SELECT COUNT(*) as count
FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'pbg_task_retributions'
AND index_name = 'pbg_task_retributions_detail_id_unique'
");
if ($constraintExists[0]->count > 0) {
$table->dropUnique('pbg_task_retributions_detail_id_unique');
}
$table->string('detail_id')->unique()->change(); $table->string('detail_id')->unique()->change();
}); });
} }
@@ -22,6 +33,7 @@ return new class extends Migration
public function down(): void public function down(): void
{ {
Schema::table('pbg_task_retributions', function (Blueprint $table) { Schema::table('pbg_task_retributions', function (Blueprint $table) {
$table->dropUnique('pbg_task_retributions_detail_id_unique');
$table->string('detail_id')->unique()->change(); $table->string('detail_id')->unique()->change();
}); });
} }

View File

@@ -12,6 +12,17 @@ return new class extends Migration
public function up(): void public function up(): void
{ {
Schema::table('pbg_task_prasarana', function (Blueprint $table) { Schema::table('pbg_task_prasarana', function (Blueprint $table) {
$constraintExists = DB::select("
SELECT COUNT(*) as count
FROM information_schema.statistics
WHERE table_schema = DATABASE()
AND table_name = 'pbg_task_prasarana'
AND index_name = 'pbg_task_prasarana_prasarana_id_unique'
");
if ($constraintExists[0]->count > 0) {
$table->dropUnique('pbg_task_prasarana_prasarana_id_unique');
}
$table->integer('prasarana_id')->nullable()->unique()->change(); $table->integer('prasarana_id')->nullable()->unique()->change();
}); });
} }
@@ -22,6 +33,7 @@ return new class extends Migration
public function down(): void public function down(): void
{ {
Schema::table('pbg_task_prasarana', function (Blueprint $table) { Schema::table('pbg_task_prasarana', function (Blueprint $table) {
$table->dropUnique('pbg_task_prasarana_prasarana_id_unique');
$table->integer('prasarana_id')->nullable()->unique()->change(); $table->integer('prasarana_id')->nullable()->unique()->change();
}); });
} }

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
$table->unsignedBigInteger('pbg_task_retribution_id')->nullable(); // nullable in case some records do not match
// Step 2: Define the foreign key relation from `table3` to `table2`
$table->foreign('pbg_task_retribution_id')->references('id')->on('pbg_task_retributions')->onDelete('cascade');
});
\DB::table('pbg_task_prasarana')
->join('pbg_task', 'pbg_task.uuid', '=', 'pbg_task_prasarana.pbg_task_uid') // Relating pbg_task_prasarana to pbg_task
->join('pbg_task_retributions', 'pbg_task_retributions.pbg_task_uid', '=', 'pbg_task.uuid') // Relating pbg_task_retributions to pbg_task
->whereNotNull('pbg_task_retributions.id') // Ensure the `pbg_task_retributions` id exists
->update(['pbg_task_prasarana.pbg_task_retribution_id' => \DB::raw('pbg_task_retributions.id')]); // Set the foreign key
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('pbg_task_prasarana', function (Blueprint $table) {
$table->dropForeign(['pbg_task_retribution_id']);
$table->dropColumn('pbg_task_retribution_id');
});
}
};

View File

@@ -16,7 +16,12 @@ class DataSettingSeeder extends Seeder
$data_settings = [ $data_settings = [
[ [
"key" => "TARGET_PAD", "key" => "TARGET_PAD",
"value" => "33.200.000.000", "value" => "50000000000",
"type" => "integer"
],
[
"key" => "TATA_RUANG",
"value" => "10000000000",
"type" => "integer" "type" => "integer"
] ]
]; ];

5920
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,35 +1,35 @@
{ {
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {
"build": "vite build", "build": "vite build",
"dev": "vite" "dev": "vite"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"axios": "^1.7.4", "axios": "^1.7.4",
"concurrently": "^9.0.1", "concurrently": "^9.0.1",
"laravel-vite-plugin": "^1.0", "laravel-vite-plugin": "^1.0",
"postcss": "^8.4.47", "postcss": "^8.4.47",
"sass": "^1.81.1", "sass": "^1.81.1",
"tailwindcss": "^3.4.13", "tailwindcss": "^3.4.13",
"vite": "^5.0" "vite": "^5.0"
}, },
"dependencies": { "dependencies": {
"apexcharts": "^3.44.2", "apexcharts": "^3.44.2",
"big.js": "^6.2.2", "big.js": "^6.2.2",
"bootstrap": "^5.3.3", "bootstrap": "^5.3.3",
"countup.js": "^2.3.2", "countup.js": "^2.3.2",
"dropzone": "^5.9.0", "dropzone": "^5.9.0",
"flatpickr": "^4.6.13", "flatpickr": "^4.6.13",
"gmaps": "^0.4.25", "gmaps": "^0.4.25",
"gridjs": "^5.1.0", "gridjs": "^5.1.0",
"iconify-icon": "^2.1.0", "iconify-icon": "^2.1.0",
"jsvectormap": "^1.5.1", "jsvectormap": "^1.5.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"node-waves": "^0.7.6", "node-waves": "^0.7.6",
"quill": "^1.3.7", "quill": "^1.3.7",
"simplebar": "^5.3.9", "simplebar": "^5.3.9",
"wnumb": "^1.2.0" "wnumb": "^1.2.0"
} }
} }

View File

@@ -10,8 +10,8 @@
"__commonjsHelpers-C4iS2aBk.js" "__commonjsHelpers-C4iS2aBk.js"
] ]
}, },
"_global-config-Dl5-jBxt.js": { "_global-config-9uDKFQ8j.js": {
"file": "assets/global-config-Dl5-jBxt.js", "file": "assets/global-config-9uDKFQ8j.js",
"name": "global-config" "name": "global-config"
}, },
"_gridjs.umd-BiCNXlqL.js": { "_gridjs.umd-BiCNXlqL.js": {
@@ -94,33 +94,33 @@
"isEntry": true "isEntry": true
}, },
"resources/js/dashboards/bigdata.js": { "resources/js/dashboards/bigdata.js": {
"file": "assets/bigdata-BFcpLrsm.js", "file": "assets/bigdata-C1y9KS-u.js",
"name": "bigdata", "name": "bigdata",
"src": "resources/js/dashboards/bigdata.js", "src": "resources/js/dashboards/bigdata.js",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_global-config-Dl5-jBxt.js" "_global-config-9uDKFQ8j.js"
] ]
}, },
"resources/js/data-settings/index.js": { "resources/js/data-settings/index.js": {
"file": "assets/index-CjwDTyfA.js", "file": "assets/index-CzuDcG6g.js",
"name": "index", "name": "index",
"src": "resources/js/data-settings/index.js", "src": "resources/js/data-settings/index.js",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_gridjs.umd-BiCNXlqL.js", "_gridjs.umd-BiCNXlqL.js",
"_global-config-Dl5-jBxt.js", "_global-config-9uDKFQ8j.js",
"__commonjsHelpers-C4iS2aBk.js" "__commonjsHelpers-C4iS2aBk.js"
] ]
}, },
"resources/js/master/users/users.js": { "resources/js/master/users/users.js": {
"file": "assets/users-o8xrenvF.js", "file": "assets/users-BoDXPe3W.js",
"name": "users", "name": "users",
"src": "resources/js/master/users/users.js", "src": "resources/js/master/users/users.js",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_gridjs.umd-BiCNXlqL.js", "_gridjs.umd-BiCNXlqL.js",
"_global-config-Dl5-jBxt.js", "_global-config-9uDKFQ8j.js",
"__commonjsHelpers-C4iS2aBk.js" "__commonjsHelpers-C4iS2aBk.js"
] ]
}, },
@@ -223,35 +223,46 @@
] ]
}, },
"resources/js/pbg-task/index.js": { "resources/js/pbg-task/index.js": {
"file": "assets/index-BIwgvpVl.js", "file": "assets/index-BW29TEbh.js",
"name": "index", "name": "index",
"src": "resources/js/pbg-task/index.js", "src": "resources/js/pbg-task/index.js",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_gridjs.umd-BiCNXlqL.js", "_gridjs.umd-BiCNXlqL.js",
"_global-config-Dl5-jBxt.js", "_global-config-9uDKFQ8j.js",
"__commonjsHelpers-C4iS2aBk.js" "__commonjsHelpers-C4iS2aBk.js"
] ]
}, },
"resources/js/settings/general/general-settings.js": { "resources/js/settings/general/general-settings.js": {
"file": "assets/general-settings-BNtJQCVY.js", "file": "assets/general-settings-BoJeYQk1.js",
"name": "general-settings", "name": "general-settings",
"src": "resources/js/settings/general/general-settings.js", "src": "resources/js/settings/general/general-settings.js",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_gridjs.umd-BiCNXlqL.js", "_gridjs.umd-BiCNXlqL.js",
"_global-config-Dl5-jBxt.js", "_global-config-9uDKFQ8j.js",
"__commonjsHelpers-C4iS2aBk.js" "__commonjsHelpers-C4iS2aBk.js"
] ]
}, },
"resources/js/settings/syncronize/syncronize.js": { "resources/js/settings/syncronize/syncronize.js": {
"file": "assets/syncronize-D6sYFuSv.js", "file": "assets/syncronize-DjtcngRb.js",
"name": "syncronize", "name": "syncronize",
"src": "resources/js/settings/syncronize/syncronize.js", "src": "resources/js/settings/syncronize/syncronize.js",
"isEntry": true, "isEntry": true,
"imports": [ "imports": [
"_gridjs.umd-BiCNXlqL.js", "_gridjs.umd-BiCNXlqL.js",
"_global-config-Dl5-jBxt.js", "_global-config-9uDKFQ8j.js",
"__commonjsHelpers-C4iS2aBk.js"
]
},
"resources/js/tables/common-table.js": {
"file": "assets/common-table-KF_NVAIE.js",
"name": "common-table",
"src": "resources/js/tables/common-table.js",
"isEntry": true,
"imports": [
"_gridjs.umd-BiCNXlqL.js",
"_global-config-9uDKFQ8j.js",
"__commonjsHelpers-C4iS2aBk.js" "__commonjsHelpers-C4iS2aBk.js"
] ]
}, },
@@ -266,7 +277,7 @@
"isEntry": true "isEntry": true
}, },
"resources/scss/style.scss": { "resources/scss/style.scss": {
"file": "assets/style-Dazdq775.css", "file": "assets/style-B2v4WMju.css",
"src": "resources/scss/style.scss", "src": "resources/scss/style.scss",
"isEntry": true "isEntry": true
} }

View File

@@ -39,10 +39,11 @@ class BigData {
// kekurangan potensi // kekurangan potensi
this.totalKekuranganPotensi = new Big( this.totalKekuranganPotensi = new Big(
this.totalTargetPAD - this.bigTotalPotensi this.bigTargetPAD - this.bigTotalPotensi
); );
this.percentageKekuranganPotensi = this.percentageKekuranganPotensi =
this.totalKekuranganPotensi <= 0 || this.totalTargetPAD <= 0 this.totalKekuranganPotensi <= 0 || this.bigTargetPAD <= 0
? 0 ? 0
: this.totalKekuranganPotensi : this.totalKekuranganPotensi
.div(this.bigTargetPAD) .div(this.bigTargetPAD)
@@ -88,7 +89,7 @@ class BigData {
.times(100) .times(100)
.toFixed(2); .toFixed(2);
if (!this.totalTargetPAD) { if (!this.bigTargetPAD) {
console.error("Failed to load chart data"); console.error("Failed to load chart data");
return; return;
} }

View File

@@ -5,7 +5,7 @@
@section('content') @section('content')
@include('layouts.partials/page-title', ['title' => 'Detail', 'subtitle' => 'PBG']) @include('layouts.partials/page-title', ['title' => 'Data', 'subtitle' => 'PBG'])
<div class="row"> <div class="row">
<div class="card"> <div class="card">
@@ -203,8 +203,47 @@
@endif @endif
</div> </div>
<div class="tab-pane" id="pbgTaskPrasarana"> <div class="tab-pane" id="pbgTaskPrasarana">
<div class="row"> <div class="row d-flex flex-warp gap-3 justify-content-center">
aslkdjkasjd @if ($data->pbg_task_retributions && $data->pbg_task_retributions->pbg_task_prasarana)
@foreach ($data->pbg_task_retributions->pbg_task_prasarana as $prasarana)
<div class="border p-3 rounded shadow-sm col-md-4">
<div class="mb-3">
<dt>Prasarana Type</dt>
<dd>{{$prasarana->prasarana_type}}</dd>
</div>
<div class="mb-3">
<dt>Building Type</dt>
<dd>{{$prasarana->building_type}}</dd>
</div>
<div class="mb-3">
<dt>Total</dt>
<dd>{{$prasarana->total}}</dd>
</div>
<div class="mb-3">
<dt>Quantity</dt>
<dd>{{$prasarana->quantity}}</dd>
</div>
<div class="mb-3">
<dt>Unit</dt>
<dd>{{$prasarana->unit}}</dd>
</div>
<div class="mb-3">
<dt>Index Prasarana</dt>
<dd>{{$prasarana->index_prasarana}}</dd>
</div>
<div class="mb-3">
<dt>Created At</dt>
<dd>{{$prasarana->created_at}}</dd>
</div>
</div>
@endforeach
@else
<div class="row">
<div class="col-md-12">
Data Not Available
</div>
</div>
@endif
</div> </div>
</div> </div>
</div> </div>

View File

@@ -52,12 +52,11 @@ Route::group(['middleware' => 'auth:sanctum'], function (){
// sync pbg google sheet // sync pbg google sheet
Route::get('/sync-pbg-task-google-sheet', [PbgTaskController::class, 'syncPbgFromGoogleSheet'])->name('pbg-task.sync-google-sheet'); Route::get('/sync-pbg-task-google-sheet', [PbgTaskController::class, 'syncPbgFromGoogleSheet'])->name('pbg-task.sync-google-sheet');
Route::apiResource('/api-google-sheet', GoogleSheetController::class);
Route::get('/sync-task', [SyncronizeController::class, 'syncPbgTask'])->name('api.task');
Route::get('/get-user-token', [SyncronizeController::class, 'getUserToken'])->name('api.task.token');
Route::get('/get-index-integration-retribution/{uuid}', [SyncronizeController::class, 'syncIndexIntegration'])->name('api.task.inntegration');
Route::get('/sync-task-submit/{uuid}', [SyncronizeController::class, 'syncTaskDetailSubmit'])->name('api.task.submit');
}); });
Route::apiResource('/api-google-sheet', GoogleSheetController::class);
Route::get('/sync-task', [SyncronizeController::class, 'syncPbgTask'])->name('api.task');
Route::get('/get-user-token', [SyncronizeController::class, 'getUserToken'])->name('api.task.token');
Route::get('/get-index-integration-retribution/{uuid}', [SyncronizeController::class, 'syncIndexIntegration'])->name('api.task.inntegration');
Route::get('/sync-task-submit/{uuid}', [SyncronizeController::class, 'syncTaskDetailSubmit'])->name('api.task.submit');