api/docs/history/2026-07-25-user-status-flow.md

2.8 KiB

Perubahan Flow Status User

Tanggal: 2026-07-25 Status: Selesai

Tujuan

Menerapkan flow status user yang baru:

  • Register via Google → status ONBOARDING
  • Register manual → status INACTIVE → verifikasi email → status ONBOARDING
  • Setelah isi onboarding → status ACTIVE

Yang Dikerjakan

1. Ubah Default Status User di Model

  • Sebelum: default="ONBOARDING"
  • Sesudah: default="INACTIVE"

2. Hapus Field Status dari UserCreate Schema

  • Status tidak perlu dikirim dari frontend, diatur oleh backend

3. Ubah Status di Register Endpoint

  • POST /auth/register: Set status INACTIVE secara eksplisit
  • Generate dan kirim verification token + email

4. Ubah Status di Google Login Endpoint

  • POST /auth/google-login:
    • Sebelum: status="ACTIVE"
    • Sesudah: status="ONBOARDING" (user baru)
    • Existing user tidak diubah statusnya

5. Buat EmailVerificationToken Model

  • Model baru: EmailVerificationToken
  • Relasi dengan User
  • Expires 24 jam

6. Tambah Fungsi Email Verifikasi

  • send_verification_email() di email_service.py
  • Template email verifikasi

7. Tambah Endpoint Verifikasi Email

  • POST /auth/verify-email — verifikasi token, set email_verified_at dan status=ONBOARDING
  • POST /auth/send-verification — kirim ulang link verifikasi
  • GET /auth/me — get current user (dengan profile)

8. Auth Dependency

  • dependencies.pyget_current_user() untuk proteksi endpoint

9. Auto-Assign User saat Create Tenant

  • POST /tenants sekarang require auth
  • Setelah create tenant, auto-assign user ke tenant dan set status ACTIVE

File yang Diubah

File Aksi Detail
app/models/user.py Diubah Default status ONBOARDINGINACTIVE
app/models/email_verification_token.py Dibuat Model token verifikasi email
app/models/__init__.py Diubah Export EmailVerificationToken
app/schemas/user.py Diubah Hapus status dari UserCreate
app/schemas/auth.py Diubah Tambah VerifyEmailRequest, SendVerificationRequest
app/services/email_service.py Diubah Tambah send_verification_email()
app/dependencies.py Dibuat Auth dependency get_current_user
app/routers/auth.py Diubah Status INACTIVE di register, ONBOARDING di google, tambah verify/send-verification/me
app/routers/tenants.py Diubah Auth dependency di create tenant, auto-assign user
app/services/tenant_service.py Tidak diubah (assign_user_to_tenant sudah ada)

Notes

  • Admin seeder tetap menggunakan ACTIVE untuk admin user
  • UserFactory tetap menggunakan ACTIVE untuk test data
  • Email verifikasi dikirim via Resend API (sama dengan forgot password)
  • Jika gagal kirim email, register tetap berhasil (error email diabaikan dengan try/except)