一键导入
feature-import-excel
Workflow untuk menambahkan fitur import data melalui file Excel pada modul CRUD existing.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Workflow untuk menambahkan fitur import data melalui file Excel pada modul CRUD existing.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Workflow untuk fitur non-standar seperti Dashboard, Settings, User Management, atau Halaman Khusus.
Panduan refactor khusus Backend (Laravel)
Panduan refactor E2E test per modul menggunakan shared test factories, termasuk pertimbangan refactoring frontend/backend agar testing konsisten.
Panduan refactor khusus Frontend (React SPA)
Panduan membuat unit test, feature test, dan e2e test sesuai pola codebase.
Panduan membuat migration, seeder, dan factory sesuai standar Laravel.
| name | Feature Import Excel |
| description | Workflow untuk menambahkan fitur import data melalui file Excel pada modul CRUD existing. |
Skill ini digunakan untuk menambahkan fitur Import (biasanya via .xlsx, .xls, .csv) pada modul CRUD yang sudah ada. Arsitektur fitur import ini mengadopsi pola yang digunakan pada modul Employee dan Supplier.
Sebelum membuat file, pelajari modul target:
department_id mereferensikan tabel departments. Di excel, user akan mengisi Nama Department, bukan ID.Fitur import membutuhkan 4 komponen utama di backend:
app/Imports/{Module}Import.php)Gunakan library Maatwebsite\Excel.
ToCollection, WithHeadingRow, SkipsEmptyRows.__construct() menggunakan pluck('id', 'name') untuk mencegah query N+1 di dalam looping import.importedCount, skippedCount, dan detail errors (array assoc dengan keys row, field, message).app/Actions/{Modules}/Import{Modules}Action.php)Class logika yang meng-orkestrasikan proses import.
UploadedFile.Excel::import(new {Module}Import, $file).imported, skipped, errors) yang diambil dari class Importer.app/Http/Requests/{Modules}/Import{Module}Request.php)Memvalidasi file upload.
'file' => 'required|file|mimes:xlsx,xls,csv,txt|max:10240' (Max 10MB).{Module}Controller.php. Tambahkan method:
use App\Actions\{Modules}\Import{Modules}Action;
use App\Http\Requests\{Modules}\Import{Module}Request;
use Illuminate\Http\JsonResponse;
public function import(Import{Module}Request $request): JsonResponse
{
$summary = (new Import{Modules}Action())->execute($request->file('file'));
return response()->json($summary);
}
Gunakan import di header file. Jangan tulis FQCN seperti \App\Actions\... atau \Illuminate\... langsung di body method.routes/api/{module}.php. Tambahkan route POST:
Route::post('{slug}/import', [Controller::class, 'import'])
->name('{slug}.import')
->middleware('permission:{slug}.create,true');
Import{Module}Dialog.tsx (atau re-use generic ImportDialog.tsx jika ada).
.xlsx kosong yang hanya berisi Heading sesuai format Import, diletakkan pada folder /public/templates/ (misal /templates/import_{module}.xlsx), atau di-generate on the fly di backend/frontend (jika diminta spesifik).{module}/index.tsx.useMutation) dengan endpoint /api/{slug}/import.tests/Feature/{Modules}/{Module}ImportTest.php)->group('{slug}') wajib ada di level atas (pest file).422 jika bukan file valid.Sanctum, Storage, Excel, Carbon, dan model terkait di header file. Hindari FQCN seperti \Laravel\Sanctum\Sanctum::actingAs(...) atau \Illuminate\Support\Facades\Storage::fake(...) di body test.tests/e2e/{slug}/{module}.spec.ts)