3.6 KiB
3.6 KiB
TASK: Phase 1 - Implementasi Skema Inti & API Endpoints
ID: TASK-DB-001
Konteks: Database Implementation
Status: ✅ COMPLETED (95% Selesai)
Prioritas: 🔴 KRITIS (Blokade Fitur)
Estimasi: 7 Hari Kerja
🎯 OBJEKTIF
Mengganti mock data pada fitur-fitur inti (Kinerja Divisi, Pengaduan, Kependudukan) dengan data riil dari database PostgreSQL melalui Prisma ORM dan menyediakan endpoint API yang type-safe menggunakan ElysiaJS.
📋 DAFTAR TUGAS (TODO)
1. Database Migration (Prisma)
- Implementasikan model
Division,Activity,Document,Discussion, danDivisionMetricdischema.prisma. - Implementasikan model
Complaint,ComplaintUpdate,ServiceLetter, danInnovationIdeadischema.prisma. - Implementasikan model
ResidentdanBanjardischema.prisma. - Implementasikan model
Eventdischema.prisma. - Jalankan
bun x prisma migrate dev --name init_core_features. - Lakukan verifikasi relasi database di database viewer (Prisma Studio).
2. Seeding Data
- Update
prisma/seed.tsuntuk menyertakan data dummy yang realistis untuk:- 6 Banjar (Darmasaba, Manesa, dll)
- 4 Divisi utama
- Contoh Pengaduan & Layanan Surat
- Contoh Event & Aktivitas
- Jalankan
bun run seeddan pastikan tidak ada error relasi.
3. Backend API Development (ElysiaJS)
- Buat route handler di
src/api/untuk setiap modul:division.ts: CRUD Divisi & Aktivitascomplaint.ts: CRUD Pengaduan & Update Statusresident.ts: Endpoint untuk statistik demografi & list penduduk per banjarevent.ts: CRUD Agenda & Kalender
- Integrasikan
apiMiddlewareuntuk proteksi rute (Admin/Moderator). - Pastikan skema input/output didefinisikan menggunakan
t.Objectuntuk OpenAPI documentation.
4. Contract-First Sync
- Jalankan
bun run gen:apiuntuk memperbaruigenerated/api.ts. - Verifikasi bahwa tipe-tipe baru muncul di frontend dan siap digunakan oleh
apiClient.
5. Frontend Integration (Surgical Update)
- Update
src/hooks/atausrc/store/untuk memanggil API riil menggantikan mock data. - Sambungkan komponen berikut ke API:
DashboardContent: Stat cards (Selesai)KinerjaDivisi: Division List & Activity Cards (Selesai)PengaduanLayananPublik: Statistik & Tabel Pengajuan (Selesai)DemografiPekerjaan: Grafik & Data per Banjar (Pending - Next Step)
🛠️ INSTRUKSI TEKNIS
Penanganan Relasi Prisma
Gunakan transaksi atau onDelete: Cascade pada relasi yang bergantung secara total (misal: Activity ke Division) untuk menjaga integritas data.
Struktur API Route
Contoh struktur yang diharapkan untuk src/api/division.ts:
export const divisionRoutes = new Elysia({ prefix: '/division' })
.get('/', () => db.division.findMany({ include: { activities: true } }))
.post('/', ({ body }) => db.division.create({ data: body }), {
body: t.Object({ ... })
})
✅ DEFINITION OF DONE (DoD)
- Skema database berhasil dimigrasi tanpa error.
- API Endpoints muncul di
/api/docs(Swagger). bun run test(API tests) berhasil untuk endpoint baru.- Frontend menampilkan data riil dari database (bukan mock) pada rute yang ditentukan.
- Performa query optimal (tidak ada N+1 problem pada relasi Prisma).
📝 CATATAN
- Fokus pada READ operations terlebih dahulu agar dashboard bisa tampil.
- Fitur WRITE (Create/Update) bisa diimplementasikan secara bertahap setelah tampilan dashboard stabil.
- Jangan lupa update
GEMINI.mdjika ada perubahan pada alur pengembangan.