Bỏ qua nội dung

Vô hiệu hoá tài khoản cá nhân trên web

Feature URL
Module
user
Status
in-development
Priority
P2
Platforms
fe · be
AC progress
5 / 10
Last reviewed
2026-05-29

Mục tiêu

Cho phép user tự vô hiệu hoá tài khoản cá nhân trên web bằng soft delete thay vì xoá cứng dữ liệu. Flow này cần có xác nhận rõ ràng vì ảnh hưởng đến khả năng đăng nhập và sử dụng các tính năng owner-only.

Phạm vi

Trong phạm vi (In scope):

  • CTA vô hiệu hoá tài khoản trong khu vực profile/account settings.
  • Màn xác nhận trước khi gọi API.
  • Gọi DELETE /api/v1/users/me.
  • Backend set User.status = INACTIVE.
  • FE logout/clear local auth state sau khi deactivate thành công.
  • Lần đăng nhập sau phải bị auth flow chặn vì account không còn ACTIVE.

Ngoài phạm vi (Out of scope):

  • Xoá cứng user khỏi database.
  • Xoá listings, payment orders, wallet transactions hoặc audit logs.
  • Khôi phục tài khoản từ phía user.
  • Admin ban/unban hoặc reactivate user.
  • Tự động refund package/ví khi deactivate.

User Stories

  • user không còn dùng hệ thống, tôi muốn vô hiệu hoá tài khoản của mình để không tiếp tục sử dụng dịch vụ.
  • user chuẩn bị thao tác nhạy cảm, tôi muốn có màn xác nhận để tránh bấm nhầm.
  • hệ thống, tôi muốn giữ dữ liệu lịch sử nhưng ngăn account inactive đăng nhập lại.

Luồng chức năng

sequenceDiagram
    actor User
    participant Web
    participant BE
    participant Auth

    User->>Web: Mở profile/account settings
    User->>Web: Chọn "Vô hiệu hoá tài khoản"
    Web->>User: Hiển thị confirmation
    User->>Web: Xác nhận
    Web->>BE: DELETE /api/v1/users/me
    BE->>BE: Lấy user từ JWT principal
    BE->>BE: Set status = INACTIVE
    BE-->>Web: 204 No Content
    Web->>Auth: Clear auth/profile state hoặc logout
    Web->>User: Điều hướng về trang public/login

Acceptance Criteria

  • AC-1: Backend có DELETE /api/v1/users/me yêu cầu quyền user:delete:self.
  • AC-2: API chỉ deactivate user hiện tại từ JWT principal.
  • AC-3: Backend set User.status = INACTIVE.
  • AC-4: API trả 204 No Content khi thành công.
  • AC-5: Nếu user không tồn tại, backend trả not found.
  • AC-6: FE cần thêm CTA deactivate trong profile/account settings.
  • AC-7: FE phải có confirmation trước khi gọi API.
  • AC-8: Sau khi deactivate thành công, FE phải clear auth/profile state và điều hướng user ra khỏi private area.
  • AC-9: Cần quyết định có revoke refresh token ngay trong flow này hay gọi logout riêng sau deactivate.
  • AC-10: Cần test login sau deactivate để bảo đảm account INACTIVE bị từ chối.

Quy tắc nghiệp vụ

  • Deactivate là soft delete, không xoá row users.
  • Không xoá dữ liệu tài chính, listing, audit hoặc lịch sử giao dịch trong flow này.
  • Account INACTIVE không được đăng nhập thành công ở các flow auth.
  • Vì đây là thao tác nhạy cảm, UI phải yêu cầu xác nhận rõ ràng trước khi submit.
  • Nếu có session/token còn sống sau deactivate, hệ thống cần strategy rõ: revoke ngay hoặc buộc logout phía client.

Dữ liệu & Trạng thái

Entity nghiệp vụ:

  • User: có field status.
  • UserStatusEnum: gồm ACTIVE, INACTIVE, BANNED, PENDING.
  • Auth state: access token/user cache phía FE cần được clear sau deactivate.
  • profile.current: profile cache cần bị xoá sau deactivate.

Trạng thái user-facing:

  • active — tài khoản đang hoạt động.
  • confirming-deactivate — đang ở bước xác nhận.
  • deactivating — đang gọi API.
  • deactivated — tài khoản đã chuyển INACTIVE.
  • deactivate-error — thao tác thất bại, user vẫn ở trạng thái trước đó.

Liên quan