Update user status default to INACTIVE, add email verification check in login, and set email_verified_at for admin user in seeder

This commit is contained in:
Yoga Pangestu 2026-07-19 23:57:43 +07:00
parent 4458d352a2
commit 4fa2db2a3c
4 changed files with 11 additions and 1 deletions

View File

@ -1,4 +1,5 @@
Enum user_status {
INACTIVE
ONBOARDING
ACTIVE
SUSPENDED

View File

@ -17,7 +17,7 @@ class User(Base):
password: Mapped[str] = mapped_column(String(255))
email_verified_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
tenant_id: Mapped[str | None] = mapped_column(CHAR(36), nullable=True)
status: Mapped[str] = mapped_column(String(20), default="ONBOARDING")
status: Mapped[str] = mapped_column(String(20), default="INACTIVE")
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.now)
updated_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True, onupdate=datetime.now)
deleted_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)

View File

@ -23,6 +23,12 @@ def login(data: LoginRequest, db: Session = Depends(get_db)):
detail={"message": "Kredensial autentikasi tidak ada atau tidak valid."},
)
if user.email_verified_at is None:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail={"message": "Email belum diverifikasi. Silakan verifikasi email terlebih dahulu."},
)
access_token = create_access_token({"sub": user.id})
return LoginResponse(
access_token=access_token,

View File

@ -23,12 +23,15 @@ def seed_users(db, count: int = 5, tenant_ids: list[str] | None = None):
admin = db.query(User).filter(
(User.email == "project.pangestuyoga@gmail.com") | (User.username == "pangestu")
).first()
from datetime import datetime, timezone
if not admin:
admin = User(
email="project.pangestuyoga@gmail.com",
username="pangestu",
password=hash_password("Minimal8@"),
status="ACTIVE",
email_verified_at=datetime.now(timezone.utc),
)
db.add(admin)
db.flush()