NON-PRODUCTION
Achievement — tài liệu ghép client
Thành tích của user trên lobby. Client gọi POST /api/v2/rpc trên game-api-gateway,
body mã hóa AES giống mission.
1. Tổng quan
| Mục | Giá trị |
|---|---|
| Gateway | game-api-gateway · POST /api/v2/rpc |
| Auth | JWT game |
| Methods | /achievement/list, /achievement/select |
| User | Lấy từ JWT. Client không gửi user_id |
List chỉ gồm achievement đang bật. Tên tab category đã dịch theo country của session.
Không có bản dịch thì
name chính là chuỗi category (slot, fishing, …).
2. Auth
POST /api/v2/rpc
Authorization: Bearer <access_token>
decrypt → { "method": "/achievement/list", "data": {} }
success → HTTP 200, encrypted { "code": 0, "msg": { ... } }
error → HTTP 500, encrypted { "code": ..., "msg": ... }
3. Danh sách achievement
method: /achievement/list. data rỗng {}.
msg:
{
"achievements": [
{
"achievement": {
"id": 12,
"name": "Play 10 slots",
"translations": [{ "country": "KH", "description": "Chơi 10 ván slot" }],
"url": "https://cdn.example.com/a.png",
"type": "game_play_count",
"category": "slot",
"target": 10,
"enable": true
},
"progress": 4,
"completed": false,
"selected": false
}
],
"categories": [
{ "category": "slot", "name": "ស្លត" },
{ "category": "pvp", "name": "PvP" }
]
}
| Field | Ý nghĩa |
|---|---|
achievement.category | Nhóm để chia tab. Khớp categories[].category. |
translations | Mô tả theo country CMS soạn. Client chọn bản đúng country, fallback phần tử đầu hoặc name. |
progress / target | Thanh tiến độ. Chưa chơi thì progress = 0. |
completed | Đã chạm target. Giữ nguyên sau khi hoàn thành. |
selected | Achievement user đang trưng bày. Tối đa một cái. |
categories | Danh sách tab. name đã i18n, key dịch chính là chuỗi category. |
4. Category
Thứ tự ổn định: slot, pvp, betting, minigame, fishing, topup, invite, mission, login.
Dùng
categories để vẽ tab. Không hardcode tên hiển thị. Achievement không thuộc category nào vẫn nằm trong achievements và có thể hiện ở tab “tất cả”.5. Chọn achievement trưng bày
method: /achievement/select
data:
{ "achievement_id": 12 }
msg: {}
Chỉ chọn achievement đang bật. Sau khi thành công, gọi lại list hoặc set
selected local: cái vừa chọn = true, các cái khác = false.6. Gợi ý UI
- Tab lấy từ
categories, lọcachievementstheoachievement.category. - Progress bar =
progress / achievement.target, cap 100% khicompleted. - Icon =
achievement.url. Rỗng thì dùng icon local. - Nút trưng bày chỉ gửi
achievement_id.