$t->tablename, $tables); //MYSQL //$tables = DB::select('SHOW TABLES'); //$tableNames = array_map('current', $tables); $tableInfo = []; foreach ($tableNames as $table) { $filePath = base_path($this->exportPath . $table . '.json'); $fileSize = file_exists($filePath) ? filesize($filePath) : null; $tableInfo[] = [ 'name' => $table, 'size' => $fileSize, ]; } return view('backup', compact('tableInfo')); } public function generate(){ $exportPath = base_path($this->exportPath); if (!is_dir($exportPath)) { mkdir($exportPath, 0777, true); } $tables = DB::select("SELECT tablename FROM pg_tables WHERE schemaname = 'public'"); $tableNames = array_map(fn($t) => $t->tablename, $tables); foreach ($tableNames as $table) { try { $filePath = $exportPath . $table . '.json'; $handle = fopen($filePath, 'w'); fwrite($handle, "[\n"); $first = true; foreach (DB::table($table)->cursor() as $row) { $jsonRow = json_encode($row, JSON_UNESCAPED_UNICODE); if (!$first) { fwrite($handle, ",\n"); } else { $first = false; } fwrite($handle, $jsonRow); } fwrite($handle, "\n]"); fclose($handle); } catch (\Exception $e) { \Log::warning("Gagal ekspor tabel $table: " . $e->getMessage()); continue; } } return redirect()->back()->with('success', 'Semua tabel berhasil diekspor tanpa kehabisan memori.'); } public function downloadTable($table){ $file = base_path($this->exportPath . $table . '.json'); if (!file_exists($file)) { return abort(404, 'File tidak ditemukan.'); } return response()->download($file); } public function downloadAll(){ $zipFile = base_path('database/seeders/data/all_json.zip'); $zip = new ZipArchive; File::delete($zipFile); if ($zip->open($zipFile, ZipArchive::CREATE) === TRUE) { foreach (File::files(base_path($this->exportPath)) as $file) { $zip->addFile($file->getRealPath(), basename($file)); } $zip->close(); } return response()->download($zipFile); } public function importTable($table){ $path = base_path($this->exportPath . $table . '.json'); if (!file_exists($path)) { return redirect()->back()->with('error', "File JSON untuk tabel $table tidak ditemukan."); } $json = file_get_contents($path); $data = json_decode($json, true); if (!is_array($data)) { return redirect()->back()->with('error', "File JSON untuk tabel $table tidak valid."); } try { DB::beginTransaction(); DB::table($table)->truncate(); $chunks = array_chunk($data, 200); foreach ($chunks as $chunk) { DB::table($table)->insert($chunk); } DB::commit(); return redirect()->back()->with('success', "Data untuk tabel $table berhasil di-import."); } catch (\Exception $e) { DB::rollBack(); return redirect()->back()->with('error', "Gagal import tabel $table: " . $e->getMessage()); } } public function pull(Request $request){ if (session('previlage') !== 'developer') { abort(403, 'Akses ditolak. Anda tidak memiliki izin untuk menjalankan git pull.'); } $gitPath = '/var/www/html/lis/'; // Jalankan git pull $output = shell_exec("cd {$gitPath} && git pull 2>&1"); // Simpan log siapa yang menjalankan (opsional) if (auth()->check()) { Log::info('Git pull executed by user: ' . auth()->user()->email); } return back()->with('git_output', $output); } }