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>
This commit is contained in:
2026-04-21 17:30:07 +08:00
parent cd295abf2c
commit d09a702d64
13 changed files with 545 additions and 202 deletions

View File

@@ -80,7 +80,6 @@ function AppErrorsPage() {
const [createForm, setCreateForm] = useState({
description: '',
app: appId,
status: 'OPEN',
source: 'USER',
affectedVersion: '',
device: '',
@@ -212,8 +211,7 @@ function AppErrorsPage() {
close()
setCreateForm({
description: '',
app: 'desa_plus',
status: 'OPEN',
app: appId,
source: 'USER',
affectedVersion: '',
device: '',
@@ -368,25 +366,13 @@ function AppErrorsPage() {
/>
</SimpleGrid>
<SimpleGrid cols={2}>
<TextInput
label="Version"
placeholder="e.g. 2.4.1"
required
value={createForm.affectedVersion}
onChange={(e) => setCreateForm({ ...createForm, affectedVersion: e.target.value })}
/>
<Select
label="Initial Status"
data={[
{ value: 'OPEN', label: 'Open' },
{ value: 'ON_HOLD', label: 'On Hold' },
{ value: 'IN_PROGRESS', label: 'In Progress' },
]}
value={createForm.status}
onChange={(val) => setCreateForm({ ...createForm, status: val as any })}
/>
</SimpleGrid>
<TextInput
label="Version"
placeholder="e.g. 2.4.1"
required
value={createForm.affectedVersion}
onChange={(e) => setCreateForm({ ...createForm, affectedVersion: e.target.value })}
/>
<SimpleGrid cols={2}>
<TextInput
@@ -525,7 +511,7 @@ function AppErrorsPage() {
</Group>
<Group gap="md">
<Text size="xs" c="dimmed">
{new Date(bug.createdAt).toLocaleString()} {bug.app?.toUpperCase()} v{bug.affectedVersion}
{new Date(bug.createdAt).toLocaleString()} {bug.appId?.toUpperCase()} v{bug.affectedVersion}
</Text>
</Group>
</Box>