Files
lpj/database/migrations/2025_09_15_092525_create_sliks_table.php
Daeng Deni Mardaeni 20833213b1 feat(slik): implementasi sistem import SLIK dengan optimasi memory & timeout handling
- Menambahkan `SlikController.php` dengan method CRUD dan import data SLIK, termasuk logging detail & error handling
- Menambahkan `SlikImport.php` dengan Laravel Excel (ToCollection, WithChunkReading, WithBatchInserts, dll.)
- Optimasi memory dengan chunk processing (50 baris/chunk) dan batch insert (50 record/batch)
- Penanganan timeout menggunakan `set_time_limit` & memory limit configurable via config
- Implementasi queue processing untuk file besar (>5MB) dengan progress tracking
- Validasi file upload & data baris, skip header dari baris ke-5, serta rollback jika error
- Garbage collection otomatis setiap 25 baris, unset variabel tidak terpakai, dan logging usage memory
- Error handling komprehensif dengan try-catch, rollback transaksi, hapus file temp, dan logging stack trace
- Semua parameter (batch size, chunk size, memory limit, timeout, GC, queue threshold) configurable via config
- Diuji pada file besar (>50MB), memory stabil, timeout handling berfungsi, rollback aman, dan progress tracking valid
- Catatan: pastikan queue worker berjalan, monitor log progress, sesuaikan config server, dan backup DB sebelum import
2025-09-16 11:54:39 +07:00

89 lines
4.3 KiB
PHP

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration {
/**
* Run the migrations.
*
* Migration untuk membuat tabel sliks dengan semua field yang diperlukan
* berdasarkan header Excel yang diberikan untuk import data SLIK
*/
public function up(): void
{
Schema::create('sliks', function (Blueprint $table) {
$table->id();
// Field utama berdasarkan header Excel
$table->string('sandi_bank')->nullable(); // Sandi Bank
$table->string('tahun')->nullable(); // Tahun
$table->string('bulan')->nullable(); // Bulan
$table->string('flag_detail')->nullable(); // Flag Detail
$table->string('kode_register_agunan')->nullable(); // Kode Register Agunan
$table->string('no_rekening')->nullable(); // No Rekening
$table->string('cif')->nullable(); // CIF
$table->string('kolektibilitas')->nullable(); // Kolektibilitas
$table->string('fasilitas')->nullable(); // Fasilitas
$table->string('jenis_segmen_fasilitas')->nullable(); // Jenis Segmen Fasilitas
$table->string('status_agunan')->nullable(); // Status Agunan
$table->string('jenis_agunan')->nullable(); // Jenis Agunan
$table->string('peringkat_agunan')->nullable(); // Peringkat Agunan
$table->string('lembaga_pemeringkat')->nullable(); // Lembaga Pemeringkat
$table->string('jenis_pengikatan')->nullable(); // Jenis Pengikatan
$table->string('tanggal_pengikatan')->nullable(); // Tanggal Pengikatan
$table->string('nama_pemilik_agunan')->nullable(); // Nama Pemilik Agunan
$table->string('bukti_kepemilikan')->nullable(); // Bukti Kepemilikan
$table->text('alamat_agunan')->nullable(); // Alamat Agunan
$table->string('lokasi_agunan')->nullable(); // Lokasi Agunan
$table->string('nilai_agunan')->nullable(); // Nilai Agunan
$table->string('nilai_agunan_menurut_ljk')->nullable(); // Nilai Agunan Menurut LJK
$table->string('tanggal_penilaian_ljk')->nullable(); // Tanggal Penilaian LJK
$table->string('nilai_agunan_penilai_independen')->nullable(); // Nilai Agunan Penilai Independen
$table->string('nama_penilai_independen')->nullable(); // Nama Penilai Independen
$table->string('tanggal_penilaian_penilai_independen')->nullable(); // Tanggal Penilaian Penilai Independen
$table->string('jumlah_hari_tunggakan')->nullable(); // Jumlah Hari Tunggakan
$table->string('status_paripasu')->nullable(); // Status Paripasu
$table->string('prosentase_paripasu')->nullable(); // Prosentase Paripasu
$table->string('status_kredit_join')->nullable(); // Status Kredit Join
$table->string('diasuransikan')->nullable(); // Diasuransikan
$table->text('keterangan')->nullable(); // Keterangan
$table->string('kantor_cabang')->nullable(); // Kantor Cabang
$table->string('operasi_data')->nullable(); // Operasi Data
$table->string('kode_cabang')->nullable(); // Kode Cabang
$table->string('nama_debitur')->nullable(); // Nama Debitur
$table->string('nama_cabang')->nullable(); // Nama Cabang
$table->string('flag')->nullable(); // Flag
// Standard Laravel fields
$table->timestamps();
$table->string('created_by')->nullable();
$table->string('updated_by')->nullable();
$table->string('deleted_by')->nullable();
$table->softDeletes();
// Indexes untuk performa query
$table->index(['sandi_bank']);
$table->index(['tahun']);
$table->index(['bulan']);
$table->index(['no_rekening']);
$table->index(['cif']);
$table->index(['kode_register_agunan']);
$table->index(['nama_debitur']);
$table->index(['kode_cabang']);
$table->index(['created_at']);
});
}
/**
* Reverse the migrations.
*
* Menghapus tabel sliks jika migration di-rollback
*/
public function down(): void
{
Schema::dropIfExists('sliks');
}
};