Files
AbelBirdNest-Stock/docs/codex-handoff-2026-05-21.md

10 KiB

Codex Handoff - 2026-05-21

Dokumen ini menyimpan konteks kerja terbaru setelah rangkaian patch mobile, login publik, global search, locking satuan, dan workflow deploy artifact Linux.

Status Umum

  • App aktif dikembangkan di Next.js + Prisma + PostgreSQL.
  • Branch aktif: main
  • Repo remote utama: https://git.iptek.co/wirabasalamah/AbelBirdNest-Stock.git
  • Server target production saat ini: /var/www/abelbirdnest-web/AbelBirdNest-Stock

Ringkasan Perubahan Terbaru

1. Flow Mobile Purchase

2. Formatting Qty dan Currency

  • Formatting kg sekarang locale-aware.
  • Angka hasil konversi gram ke kilogram tampil dengan format Indonesia yang benar, misalnya 10,5 kg.
  • Currency di beberapa modul tidak lagi hardcoded dan mengikuti currency_code sistem.
  • File sentral:

3. Dashboard Qty Fix

  • Dashboard sebelumnya salah menampilkan angka seperti 94.290 kg untuk data gram yang seharusnya dibaca sebagai 94,29 kg.
  • Perbaikan dilakukan dengan konversi qty berbasis unit.code sebelum agregasi.
  • File utama:

5. Global Search Header

6. Master Satuan Dikunci

Prisma dan Build Cross-Platform

  • Local Mac sempat rusak karena build Linux menimpa hasil prisma generate.
  • Generator Prisma sekarang mencakup:
    • native
    • darwin-arm64
    • debian-openssl-3.0.x
    • linux-musl-openssl-3.0.x
  • File:

Workflow Deploy Artifact Linux

  • Build di server sempat berat dan tidak stabil.
  • Sekarang ada workflow artifact standalone Linux.
  • Script:
  • Karakteristik workflow ini:
    • build di Docker Alpine Linux agar cocok dengan server Alpine
    • install openssl di container
    • pakai NODE_OPTIONS=--max-old-space-size=4096
    • copy source ke /work agar tidak menimpa node_modules lokal Mac
    • artifact final memakai timestamp: abelbirdnest-release-YYYYMMDD-HHMMSS.tar.gz
  • Artifact final tidak membawa .env.production lokal.

Catatan Tambahan 2026-05-26

  • Server production memakai Alpine Linux dengan RAM sekitar 1 GB.
  • Jangan compile/build di server.
  • Artifact harus dibuat dari container Alpine, default script sekarang memakai node:20-alpine.
  • Runtime server Alpine perlu nodejs dan openssl.
  • Ukuran artifact runtime-only yang normal sekitar 43 MB.
  • Jika artifact membengkak sekitar 120 MB+, kemungkinan Prisma CLI atau node_modules lengkap ikut terbawa. Jangan pakai varian besar itu untuk server 1 GB kecuali memang sengaja.
  • Artifact runtime-only tidak dipakai untuk menjalankan prisma migrate deploy di server. Untuk update UI/app tanpa perubahan schema DB, cukup extract release baru lalu restart service.
  • Jika nanti ada migration database, jalankan migration dari mesin build/admin yang punya dependency lengkap dan akses DB production, bukan dari server kecil.

Catatan Deploy Server Saat Ini

  • Path app aktif di server production saat ini: /opt/abelbirdnest-web
  • Struktur release yang dipakai sekarang diasumsikan:
    • upload artifact ke root app server: /opt/abelbirdnest-web
    • extract ke releases/<timestamp>
    • symlink current diarahkan ke release aktif
  • Folder aktif runtime: /opt/abelbirdnest-web/current
  • Service server memakai OpenRC, bukan systemd.
  • Service OpenRC production yang ditemukan:
    • directory="/opt/abelbirdnest-web/current"
    • command="/usr/bin/node"
    • command_args="/opt/abelbirdnest-web/current/server.js"
    • env yang dicek service: /opt/abelbirdnest-web/current/.env
  • Karena service mencari .env di folder current, setiap release baru perlu copy .env dari release/current lama ke folder release baru sebelum current diarahkan ke release baru.
  • Jangan gunakan path lama /var/www/abelbirdnest-web/AbelBirdNest-Stock untuk server ini kecuali service production memang sudah diubah.

Command Manual Deploy Yang Dipakai

Di lokal:

scp abelbirdnest-release-YYYYMMDD-HHMMSS.tar.gz abelbirdnest@SERVER_IP:/opt/abelbirdnest-web/

Di server:

cd /opt/abelbirdnest-web
RELEASE_NAME=YYYYMMDD-HHMMSS
mkdir -p /opt/abelbirdnest-web/releases/$RELEASE_NAME
tar -xzf /opt/abelbirdnest-web/abelbirdnest-release-$RELEASE_NAME.tar.gz -C /opt/abelbirdnest-web/releases/$RELEASE_NAME
cp /opt/abelbirdnest-web/current/.env /opt/abelbirdnest-web/releases/$RELEASE_NAME/.env
mv /opt/abelbirdnest-web/current /opt/abelbirdnest-web/current-backup-$(date +%Y%m%d-%H%M%S) 2>/dev/null || true
ln -sfn /opt/abelbirdnest-web/releases/$RELEASE_NAME /opt/abelbirdnest-web/current
sudo chown -R abelbirdnest:abelbirdnest /opt/abelbirdnest-web
sudo rc-service abelbirdnest-web restart
sudo rc-service abelbirdnest-web status
curl -I http://127.0.0.1:3007/login

Jika ln -sfn ... current gagal dengan pesan File exists, berarti current masih folder biasa. Backup/rename folder itu dulu, lalu ulangi ln -sfn.

Verifikasi yang Sudah Dilakukan

  • npx tsc --noEmit lolos setelah patch terbaru.
  • Global search endpoint mengembalikan hasil yang benar untuk sample data lokal.
  • GET /api/v1/units sekarang hanya mengembalikan gr dan kg.
  • POST /api/v1/units sekarang ditolak dengan pesan lock master.

Risiko / Catatan yang Masih Relevan

  • Build standalone lokal tetap menampilkan warning Prisma saat static generation jika DB lokal tidak aktif; warning ini tidak menggagalkan artifact.
  • Production deploy sekarang punya dua mode historis:
    • mode lama repo root + npm run start
    • mode baru artifact standalone + node server.js Jangan campur keduanya pada instruksi deploy.
  • Beberapa endpoint mobile/receipts/** masih ada untuk kompatibilitas lama, walaupun flow mobile baru tidak lagi menampilkan menu receipt.

Langkah Lanjutan Paling Masuk Akal

  1. Deploy artifact terbaru ke server production.
  2. Verifikasi:
    • search header aktif
    • halaman publik login aktif
    • Satuan tidak muncul di menu
    • GET /api/v1/units hanya gr dan kg
  3. Jika perlu, lanjut bersihkan endpoint legacy yang sudah tidak dipakai lagi, terutama sekitar receipt mobile lama.

Catatan Penutup