Admin xoá mềm property bất kỳ
Feature URL
Module
admin
Status
in-development
Priority
P1
Platforms
fe · be
AC progress
6 / 9
Last reviewed
2026-05-30
Mục tiêu
Cho phép admin soft-delete property bất kỳ mà không cần là chủ sở hữu. Khi xoá, property bị đánh dấu INACTIVE, ghi lại thời điểm xoá và admin thực hiện, nhưng dữ liệu vẫn được giữ lại trong DB để admin tra cứu sau.
Phạm vi
Trong phạm vi (In scope):
- Admin gọi
DELETE /api/v1/admin/properties/{id}để soft-delete property bất kỳ. - Bỏ qua ownership check (admin không cần là createdBy).
- Soft-delete: set
status = INACTIVE, ghideletedAt = now(), ghideletedBy = actingAdminId. - API trả 204 No Content khi thành công.
- FE nút xoá với confirmation dialog trong màn admin detail hoặc admin list.
Ngoài phạm vi (Out of scope):
- Xoá cứng (hard delete) property khỏi DB.
- Restore/undelete property đã soft-delete (chưa có endpoint).
- Xoá hàng loạt (bulk delete).
- Cascade xoá listings liên kết (listings không bị xoá tự động).
User Stories
- Là admin, tôi muốn soft-delete property vi phạm để ẩn khỏi marketplace mà vẫn giữ lịch sử.
- Là admin kiểm duyệt, tôi muốn biết ai đã xoá property và khi nào để có thể audit sau này.
- Là admin vận hành, tôi muốn xoá property trùng lặp hoặc dữ liệu rác do user tạo sai.
Luồng chức năng
sequenceDiagram
actor Admin
participant Web
participant BE
participant DB
Admin->>Web: Nhấn nút Xoá property trong màn admin
Web->>Admin: Hiển thị confirmation dialog
Admin->>Web: Xác nhận xoá
Web->>BE: DELETE /api/v1/admin/properties/{id}
BE->>BE: Kiểm tra role admin
alt Property không tồn tại
BE-->>Web: 404 Not Found
Web->>Admin: Báo property không tồn tại
else Thành công
BE->>DB: Set status INACTIVE và deletedAt và deletedBy
BE-->>Web: 204 No Content
Web->>Admin: Thông báo đã xoá property
endAcceptance Criteria
- AC-1: Backend có
DELETE /api/v1/admin/properties/{id}, chỉ admin được gọi. - AC-2: API bỏ qua ownership check, admin không cần là createdBy.
- AC-3: Soft-delete ghi
status = INACTIVE,deletedAt = now(),deletedBy = actingAdminId. - AC-4: API trả 204 No Content khi thành công.
- AC-5: Nếu property không tồn tại, API trả 404 Not Found.
- AC-6:
actingAdminIdđược lấy từUserPrincipalcủa SecurityContext, null-safe. - AC-7: FE cần nút Xoá và confirmation dialog trong màn admin detail hoặc admin list.
- AC-8: FE sau khi xoá thành công cần refresh danh sách hoặc chuyển về màn list.
- AC-9: FE xử lý 404 (property không tồn tại) và error state.
Quy tắc nghiệp vụ
- Chỉ admin được gọi
DELETE /admin/properties/{id}. - Soft-delete không xoá listings liên kết; listings vẫn tồn tại và tham chiếu property đã xoá.
- Bắt buộc có confirmation step trên FE trước khi gọi API xoá.
- Dữ liệu property vẫn giữ trong DB sau soft-delete; admin xem được qua
GET /admin/properties/{id}. deletedByghi nhận UUID admin thực hiện để phục vụ audit; không public ra ngoài API thông thường.
Dữ liệu & Trạng thái
Entity nghiệp vụ:
Property: bất động sản bị soft-delete — sau khi xoástatus = INACTIVE,deletedAtvàdeletedByđược ghi.User (deletedBy): admin thực hiện soft-delete, chỉ lưu UUID.
Trạng thái user-facing:
confirm-pending— đang chờ admin xác nhận xoá.deleting— đang gọi API xoá.delete-success— xoá thành công, property đã INACTIVE.delete-not-found— property không tồn tại.delete-error— lỗi khi xoá.
Liên quan
- Phụ thuộc: admin-property-detail, properties-delete
- Ảnh hưởng: admin-property-list-search, listing-list