diff --git a/issue.md b/issue.md new file mode 100644 index 0000000..a30ec58 --- /dev/null +++ b/issue.md @@ -0,0 +1,335 @@ +# Issue: Peningkatan Bagian Proyek (Project Section Enhancement) + +## Deskripsi +Setiap kartu proyek perlu diperkaya dengan informasi tambahan: **tech stack**, **keterangan lengkap**, **interaksi klik untuk detail**, **tahun pengerjaan**, dan **target/pencapaian** yang berhasil tercapai. + +--- + +## Langkah-langkah Implementasi + +### Langkah 1 — Update Skema Prisma (Database) + +**File:** `prisma/schema.prisma` + +Tambahkan kolom baru pada model `Project`: + +```prisma +model Project { + // ... field yang sudah ada ... + + techStack String[] // array nama teknologi, e.g. ["Java", "Spring Boot", "PostgreSQL"] + year Int? // tahun pengerjaan, e.g. 2024 + highlights String[] // target/pencapaian, e.g. ["Reduce latency 40%", "10K daily users"] +} +``` + +Setelah edit schema, jalankan migrasi: +```bash +npx prisma migrate dev --name add_project_details +npx prisma generate +``` + +--- + +### Langkah 2 — Update Zod Schema Validasi + +**File:** `src/features/projects/project-schema.ts` + +Tambahkan field baru ke `projectSchema`: + +```ts +techStack: z.string().optional(), // dikirim sebagai string CSV dari form, e.g. "Java,Spring Boot,Docker" +year: z.coerce.number().optional(), +highlights: z.string().optional(), // dikirim sebagai string CSV, e.g. "Reduce latency 40%,10K users" +``` + +> Catatan: Field diproses sebagai CSV string di form, lalu di-parse menjadi `String[]` sebelum disimpan ke DB. + +--- + +### Langkah 3 — Update Server Action (Create & Update) + +**File:** `src/features/projects/actions.ts` + +Di fungsi `createProjectAction` dan `updateProjectAction`, tambahkan parsing: + +```ts +const rawTechStack = formData.get("techStack") as string; +const rawHighlights = formData.get("highlights") as string; + +// Di blok prisma.project.create / prisma.project.update: +techStack: rawTechStack ? rawTechStack.split(",").map(s => s.trim()) : [], +year: formData.get("year") ? Number(formData.get("year")) : null, +highlights: rawHighlights ? rawHighlights.split(",").map(s => s.trim()) : [], +``` + +--- + +### Langkah 4 — Update Form Admin (Tambah Field Baru) + +**File:** `src/features/projects/project-form.tsx` + +Tambahkan tiga input baru di dalam `
`: + +#### 4a. Tech Stack (input teks, pisahkan dengan koma) +```tsx +
+ + +

Pisahkan setiap teknologi dengan koma

+
+``` + +#### 4b. Tahun Pengerjaan (input number) +```tsx +
+ + +
+``` + +#### 4c. Pencapaian / Highlights (input teks, pisahkan dengan koma) +```tsx +
+ +