2.8 KiB
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 → statusONBOARDING - 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 statusINACTIVEsecara 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
- Sebelum:
5. Buat EmailVerificationToken Model
- Model baru:
EmailVerificationToken - Relasi dengan User
- Expires 24 jam
6. Tambah Fungsi Email Verifikasi
send_verification_email()diemail_service.py- Template email verifikasi
7. Tambah Endpoint Verifikasi Email
POST /auth/verify-email— verifikasi token, setemail_verified_atdanstatus=ONBOARDINGPOST /auth/send-verification— kirim ulang link verifikasiGET /auth/me— get current user (dengan profile)
8. Auth Dependency
dependencies.py—get_current_user()untuk proteksi endpoint
9. Auto-Assign User saat Create Tenant
POST /tenantssekarang 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 ONBOARDING → INACTIVE |
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)