# Checklist operasional: login WorkPulse (FE + BE)

Bila Console menunjukkan **`localhost:8000/api/login`**, itu **bukan** FE WorkPulse di repo ini — baca: [`FE_DEPLOY_SALAH_URL_LOGIN.md`](FE_DEPLOY_SALAH_URL_LOGIN.md).

Masalah **bisa buka `/` tanpa login** (harusnya ke `/login`): [`FE_PROTEKSI_RUTE_TANPA_LOGIN.md`](FE_PROTEKSI_RUTE_TANPA_LOGIN.md) — **perbaikan di FE/SSR**, bukan tugas BE.

Masalah **500 pada `/_nuxt/...`**: [`FE_NUXT_ASSET_500.md`](FE_NUXT_ASSET_500.md). **Sinkron FE↔BE auth timeout / 504**: [`FE_SYNC_BE_AUTH_TIMEOUT.md`](FE_SYNC_BE_AUTH_TIMEOUT.md). Masalah **Enter / redirect login**: [`FE_LOGIN_ENTER_DAN_REDIRECT.md`](FE_LOGIN_ENTER_DAN_REDIRECT.md). **Tombol login stuck “Signing in…” / API tidak jawab**: [`BE_OPS_LOGIN_API_HANG.md`](BE_OPS_LOGIN_API_HANG.md) (BE/ops) + timeout klien di `composables/useAuth.ts`. **Login gagal / body EOF saat pakai `http://`**: Apache HTTP vhost harus redirect ke HTTPS dengan **308** (bukan 301), supaya `POST /workpulse-api/...` tidak kehilangan JSON; di FE ada plugin paksa HTTPS di klien. Lihat `deploy/apache/work.rycroftapparel.com.conf` dan `plugins/00-enforce-https.client.ts`.

Ketika user sudah isi email & password di `work.rycroftapparel.com` tetapi **tidak bisa masuk**, ikuti urutan berikut. **Tidak ada perubahan kode Go wajib** untuk skenario umum; yang sering bermasalah adalah **proses, jaringan, atau TLS**.

---

## 1. Pastikan binary API & PM2

```bash
cd /var/www/html/wp-system/BE
go build -o bin/api ./cmd/api/
# Setelah ubah .env BE:
pm2 delete workpulse-api && pm2 start ecosystem.config.cjs && pm2 save
```

Cek proses mendengarkan (default **`127.0.0.1:3040`**):

```bash
ss -tlnp | grep 3040
curl -sS -o /dev/null -w "%{http_code}" -X POST http://127.0.0.1:3040/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"fikri@softcomp.io","password":"SALAH"}'
# Harus 401 + JSON envelope, bukan connection refused.
```

---

## 2. Seed superadmin & password

User superadmin dari migration seed (contoh): **`fikri@softcomp.io`** / **`Bestari24!`**.

- Pastikan migration **`000002_superadmin_seed`** (atau setara) sudah di DB **`workpulse`**.
- Jika ragu password, reset lewat migrasi / SQL sesuai prosedur internal (hash bcrypt).

---

## 3. FE: build baru + proxy `/workpulse-api`

Browser memanggil **`POST /workpulse-api/api/v1/auth/login`** (same origin dengan situs `work`), lalu **Nuxt Nitro** meneruskan ke **`WORKPULSE_INTERNAL_API_ORIGIN`** (default `http://127.0.0.1:3040`).

Wajib setelah pull kode FE:

```bash
cd /var/www/html/wp-system/FE
npm run build
pm2 restart workpulse-fe --update-env
```

Uji dari **server yang sama** dengan Node:

```bash
curl -sS -X POST http://127.0.0.1:3020/workpulse-api/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"fikri@softcomp.io","password":"Bestari24!"}'
```

- Harus ada JSON `ok: true` dan token (bukan HTML, bukan 502).
- Jika **connection refused** ke `3040`: API tidak jalan atau port beda — sesuaikan **`WORKPULSE_INTERNAL_API_ORIGIN`** di env **FE** (bukan sekadar restart tanpa rebuild bila hanya ubah env Nuxt public).

---

## 4. Apache untuk `work.rycroftapparel.com`

VirtualHost harus mem-proxy **seluruh path** ke Nitro (termasuk `/workpulse-api/...`):

```apache
ProxyPass / http://127.0.0.1:3020/
ProxyPassReverse / http://127.0.0.1:3020/
```

Contoh ada di repo FE: `deploy/apache/work.rycroftapparel.com-ssl.conf`.

---

## 5. CORS & pemanggilan langsung ke `apiwork`

Jika nanti FE memakai **`NUXT_PUBLIC_WORKPULSE_API_BASE=https://apiwork.rycroftapparel.com`**:

- Sertifikat TLS **`apiwork`** harus valid (SAN sesuai host).
- Di **`.env` BE**, **`WORKPULSE_CORS_ORIGINS`** harus memuat origin FE, misalnya `https://work.rycroftapparel.com`.

Ini **bukan** penyebab ketika login hanya lewat proxy path (poin 3): request browser tidak ke domain `apiwork`.

---

## 6. Ringkas: apa yang “diubah di BE”?

| Masalah | Tindakan |
|--------|----------|
| `connection refused` ke 3040 | Jalankan / perbaiki PM2 **`workpulse-api`**, cek `WORKPULSE_API_ADDR` di `.env` BE |
| 401 invalid credentials | Email/password atau seed DB |
| 502 dari `/workpulse-api/...` | Nitro tidak sampai ke API — cek origin internal, firewall, port |
| TLS `apiwork` salah | Perbaiki vhost / Let’s Encrypt (infra), atau tetap pakai proxy FE |

Untuk detail error TLS di browser saat memanggil **langsung** `https://apiwork...`, lihat juga: `docs/FE_APIWORK_TLS_DAN_PROXY.md`.
