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
- Là 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ụ.
- Là 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.
- Là 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/loginAcceptance Criteria
- AC-1: Backend có
DELETE /api/v1/users/meyêu cầu quyềnuser: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 Contentkhi 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
INACTIVEbị 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
INACTIVEkhô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ó fieldstatus.UserStatusEnum: gồmACTIVE,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ểnINACTIVE.deactivate-error— thao tác thất bại, user vẫn ở trạng thái trước đó.
Liên quan
- Phụ thuộc: user-profile-view-web
- Ảnh hưởng: auth-login-phone, auth-login-google, auth-logout