# 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_URL="redis://default:password@localhost:6379" # prioritas; support username+password #REDIS_HOST="localhost" # fallback kalau REDIS_URL kosong #REDIS_PORT="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.