Skip to content

fix(auth): accept role string + roles array + announcement pinned features - #63

Merged
iamutaki merged 9 commits into
mainfrom
staging
Oct 10, 2026
Merged

iamutaki merged 9 commits into
mainfrom
staging

Conversation

@iamutaki

@iamutaki iamutaki commented Oct 8, 2026

Copy link
Copy Markdown
Member

Summary

Backport dari ke :

Auth (Admin Users)

    • Validator menerima atau
    • Fixes console create admin user flow

Announcements (Pinned + bodyType)

Tests

  • All vitest passing (9/9 admin users, full suite)

Related issues: #3 (admin user role validation), #124 (announcement body_type)

iamutaki and others added 9 commits October 8, 2026 19:36
…on_url (#61)

- buildItem: body wire announcement = title (fallback 'Pengumuman'),
  bukan JSON payload beku - feed mobile tampil teks normal.
- validator announcement: host lock dihapus; https + URL valid cukup.
  Pembeda deep link in-app vs eksternal jadi tanggung jawab client.
- test: unit announcement-feed (2) + e2e host eksternal diizinkan.

Co-authored-by: Ibnul Mutaki <36250619+cacing69@users.noreply.github.com>
- schema + migration 0066: kolom body_type enum default plain.
- validator: body_type enum (create default plain, update optional);
  response announcement + feed wire announcement.bodyType.
- write-through payload feed ikut bawa bodyType (frozen copy).
- e2e: enum valid 200, invalid 400, default plain; unit feed 2 baru.
- 1147/1147 + tsc OK.

Co-authored-by: Ibnul Mutaki <36250619+cacing69@users.noreply.github.com>
- pinned_at: schema, migrasi 0068, listPinned publik, PATCH pinned_at
- notifikasi inbox kirim body_type (plain/html/md/webview) ke klien
- perbaiki listPinned: gt() drizzle (konversi detik) vs raw sql Date ms
- campaign: body_type + pin terkait

Co-authored-by: Cursor <cursoragent@cursor.com>
…an /:id

- updateAnnouncementBodySchema & create: field pinned_at (dibuang zod
  sebelumnya, pin dari console tidak pernah tersimpan)
- announcementItemSchema: pinned_at di response (console selalu tampil '-')
- listPinnedRoute didaftarkan sebelum getRoute (Hono match urutan,
  /pinned nyangkut di /:id = 400)
- e2e: pin/unpin end-to-end

Co-authored-by: Cursor <cursoragent@cursor.com>
Allow both legacy `role` string and new `roles` array in create admin user payload.
Normalizes to `roles` array internally. Fixes console create user flow.
toWire() activity.controller strip body_type dari objek announcement di
wire /activity - serializer kedua (serialize announcement.controller)
sudah benar. Akibatnya md/webview jatuh plain diam-diam di mobile: markdown
tidak render di detail dari jalur feed.

Assert di batas e2e (bentuk wire), bukan unit repo (assert objek domain -
celah yang bikin bug lolos).
…i feed & pinned (#124)

Kontrak webview kini terkunci e2e: create body_type=webview + body URL →
tersimpan utuh, feed /activity bawa body_type webview (serializer toWire
#64), /pinned juga. Fix assertion: cari tile feed by announcement.id,
bukan id compose.
item feed verifikasi merender 'Verifikasi · Verifikasi' karena
subtitleFor mengembalikan 'Verifikasi' sementara mobile sudah memakai
kindLabel 'Verifikasi' - meta = [kindLabel, subtitle].join(' · ').

suggestion_selfapply ikut terdampak lebih parah: kindLabel 'Usulan' +
subtitle 'Verifikasi' = 'Usulan · Verifikasi' (salah kategori).

Keduanya kini null. Test regresi e2e: verification.subtitle toBeNull.
@iamutaki
iamutaki merged commit 140dacb into main Oct 10, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant