Commit Graph

78 Commits

Author SHA1 Message Date
b7aecea433 feat: nama desa di activity logs bisa diklik menuju village detail 2026-05-28 14:18:08 +08:00
2e64c1c2a6 feat: tambah stale villages alert card di halaman overview desa-plus 2026-05-28 14:14:40 +08:00
3c188e66d2 feat: tambah kolom Last Activity di tabel user management desa-plus 2026-05-28 14:09:46 +08:00
501fbde118 fix: perbaiki layout tabel dan accordion di layar sempit
Co-authored-by: amaliadwiy <amaliadwiy@users.noreply.github.com>
2026-05-26 15:11:25 +08:00
fe4ddf686e fix: perbaiki layout tabel User Management agar tidak overflow di layar sempit 2026-05-26 15:00:47 +08:00
fe83fd6025 fix: perbaiki layout accordion header Bug Reports agar badge status selalu terlihat 2026-05-26 14:50:47 +08:00
457f36be06 fix: perbaiki layout filter Activity Logs agar tidak overflow 2026-05-26 14:43:59 +08:00
5002fd1519 fix: perbaiki layout table Recent Error Reports di dashboard
Kolom App, Version, Reported, dan Status tidak lagi wrap atau terpotong.
Tambah horizontal scroll pada container dan minWidth pada table.
2026-05-26 14:37:28 +08:00
f368e1d31b feat: bug statistics + village detail dashboard enhancement
- Tambah GET /api/bugs/stats dengan summary cards & chart trend/bugs per app
- Tambah date range picker di village activity chart
- Tambah tabel Recent Activity (action + description) di village detail
- Update API graph-log-villages support dateFrom/dateTo custom range
2026-05-25 15:00:33 +08:00
a19846f589 feat: copy full API key on-demand di halaman dev
Sebelumnya copy button mengcopy key yang sudah ter-mask dari list endpoint
Desa+ API. Sekarang klik copy fetch full key via GET /api-keys/:id lalu
salin ke clipboard.
2026-05-25 11:59:54 +08:00
e32addbc85 feat: notifikasi real-time bug baru via WebSocket
- presence.ts: tambah notifSubs (ADMIN+DEVELOPER) dan broadcastNotification
- app.ts: broadcast new_bug event setelah bug dibuat, update WS handler
- usePresence: terima callback onNewBug, expose NewBugPayload type
- DashboardLayout: pasang usePresence, tampilkan Mantine notification saat bug baru masuk
2026-05-25 11:35:21 +08:00
8c33003b17 feat: debounce search, tambah filter source & date range di bug-reports, hapus seafile.ts
- Debounce search input (400ms, min 3 karakter) sesuai konvensi
- Tambah filter source (QC/SYSTEM/USER) dan date range di bug-reports
- Backend /api/bugs support query param source, dateFrom, dateTo
- Update API_URLS.getBugs dengan param baru
- Hapus seafile.ts (dead code, tidak digunakan)
2026-05-25 11:31:37 +08:00
7d879d1901 feat: add show/hide and copy for API keys on dev page
- Display client key and server key on Settings app cards with toggle
  visibility and copy button
- Hide API keys table in Desa Mandiri Keys tab behind toggle + copy
- Add eye toggle to password inputs in Add App and Edit API Config
  modals
- Backend now returns apiKey and clientApiKey in apps list endpoint
2026-05-22 17:10:36 +08:00
0846ac924c feat: time range selector & area chart improvements
- Add 7D/30D/3M toggle on Daily Activity and Comparison Between Villages charts
- Switch LineChart to AreaChart with fillOpacity 0.4 for bold gradient fill
- Fix broken tooltip on all charts with custom dark card content
- Apply consistent chart style (tickLine, gridAxis, glow) to village detail page
- api.ts: getDailyActivity and getComparisonActivity now accept range param
2026-05-22 14:16:31 +08:00
91dead0082 fix: resolve 5 bugs on app overview page
- Migrate useQuery to useSWR for consistency (no mixed fetching)
- Fix trend badge: guard against undefined grid and NaN comparison
- Fix trend badge: hide when increase is exactly 0
- Fix version modal: use gridRef so background refetch cannot overwrite user edits
- ErrorDataTable: migrate to useSWR, expose refresh() via forwardRef so the
  refresh button at the top also reloads the error table
