- Tambah model DiscussionCommentFile dengan relasi ke DiscussionComment
- Jalankan migrasi 20260609083038_add_discussion_comment_file
- POST komentar mendukung multipart/form-data untuk upload file (backward compatible)
- GET cat=komentar menyertakan data DiscussionCommentFile dalam response
- Endpoint /village-report kini menghitung activity_count periode saat ini
dan prev_activity_count periode sebelumnya dalam satu query (doubleRange)
- Tambahkan kalkulasi trend persentase perubahan antar periode
- Sertakan data perbekel, active_users, inactive_users, lastActivity, dan daysSince
- Tambahkan endpoint /export-logs dan /export-users untuk ekspor CSV
Both endpoints now accept ?range=7|30|90 (default 7).
comparison-activity result now follows SQL ORDER BY instead of being
remapped through villages array.
- project/task approval: filter isApprover berdasarkan desa + group project
- project/task approval: supadmin tetap hanya filter desa
- division/task approval: expose idGroup dari Division pada response cat=data
- division/task approval: filter isApprover berdasarkan desa + group division
- division/task approval PUT: ganti getApproverStatus dengan cek langsung
berdasarkan village, group, dan keanggotaan division admin
- GET /mobile/village-calendar: ambil acara divisi dan kegiatan se-village per tanggal
- GET /mobile/village-calendar/indicator: dot indikator per bulan, task di-expand per hari dalam range dateStart-dateEnd
- tambah model ProjectTaskApproval dan DivisionProjectTaskApproval di schema prisma
- tambah field isApprover pada model User
- tambah API approval project task: GET riwayat, POST ajukan, PUT setujui/tolak
- tambah API approval division task: GET riwayat, POST ajukan, PUT setujui/tolak
- notifikasi dikirim ke approver, admin divisi, dan submitter via FCM, web push, dan in-app
- tambah PATCH endpoint untuk toggle isApprover pada mobile user API
- perbaiki pengecekan role approver menggunakan UserRole.id