#3e9d8
Back
2026/03/19
4 min read

任務紀錄 - 子任務列表(左下)

任務紀錄 - 子任務列表(左下).md
175 additions, 0 deletions
... ... @@ -1 +1,176 @@
1 +# 任務牆記錄 - 取得子任務列表
2 +### SUMMARY
3 +根據主任務 ID 取得所屬的子任務列表。此 API 用於查詢指定主任務下的所有子任務設定資訊。
4 +
5 +### BUSINESS LOGIC
6 +1. 根據 `mission_master_id` 查詢 `MISSION_SUB` 表
7 +2. 篩選條件:`master_id = mission_master_id`
8 +3. 返回所有符合條件的子任務資訊
9 +
10 +### REFERENCE TABLE
11 +
12 +**核心表**
13 +* `MISSION_SUB` - 子任務設定表
14 +
15 +**關聯表**
16 +* `MISSION_MASTER` - 主任務設定表
17 +
18 +### ATTRIBUTES
19 +* METHOD: **GET**
20 +* PATH: `/api/features/mission-board/record/mission-master/<int:mission_master_id>/mission-subs`
21 +* LOGIN REQUIRED: **TRUE**
22 +* FEATURE: `MISSION_BOARD_RECORD`
23 +* PERMISSION: `READ`
24 +* CRYPTO: **None**
25 +
26 +### REQUEST
27 +#### HEADERS
28 +
29 +| Name | Type/Len | Required(*) | Desc |
30 +| ---| ---| ---| --- |
31 +| Authorization | String | * | JWT Token |
32 +| X-Request-Id | String | | X-Request-Id for api flow tracing |
33 +
34 +```json
35 +// Example:
36 +{
37 + "Authorization": "Bearer jwt-token",
38 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
39 +}
40 +```
41 +
42 +#### PATH PARAMETERS
43 +
44 +| Name | Type/Len | Required(*) | Desc |
45 +| ---| ---| ---| --- |
46 +| mission_master_id | Integer | * | 主任務 ID |
47 +
48 +```dpr
49 +// Example
50 +GET /api/features/mission-board/record/mission-master/1/mission-subs
51 +```
52 +
53 +### RESPONSE
54 +#### STATUS CODE
55 +* 200 OK
56 +
57 +#### HEADERS
58 +
59 +| Name | Type/Len | Desc |
60 +| ---| ---| --- |
61 +| Authorization | String | JWT Token |
62 +| X-Request-Id | String | Returning Request-Id |
63 +
64 +```json
65 +// Example:
66 +{
67 + "Authorization": "Bearer jwt-token",
68 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
69 +}
70 +```
71 +
72 +#### BODY
73 +
74 +| Level | Name | Type/Len | Nullable(*) | Desc |
75 +| ---| ---| ---| ---| --- |
76 +| 1 | status | String | | 回應狀態 (SUCCESS, FAILURE) |
77 +| 1 | data | Dict | | 回應資料 |
78 +
79 +#### Data
80 +
81 +| Level | Name | Type/Len | Nullable(*) | Desc |
82 +| ---| ---| ---| ---| --- |
83 +| 2 | items | List | | 子任務列表 |
84 +
85 +#### items
86 +
87 +| Level | Name | Type/Len | Nullable(*) | Desc | Source |
88 +| ---| ---| ---| ---| ---| --- |
89 +| 3 | id | Integer | | 子任務 ID | `MISSION_SUB.ID` |
90 +| 3 | name | String | | 子任務名稱 | `MISSION_SUB.NAME` |
91 +| 3 | activity_type | Enum | | 活動類型 | `MISSION_SUB.ACTIVITY_TYPE` |
92 +| 3 | category | Enum | | 任務類型 | `MISSION_SUB.CATEGORY` |
93 +| 3 | master_id | Integer | | 主任務 ID | `MISSION_SUB.MASTER_ID` |
94 +| 3 | tier | Integer | * | 層級 | `MISSION_SUB.TIER` |
95 +| 3 | mission_content | Dict | * | 任務內容(JSON) | `MISSION_SUB.MISSION_CONTENT` |
96 +| 3 | target_count | Integer | * | 目標次數 | `MISSION_SUB.TARGET_COUNT` |
97 +| 3 | duplicate | Integer | * | 是否可重複 | `MISSION_SUB.DUPLICATE` |
98 +| 3 | cta_visible | Integer | * | CTA 是否可見 | `MISSION_SUB.CTA_VISIBLE` |
99 +| 3 | cta_link | String | * | CTA 連結 | `MISSION_SUB.CTA_LINK` |
100 +| 3 | cta_content | String | * | CTA 內容 | `MISSION_SUB.CTA_CONTENT` |
101 +| 3 | rule_id | Integer | * | 規則 ID | `MISSION_SUB.RULE_ID` |
102 +
103 +```json
104 +// Example:
105 +{
106 + "status": "SUCCESS",
107 + "data": {
108 + "items": [
109 + {
110 + "id": 10,
111 + "name": "完成首次儲值",
112 + "activity_type": "DEPOSIT",
113 + "category": "ASSIGNED",
114 + "master_id": 1,
115 + "tier": 1,
116 + "mission_content": {
117 + "min_amount": 100
118 + },
119 + "target_count": 1,
120 + "duplicate": 0,
121 + "cta_visible": 1,
122 + "cta_link": "/deposit",
123 + "cta_content": "前往儲值",
124 + "rule_id": 100
125 + },
126 + {
127 + "id": 11,
128 + "name": "完成首次投注",
129 + "activity_type": "BET",
130 + "category": "ASSIGNED",
131 + "master_id": 1,
132 + "tier": 2,
133 + "mission_content": {
134 + "min_amount": 50
135 + },
136 + "target_count": 1,
137 + "duplicate": 0,
138 + "cta_visible": 1,
139 + "cta_link": "/games",
140 + "cta_content": "前往遊戲",
141 + "rule_id": 101
142 + }
143 + ]
144 + }
145 +}
146 +```
147 +
148 +#### ERROR CODE
149 +
150 +| HTTP Status | ErrorCode | Message | Desc |
151 +| ---| ---| ---| --- |
152 +| 400 | ValidationError.INVALID_INPUT | Invalid input data | 輸入資料格式錯誤 |
153 +| 422 | ValidationError.SCHEMA_VALIDATION_FAILED | Schema validation failed | Schema 驗證失敗 |
154 +
155 +### CODE REFERENCE
156 +
157 +**Route**: [route.py](http://../route.py#L49-L56)
158 +
159 +```python
160 +@bp.get('mission-master/<int:mission_master_id>/mission-subs')
161 +@bp.doc(summary='取得子任務列表')
162 +@bp.auth_required(auth)
163 +@read_permission_required(Feature.MISSION_BOARD_RECORD)
164 +@bp.output(GetMissionSubsOutSchema, status_code=200)
165 +```
166 +
167 +**Schema**: [schema.py](http://../schema.py)
168 +* Output: `GetMissionSubsOutSchema` (lines 107-108)
169 +* Item: `GetMissionSubOutSchema` (lines 56-73)
170 +
171 +**Service**: [service.py](http://../service.py)
172 +* `get_mission_subs()` (lines 219-225)
173 +
174 +**Presenter**: [presenter.py](http://../presenter.py)
175 +* `display_mission_subs()` (lines 127-148)