ikinci temizlik tamamlandı

This commit is contained in:
Ümit Tunç
2026-04-28 21:15:09 +03:00
parent f80443aec0
commit 37e7296527
8313 changed files with 2400677 additions and 0 deletions
+114
View File
@@ -0,0 +1,114 @@
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Api\DynamicResourceController;
use App\Http\Controllers\Api\AuthController;
use App\Http\Controllers\Api\EndpointController;
use App\Http\Controllers\Api\AutocompleteTypeController;
use App\Http\Controllers\Api\SettingController;
use App\Http\Controllers\InspectionHistoryController;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
// Public Routes
Route::get('/mobile-types-test', [\App\Http\Controllers\Api\MobileTypeController::class, 'index']);
Route::get('/project-app-urls', [App\Http\Controllers\Api\ProjectAppUrlsController::class, 'index']);
Route::post('/login', [AuthController::class, 'login']);
Route::get('/stats/dashboard-stats', [\App\Http\Controllers\Api\StatsController::class, 'dashboardStats'])->middleware('check.static_hash');
Route::get('/dashboard/summary', [\App\Http\Controllers\Api\DashboardController::class, 'summary']);
// Protected Routes
Route::middleware(['auth:sanctum'])->group(function () {
Route::post('/logout', [AuthController::class, 'logout']);
Route::get('/me', [AuthController::class, 'me']);
Route::get('/user', function (Request $request) {
return $request->user();
});
// NAKS Sync Trigger
Route::post('/naks/trigger-sync', [\App\Http\Controllers\Api\NaksSyncController::class, 'triggerSync']);
// Mobile Types
Route::get('/mobile-types', [\App\Http\Controllers\Api\MobileTypeController::class, 'index']);
// Inspection History
Route::prefix('inspection-history')->group(function () {
Route::get('/modules', [InspectionHistoryController::class, 'modules']);
Route::get('/', [InspectionHistoryController::class, 'list']);
Route::post('/', [InspectionHistoryController::class, 'upload']);
Route::post('/upload-other', [InspectionHistoryController::class, 'uploadOther']);
Route::delete('/{id}', [InspectionHistoryController::class, 'delete']);
Route::post('/bulk-delete', [InspectionHistoryController::class, 'bulkDelete']);
});
// Document History
Route::match(['get', 'post'], '/document-history', [\App\Http\Controllers\Api\DocumentHistoryController::class, 'index']);
// Mobile-safe autocomplete-type endpoints (hashless)
Route::post('/autocomplete-type/{type}', [AutocompleteTypeController::class, 'handle']);
// Setting retrieval
Route::get('/settings/common', [SettingController::class, 'common']);
Route::get('/settings/{key}', [SettingController::class, 'get']);
// Work Permit Hierarchy
Route::get('/work-permit/hierarchy', [\App\Http\Controllers\Api\WorkPermitHierarchyController::class, 'index']);
// Spool Release Workflow
Route::post('/spool-release/advance', [\App\Http\Controllers\Api\SpoolReleaseWorkflowController::class, 'advance']);
Route::post('/spool-release/rollback', [\App\Http\Controllers\Api\SpoolReleaseWorkflowController::class, 'rollback']);
// Endpoints - Admin-Ajax API Service
Route::prefix('endpoints')->group(function () {
Route::get('/', [EndpointController::class, 'index'])->name('endpoints.index');
Route::get('/{endpoint}/info', [EndpointController::class, 'info'])->name('endpoints.info');
Route::match(['get', 'post'], '/{endpoint}', [EndpointController::class, 'handle'])
->where('endpoint', '[a-zA-Z0-9\-_\/]+')
->name('endpoints.handle');
});
// Dynamic Headless API Routes (Firewall & Advanced Auth included)
Route::middleware([
'api',
\App\Http\Middleware\IpFirewall::class,
\App\Http\Middleware\AdvancedAuth::class
])->group(function () {
// Permission Check Endpoint
Route::get('/auth-check/{module}/{permission?}', [DynamicResourceController::class, 'checkAuth']);
// Table Column Values Endpoint
Route::get('/table-column-values', [DynamicResourceController::class, 'getTableColumnValues']);
Route::prefix('stats')->group(function () {
Route::get('/ndt-calculation', [\App\Http\Controllers\Api\StatsController::class, 'ndtCalculation']);
Route::get('/ndt-calculation/test-packs', [\App\Http\Controllers\Api\StatsController::class, 'ndtCalculationTestPacks']);
Route::get('/ndt-calculation/backlogs', [\App\Http\Controllers\Api\StatsController::class, 'ndtCalculationBacklogs']);
Route::get('/welding-by-project', [\App\Http\Controllers\Api\StatsController::class, 'weldingByProject']);
});
// Dynamic CRUD & View Rendering (includes weld_logs/summary)
// Matches: /api/users/read, /api/weld_logs/summary, /api/products/view
Route::match(['get', 'post', 'put', 'patch', 'delete', 'options'], '/{table}/{action}', [DynamicResourceController::class, 'handle'])
->where('action', 'read|list|get|create|store|insert|update|save|delete|remove|view|render|summary|calculate|columns|values');
});
});
+18
View File
@@ -0,0 +1,18 @@
<?php
use Illuminate\Support\Facades\Broadcast;
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
+19
View File
@@ -0,0 +1,19 @@
<?php
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
/*
|--------------------------------------------------------------------------
| Console Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of your Closure based console
| commands. Each Closure is bound to a command instance allowing a
| simple approach to interacting with each command's IO methods.
|
*/
Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');
+301
View File
@@ -0,0 +1,301 @@
<?php
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
loginhtdedwqa
*/
Auth::routes();
oturumAc();
if(oturumisset("locale")) {
App::setLocale(oturum("locale"));
}
Route::get('/clear-cache', function() {
Artisan::call('cache:clear');
Artisan::call('config:clear');
Artisan::call('view:clear');
Artisan::call('queue:clear', [
'--force' => true
]);
//Artisan::call('vendor:publish');
return "Cache is cleared";
});
//Route::get("/storage/app/","files")
Route::get('/artisan-optimize', function() {
Artisan::call('optimize');
return "optimized";
});
Route::get('/get-token', function() {
return csrf_token();
});
Route::get('/cache/{size}/{month}/{day}/{file}',function($size,$month,$day,$file){
if($size=="large") $size = 1920;
if($size=="small") $size = 256;
if($size=="medium") $size = 512;
yonlendir(url("r.php?w=$size&p=storage/app/files/$month/$day/$file"));
});
Route::get('/',"ContentsController@index");
Route::get('/logout',"AdminController@logout");
Route::get('/home',"AdminController@default");
Route::get('/ajax/{var?}',"AjaxController@index");
Route::match(['get', 'post', 'put', 'delete'],'/admin-ajax/{var?}',"AdminAjaxController@index");
// PDF Editor API Routes (Web middleware group for session auth)
Route::prefix('api/pdf-editor')->group(function () {
// Annotation routes
Route::get('/annotations', [\App\Http\Controllers\Api\AnnotationController::class, 'index']);
Route::post('/annotations', [\App\Http\Controllers\Api\AnnotationController::class, 'store']);
Route::post('/annotations/sync', [\App\Http\Controllers\Api\AnnotationController::class, 'sync']);
Route::post('/annotations/delete', [\App\Http\Controllers\Api\AnnotationController::class, 'deleteMultiple']);
Route::get('/annotations/{annotation}', [\App\Http\Controllers\Api\AnnotationController::class, 'show']);
Route::put('/annotations/{annotation}', [\App\Http\Controllers\Api\AnnotationController::class, 'update']);
Route::delete('/annotations/{annotation}', [\App\Http\Controllers\Api\AnnotationController::class, 'destroy']);
Route::get('/action-history', [\App\Http\Controllers\Api\AnnotationController::class, 'actionHistory']);
Route::get('/version-annotations', [\App\Http\Controllers\Api\AnnotationController::class, 'versionAnnotations']);
// QR Code routes
Route::post('/qr-code/generate', [\App\Http\Controllers\Api\QRCodeController::class, 'generate']);
Route::get('/qr-code/{shapeId}', [\App\Http\Controllers\Api\QRCodeController::class, 'generateForAnnotation']);
// PDF Editor Lookup/Metadata routes
Route::get('/metadata/drawing-types', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'drawingTypes']);
Route::get('/metadata/drawings', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'drawings']);
Route::get('/metadata/files', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'files']);
Route::get('/metadata/weld-data', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'weldData']);
Route::post('/metadata/document-stage', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'updateDocumentStage']);
// Joint Widget / IC Log routes
Route::get('/ic-log-members', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'getICLogMembers']);
Route::get('/ic-log-member-details', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'getICLogMemberDetails']);
Route::get('/check-existing-weldmap', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'checkExistingWeldmapData']);
Route::get('/get-qualified-welders', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'getQualifiedWelders']);
Route::get('/get-type-of-weld-options', [\App\Http\Controllers\Api\PdfEditorLookupController::class, 'getTypeOfWeldOptions']);
Route::post('/save-joint-data', [\App\Http\Controllers\Api\AnnotationController::class, 'saveJointData']);
Route::post('/update-welder-assignment', [\App\Http\Controllers\Api\AnnotationController::class, 'updateWelderAssignment']);
Route::get('/get-joint-data', [\App\Http\Controllers\Api\AnnotationController::class, 'getJointData']);
});
// PDF Export route
Route::post('/export-pdf', [\App\Http\Controllers\Api\AnnotationController::class, 'exportPDF']);
// PDFM API Routes (PDF Markup - Web middleware group for session auth)
Route::prefix('api/pdfm')->group(function () {
// Spools
Route::get('/spools', [\App\Http\Controllers\Api\PdfmController::class, 'getSpools']);
Route::post('/spools', [\App\Http\Controllers\Api\PdfmController::class, 'createSpool']);
Route::get('/spools/generate-number', [\App\Http\Controllers\Api\PdfmController::class, 'generateSpoolNumber']);
// Elements
Route::get('/elements', [\App\Http\Controllers\Api\PdfmController::class, 'getElements']);
Route::post('/elements', [\App\Http\Controllers\Api\PdfmController::class, 'createElement']);
// Joints
Route::get('/joints', [\App\Http\Controllers\Api\PdfmController::class, 'getJoints']);
Route::post('/joints', [\App\Http\Controllers\Api\PdfmController::class, 'createJoint']);
Route::get('/joints/generate-number', [\App\Http\Controllers\Api\PdfmController::class, 'generateJointNumber']);
// Welders
Route::get('/welders', [\App\Http\Controllers\Api\PdfmController::class, 'getWelders']);
Route::post('/welders', [\App\Http\Controllers\Api\PdfmController::class, 'createWelder']);
// Welder Assignments
Route::post('/assign-welder', [\App\Http\Controllers\Api\PdfmController::class, 'assignWelder']);
});
// Surface Area API Routes
Route::prefix('api/surface-area')->middleware('auth')->group(function () {
Route::get('/elements', [\App\Http\Controllers\Api\SurfaceAreaController::class, 'getElements']);
Route::get('/diameters', [\App\Http\Controllers\Api\SurfaceAreaController::class, 'getDiameters']);
Route::get('/mto-total', [\App\Http\Controllers\Api\SurfaceAreaController::class, 'getMtoTotal']);
Route::get('/get-saved-items', [\App\Http\Controllers\Api\SurfaceAreaController::class, 'getSavedItems']);
Route::post('/save-calculation', [\App\Http\Controllers\Api\SurfaceAreaController::class, 'save']);
});
// Read-Only API Routes for Admin-Ajax logic
Route::prefix('api/read')->middleware('auth:sanctum,web')->group(function () {
Route::get('/ndt-request', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'ndtRequest']);
Route::get('/ndt-calculation', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'ndtCalculation']);
Route::get('/spool-area-release', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'spoolAreaRelease']);
Route::get('/spool-release-detail', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'spoolReleaseDetail']);
Route::get('/repair-table', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'repairTable']);
Route::get('/repair-table/welder-based-repair-ratio-distribution', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'welderBasedRepairRatioDistribution']);
Route::get('/repair-table/defect-type-by-welder', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'defectTypeByWelder']);
Route::get('/rfi-dashboard', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'rfiDashboard']);
Route::get('/welder-qualification-status', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'welderQualificationStatus']);
Route::get('/punch-list', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'punchList']);
Route::get('/naks-welders', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'naksWelders']);
// Test Packages
Route::get('/test-package/pivot', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'testPackagePivot']);
Route::get('/test-package/status-pivot', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'testPackageStatusPivot']);
Route::get('/test-package/summary', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'testPackageSummary']);
Route::get('/test-package/summary-2', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'testPackageSummary2']);
Route::get('/welder-qualification-table', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'welderQualificationTable']);
Route::get('/rfi-tasks', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'rfiTasks']);
Route::get('/rfi-status', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'rfiStatus']);
Route::get('/ndt-release-list', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'ndtReleaseList']);
Route::get('/paint-release-list', [\App\Http\Controllers\Api\ApiReadOnlyController::class, 'paintReleaseList']);
// Add more as they are verified
});
// Notification API Routes (Performance optimized with caching)
Route::prefix('api/notifications')->middleware('auth')->group(function () {
// Get user's notifications with pagination
Route::get('/list', [\App\Http\Controllers\NotificationController::class, 'getUserNotifications']);
// Get recent notifications for dropdown (cached)
Route::get('/recent', [\App\Http\Controllers\NotificationController::class, 'getRecentNotifications']);
// Get unread count (cached)
Route::get('/unread-count', [\App\Http\Controllers\NotificationController::class, 'getUnreadCount']);
// Get notification types with counts (for inbox sidebar)
Route::get('/types', [\App\Http\Controllers\NotificationController::class, 'getNotificationTypes']);
// Get notifications by type
Route::get('/by-type', [\App\Http\Controllers\NotificationController::class, 'getNotificationsByType']);
// Mark notification as read
Route::post('/mark-read/{id}', [\App\Http\Controllers\NotificationController::class, 'markAsRead']);
// Mark notification as unread
Route::post('/mark-unread/{id}', [\App\Http\Controllers\NotificationController::class, 'markAsUnread']);
// Mark all notifications as read
Route::post('/mark-all-read', [\App\Http\Controllers\NotificationController::class, 'markAllAsRead']);
// Delete notification
Route::delete('/{id}', [\App\Http\Controllers\NotificationController::class, 'delete']);
// Delete all read notifications
Route::post('/delete-read', [\App\Http\Controllers\NotificationController::class, 'deleteReadNotifications']);
});
// Yorum kaydetme rotası - AdminAjaxController'dan bağımsız
Route::post('/api/column-comment', [\App\Http\Controllers\ColumnCommentController::class, 'saveComment'])->middleware('auth');
// Inspection History Routes
Route::prefix('ajax/inspection-history')->middleware('auth')->group(function () {
Route::post('/upload', [\App\Http\Controllers\InspectionHistoryController::class, 'upload']);
Route::get('/list', [\App\Http\Controllers\InspectionHistoryController::class, 'list']);
Route::delete('/delete/{id}', [\App\Http\Controllers\InspectionHistoryController::class, 'delete']);
Route::post('/bulk-delete', [\App\Http\Controllers\InspectionHistoryController::class, 'bulkDelete']);
});
// Register Creator rotası
Route::post('/admin/register-creator/dispatch-jobs', [\App\Http\Controllers\RegisterCreatorController::class, 'dispatchJobs']);
Route::post('/admin/tp-creator/dispatch-jobs', [\App\Http\Controllers\TpCreatorController::class, 'dispatchJobs']);
// Notification filtered list route
Route::get('/admin/notifications/filtered-list', [\App\Http\Controllers\NotificationController::class, 'showFilteredList'])->middleware('auth')->name('notifications.filtered-list');
Route::get('/admin/notifications/get-filtered-data', [\App\Http\Controllers\NotificationController::class, 'getFilteredData'])->middleware('auth')->name('notifications.get-filtered-data');
$hash="admin";
Route::group(['prefix' => $hash, 'middleware' => 'auth'], function () {
Route::post('/feedback/save-statuses', function () {
foreach (request('statuses') as $id => $status) {
$item = \App\Models\FeedbackReport::find($id);
if ($item) {
$item->status = $status;
$item->save();
}
}
return back()->with('success', 'Statuses updated');
});
});
// Önbelleğe alınmış dashboard sayfası route'u
Route::get('/'.$hash.'/cached-dashboard', "AdminController@cachedDashboard");
Route::match(['get', 'post'],'/'.$hash,"AdminController@default");
Route::get("/$hash/contents","AdminController@default");
Route::match(['get', 'post', 'put', 'delete'],"/$hash/{id}","AdminController@default");
Route::get("/$hash/new/{type}","AdminController@new");
Route::get("/$hash/export/{tableName}/{fileName?}","AdminController@exportExcel");
Route::post("/$hash/import/{tableName}","AdminController@importExcel");
Route::get("/$hash/truncate/{tableName}","AdminController@truncateTable");
Route::get("/$hash/delete/{tableName}/{id}","AdminController@delete");
Route::post("/$hash/create/{tableName}","AdminController@create");
Route::get("/$hash/autocomplete/{tableName}/{columnName}","AdminController@autocomplete");
Route::match(['get', 'post'],"/$hash/autocomplete_type/{type}","AdminController@autocompleteType");
Route::get("/$hash/fuzzy-autocomplete/{tableName}/{columnName?}","AdminController@fuzzyAutocomplete")->name('fuzzy-autocomplete');
Route::get("/$hash/detail/{tableName}/{columnName}","AdminController@rowDetail");
Route::get("/$hash/to-json/{tableName}","AdminController@tableToJson");
Route::put("/$hash/save-json/{tableName}","AdminController@saveJson");
Route::post("/$hash/insert/{tableName}","AdminController@insertJson");
Route::delete("/$hash/remove/{tableName}","AdminController@removeJson");
Route::get("/$hash/get/{tableName}/{columnName}/{value}","AdminController@getDetail");
Route::get("/$hash/link-creator/{tableName}/{id}","AdminController@linkCreator");
Route::post("/$hash/clone-row/{tableName}","AdminController@cloneRow");
Route::get("/$hash/user-guide/{module?}","AdminController@userGuide");
Route::get('import-status', "AdminController@importStatus");
Route::get('glide/{path}', function($path){
$server = \League\Glide\ServerFactory::create([
'source' => app('filesystem')->disk('public')->getDriver(),
'cache' => storage_path('glide'),
]);
return $server->getImageResponse($path, Input::query());
})->where('path', '.+');
Route::match(['get', 'post'],'/admin/action/{action}/{type}',"AdminController@action2");
Route::match(['get', 'post'],"/$hash/{type}/{id}","AdminController@default");
Route::match(['get', 'post'],"/$hash/{type}/{id}/{action}","AdminController@action");
Route::get('/l-{lang?}/',"ContentsController@default_lang");
Route::get('/l-{lang?}/{slug?}',"ContentsController@default_lang");
Route::get('/l-{lang?}/',"ContentsController@index");
Route::match(['get', 'post'],'/{slug?}',"ContentsController@default");
Auth::routes();
Route::get('/home', [\App\Http\Controllers\HomeController::class, 'index'])->name('home');
Auth::routes();
Route::get('/home', [\App\Http\Controllers\HomeController::class, 'index'])->name('home');