135dika / handover_verification_checklist.md

Last active 1 month ago

Like 0

Revision 14f00df013725a2ef9dc03e387c898279fbb953a

handover_verification_checklist.md Raw

Handover Backend → Frontend

Perubahan perilaku API hasil audit. Wajib dibaca sebelum update klien.

1. Pagination (BREAKING untuk klien yang andalkan "return semua")

Semua endpoint list kini dibatasi default 50 row per request.

  • Web verification-checks: GET / dan POST /find menerima query take & skip.
    • take di-clamp ke 1–100, skip ≥ 0.
    • Tanpa param → take: 50.
  • Mobile verification-checks: endpoint list (findManyByOwnerId) sama, default 50.

Untuk data lengkap: loop pakai skip/take, jangan harap semua row sekali jalan.

2. Status filter diperbaiki

Sebelumnya status=rejected maupun status=need_approval return semua row (bug).

Nilai status yang valid sekarang:

query status hasil
verified / approved hanya APPROVED
rejected hanya REJECTED
need_approval / need-approval hanya NEED_APPROVAL
tidak dikirim / tidak dikenal tanpa filter (semua)

3. Web category list — shape response berubah (BREAKING)

category.findAll (web) tidak lagi mengembalikan nested verificationChecks array. Response sekarang: field category + verifiedCounter.

Kalau UI memakai field nested itu, sesuaikan; counter masih tersedia.

4. Mobile category findOne — sekarang berfungsi

Dulu id param tidak terbaca (bug), endpoint selalu miss. Sekarang @Param('id') benar. Kalau sebelumnya ada workaround klien, hapus.

5. Mobile category import — return berisi

processImport dulu selalu return [] (bug). Sekarang berisi kategori hasil import.

6. Error handling

  • JSON body tidak valid → 400 Invalid JSON payload (dulu 500 unhandled).
  • Error tak terduga → 500 generik An unexpected error occurred. (detail Prisma tidak lagi bocor ke klien).

7. Upload

  • Maks 10 file per request, 10 MB per file (dulu praktis unlimited). Lebih → ditolak multer.
  • Ekstensi file dipaksa dari mimetype whitelist: jpg/jpeg/png/pdf saja. Upload dengan ekstensi aneh (mis. x.html berlabel image/png) ditolak.
  • Request JSON dibatasi 1 MB.

8. CORS (action needed per environment)

origin: '*' dihapus. Sekarang dari env:

CORS_ORIGINS="https://app.example.com,https://admin.example.com"
  • Tidak di-set → CORS mati (same-origin only) → browser frontend cross-origin akan block.
  • Wajib diisi di .env setiap environment sebelum deploy.

9. Env baru (ops)

REDIS_HOST="localhost"   # default localhost
REDIS_PORT="6379"        # default 6379
CORS_ORIGINS=""          # wajib diisi untuk akses cross-origin

Catatan backend (bukan urusan frontend)

  • prisma migrate dev perlu dijalankan (index baru + kolom panjang @db.Text). Belum ada migration.
  • Auth/JWT: sengaja belum diimplementasi (keputusan owner). Semua endpoint masih publik.