GET /admin/daily-quests/actions để lấy danh sách action gồm value, label và unit. API này không gọi database.action và requirement để mô tả mục tiêu, ví dụ action POST_CREATED với requirement 3 nghĩa là cần đăng 3 bài.UserActionLog với userId, type, targetId, metadata và createdAt để phục vụ tính tiến độ quest sau này.Daily quest định nghĩa action cần đạt; UserActionLog ghi nhận hành động thực tế để layer tính tiến độ có dữ liệu truy vấn.
| # | API / Module | Ghi chú nghiệp vụ | Status |
|---|---|---|---|
| 01 | GET /admin/daily-quests/actions Admin daily quest action options |
Trả danh sách action từ enum ActionType, mỗi item có dạng { value, label, unit }. Không query DB. |
done |
| 02 | POST /admin/daily-quests Create daily quest |
Body nhận thêm action. targetCount đã bỏ, số lượng mục tiêu dùng requirement. |
done |
| 03 | UserActionLog module Repository + service |
Có logAction generic và method rõ nghĩa cho từng action: post, quote, share, like, follow, invite, join circle, leave circle. |
done |
| 04 | POST /circle/{publicId}/manage/join-request/respond Approve/reject join request |
Yêu cầu quyền ACCEPT_USE_JOIN. Khi admin/owner accept thành công, hệ thống tạo log JOIN_CIRCLE cho user được duyệt, metadata có approvedById và source: "JOIN_REQUEST". |
noted |
| Action | Label | Unit | Source flow |
|---|---|---|---|
POST_CREATED | Đăng bài | bài | Post thường và circle post. |
POST_DELETED | Xoá bài | bài | Soft delete post thường. |
LIKE_CREATED | Thích bài | lượt | Chỉ ghi khi Redis sAdd trả 1. |
FOLLOW_FOLLOWING_CREATED | Theo dõi người dùng | người | Ghi cho actor khi follow mới hoặc follow lại. |
FLOW_FOLLOWER_CREATED | Có người theo dõi | người | Ghi cho target user khi có follower mới. |
QUOTE_CREATED | Quote bài | bài | Create quote post. |
QUOTE_DELETED | Xoá quote | bài | Delete post type QUOTE. |
SHARE_CREATED | Chia sẻ bài | lượt | Create repost/share. |
SHARE_DELETED | Xoá chia sẻ | lượt | Delete post type REPOST. |
INVITE_SENT | Gửi lời mời | lời mời | Circle invitation flows. |
INVITE_ACCEPTED | Chấp nhận lời mời | lời mời | User accept circle invitation. |
JOIN_CIRCLE | Được duyệt vào nhóm | nhóm | Admin/owner accept join request. |
LEAVE_CIRCLE | Rời nhóm | nhóm | Service method đã có, chưa wire vì chưa có leave circle flow. |
action_enum, create/list trả action và không dùng targetCount.value, label, unit.UserActionLog có repository/service và đã wire vào post, like, follow, invitation, approve join request.prisma generate, prisma validate và npm run typecheck trên môi trường không bị giới hạn WSL1/Node.user_action_logs có thể triển khai sau khi chốt rule reset/ngày và timezone.requirement là số lượng action cần đạt. targetCount không còn nằm trong DailyQuest.FLOW_FOLLOWER_CREATED được giữ nguyên theo enum hiện có để tránh đổi contract. Nếu muốn sửa typo thành FOLLOW_FOLLOWER_CREATED, cần migration riêng.tx để ghi cùng transaction khi flow chính cần đảm bảo atomic side effect.