2026-05-22 12:15:42 +08:00
0afc2e271a feat: improve logs page with debounce, action/village/date filters, and timestamp fix 2026-05-22 11:37:37 +08:00
603a0a04b7 feat: server-side filter, village filter, and sortable columns on users page 2026-05-22 11:17:38 +08:00
ed9f59f404 feat: add status and role filter on users page 2026-05-22 11:07:01 +08:00
b79c63a5e8 refactor: improve users page code quality
- extract shared UserFormFields component to eliminate form duplication between Add and Edit modals
- debounce search input (400ms) to prevent excessive API calls
- fix validation messages to show human-readable labels instead of internal field names
- fix pagination visibility condition (totalPage > 1)
- remove unused TbEdit import
2026-05-22 11:04:56 +08:00
058dd95b4f refactor: rename and reorder dev panel tabs for clarity
- Rename "API Keys" → "Desa Mandiri Keys" (tab + panel title + description)
- Rename "Settings" → "App Config" (tab + panel title)
- Move "Desa Mandiri Keys" to last position with a divider separator
- Import Divider from @mantine/core
2026-05-20 12:32:06 +08:00
f98fb51cfd feat: tambah field isApprover pada edit user modal 2026-05-18 16:42:32 +08:00
3b8eabc111 fix: gender select value M/F instead of Male/Female 2026-05-18 16:31:43 +08:00
2cb061ea7f upd: setting api key sistem desa mandiri 2026-05-13 17:23:27 +08:00
6fdcc7f6ec fix: import logo as asset instead of hardcoded /src path 2026-05-12 15:00:44 +08:00
fced7d4c1c feat: show isDummy flag on village detail and list pages 2026-05-12 14:10:29 +08:00
b39d1d5099 fix: update reset filters button style and remove filter icon 2026-05-12 11:47:48 +08:00
f926ab2701 feat: add colored top border to stats cards 2026-05-07 12:21:08 +08:00
032386a549 feat: redesign login and splash screen with playful visual lift 2026-05-07 12:08:34 +08:00
f469faf740 fix: add Secure flag to session cookies in production 2026-05-07 11:12:30 +08:00
a73dcb1e89 refactor: simplify app status and response shape in API
Derive status from app.active flag instead of maintenance/bugs heuristic.
Remove version, minVersion, and maintenance from list/detail response
as these are fetched separately via the grid overview endpoint.
2026-05-05 12:43:36 +08:00
ef852842b4 feat: improve UI/UX consistency across all dashboard pages
Apply uniform design system across all routes and components:
- Consistent header pattern with gradient-text titles, dimmed subtitles
- Loader type="dots" replacing text-based loading states
- Icon + text empty/error states with Paper+glass containers
- Full STATUS_COLOR/STATUS_LABEL maps for all BugStatus values
- dayjs timestamps, Tooltip on action icons, size="sm" on badges/pagination
- Modals with overlayProps blur and gradient save buttons
- Replace left-border Papers with clean Stack headers
- Translate all remaining Indonesian UI strings to English
- New monitoring-themed SVG logo and redesigned splash screen
2026-05-05 12:42:41 +08:00
722bca8a61 refactor: replace global API_KEY with per-app clientApiKey
Remove global API_KEY env var and its validation in checkAuth.
Auth via x-api-key now exclusively uses clientApiKey per-app
validated inline on POST /api/bugs.
2026-04-30 15:16:54 +08:00
6124ee5bf6 fix: show today timestamp as single line on activity logs 2026-04-30 14:57:27 +08:00
40a5f38eaf feat: add clientApiKey per-app for mobile bug submission 2026-04-30 13:50:29 +08:00
4e9d5964ae feat: merge url_api & api_key to App, add application settings page 2026-04-30 11:28:25 +08:00
5050835d81 upd: tambah notifikasi success/error saat simpan Settings
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 15:54:38 +08:00
d17b49cf8f upd: gabungkan Settings menjadi 1 form dengan tombol Simpan Semua
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 15:51:51 +08:00
8bcb30a85b feat: tambah API Key Desa Plus ke Settings panel dan proxy
- Tambah kolom API_KEY_DESA_PLUS di CONFIG_DEFINITIONS (ditampilkan sebagai password field)
- Proxy otomatis menyertakan X-API-Key header jika API key sudah dikonfigurasi

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 15:51:09 +08:00
ccc43e0c96 feat: runtime config via DB — ganti VITE_URL_API_DESA_PLUS dengan proxy
- Tambah model AppConfig (key-value) ke schema + migration
- Tambah GET/PUT /api/admin/config (DEVELOPER only)
- Tambah proxy /api/proxy/desa-plus/* yang baca URL dari DB
- Hapus VITE_URL_API_DESA_PLUS dari frontend, ganti semua URL desa-plus ke relative proxy path
- Aktifkan Settings tab di /dev dengan UI untuk set URL_API_DESA_PLUS

URL desa-plus kini bisa diubah via /dev → Settings tanpa rebuild image.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 15:47:21 +08:00
b63117694b feat: add /api/system/version endpoint with changelog
Mengembalikan versi aplikasi, git commit hash, branch aktif, dan 20 commit terakhir untuk memverifikasi apakah staging/production sudah terupdate.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 13:56:23 +08:00
06794524fd feat: block inactive users from login and fix activity log on dev operators
- Block inactive users on email/password login (403)
- Block inactive users on Google OAuth (redirect to account_disabled)
- Auto-logout inactive users on session check (deleteMany sessions)
- Delete sessions when user is deactivated via PATCH /api/operators/:id
- Add account_disabled error message on login page
- Show inactive indicator on users table with reactivate button
- Add createSystemLog calls to /api/admin/users role and activate endpoints

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 11:58:31 +08:00
73aa9729b8 upd: remove Settings menu item from DashboardLayout user menu
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 11:39:13 +08:00
7c5a491ba9 upd: update role management descriptions and add USER role card
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 11:33:39 +08:00
3c6fac1943 feat: redesign /logs page with table UI and date range filter
- Replace timeline view with table layout (Time, Operator, Type, Message)
- Add date range filter using @mantine/dates DatePickerInput
- Add SegmentedControl for log type filter
- Disable App Logs and Settings menu on /dev
- Remove Activity Logs menu from /dev (moved to /logs)
- Add dateFrom/dateTo query params to /api/logs backend
- Import @mantine/dates/styles.css to fix datepicker styling

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 11:27:05 +08:00
b03f267743 upd: routing dev 2026-04-28 17:34:45 +08:00
94724a5081 feat: add Google OAuth login with USER role and pending approval flow
- Add GET /api/auth/google and GET /api/auth/callback/google routes with CSRF state protection and account linking via googleId
- Add getPublicOrigin() for dynamic redirect_uri (supports reverse proxy via X-Forwarded-Proto)
- Add USER role to schema (default for new Google sign-ins), make password optional, add googleId and image fields
- Role-based redirect after login: USER → /profile, ADMIN/DEVELOPER → /dashboard
- Profile page shows pending approval alert for USER role
- Dashboard redirects USER role back to profile
- Login page shows specific error messages per OAuth error code

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 15:06:13 +08:00
63c0a6acff feat: image upload & preview untuk bug reports via MinIO
- Upload hingga 3 gambar per bug report (FileInput multi-select)
- Backend: POST /api/upload/image → MinIO, GET /api/bugs/images → presigned URL redirect
- Auto-create bucket jika belum ada saat server start
- Preview gambar fullscreen saat thumbnail diklik
- Diterapkan di /bug-reports dan /apps/$appId/errors
- Migrasi storage dari Seafile ke MinIO (minio SDK v8)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 17:36:32 +08:00
041d891a8d upd: stack trace hide/show toggle and date format DD/MM/YYYY 24h
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-22 17:25:50 +08:00
d09a702d64 upd: swagger docs, api key auth, bug fixes
- tambah Elysia Swagger di /docs dengan deskripsi lengkap semua endpoint
- tambah API key auth (X-API-Key) untuk klien eksternal di POST /api/bugs
- tambah normalisasi BugSource: SYSTEM/USER untuk eksternal, QC/SYSTEM/USER untuk dashboard
- perbaiki source schema jadi optional string agar tidak reject nilai unknown dari klien lama
- hapus field status dari form create bug (selalu OPEN)
- perbaiki typo desa_plus → appId di apps.$appId.errors.tsx
- tambah toggle hide/show stack trace di bug-reports.tsx dan apps.$appId.errors.tsx
- perbaiki grafik desa (width(-1)/height(-1)) dengan minWidth: 0 pada grid item
- perbaiki error &[data-active] inline style di DashboardLayout → pindah ke CSS class
- update CLAUDE.md dengan arsitektur lengkap

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-21 17:30:07 +08:00
e6dfac1ffe upd: fix graphic data 2026-04-16 11:47:19 +08:00