#45a52
Back
2026/03/25
6 min read

任務牆 - 更新審核編輯

任務牆 - 更新審核編輯.md
255 additions, 0 deletions
... ... @@ -1 +1,256 @@
1 +## SUMMARY
2 +建立審核以編輯正式任務牆主任務及子任務
3 +* 封測:除主任務狀態、任務類型外所有欄位皆可修改
4 +* 啟用:
5 + * 主任務:任務名稱、任務簡述、任務指南、活動條款、顯示分享任務按鈕、
6 +領獎名額限制(增加)
7 +* * 子任務:子任務名稱、是否設定CTA、CTA按鈕名稱、CTA按鈕連結網址
8 +* 停用:不可編輯
9 +### REFERENCE TABLE
10 +* `DBMT.CMS_MISSION_RULE_PATTERN`
11 +* `DBMT.CMS_AUDIT`
12 +* `DBMT.CMS_AUDIT_ENTRY`
13 +* `DBMT.CMS_MISSION_RULE_ORIGIN`
14 +* `DBMT.CMS_MISSION_FILE_LIST`
15 +* `DBMT.MISSION_MASTER_SETTING`
16 +* `DBMT.MISSION_SUB_SETTING`
17 +* `DBMT.RULE_ENGINE_FLOW`
18 +### ATTRIBUTES
19 +* METHOD: **PATCH**
20 +* PATH: `/api/features/mission-board/management/aduit/update/{data_id: int}`
21 +* LOGIN REQUIRED: **TRUE**
22 +* FEATURE: `MISSION_BOARD_MANAGEMENT`
23 +* PERMISSION:`UPDATE`, `APPLY`
24 +* CRYPTO: **None**
25 +
26 +### REQUEST
27 +#### HEADERS
28 +
29 +| Name | Type/Len | Required(*) | Desc |
30 +| ---| ---| ---| --- |
31 +| Content-Type | String | * | `"application/json"` |
32 +| Authorization | String | | JWT Token |
33 +| X-Request-Id | String | | X-Request-Id for api flow tracing |
34 +
35 +```json
36 +// Example:
37 +{
38 + "Content-Type": "application/json",
39 + "Authorization": "Bearer jwt-token",
40 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
41 +}
42 +```
43 +
44 +#### PAYLOAD
45 +
46 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
47 +| ---| ---| ---| ---| ---| --- |
48 +| 1 | progress | String | * | | 審核進度 |
49 +| 1 | data | Dict | * | | 任務牆設定資料 |
50 +
51 +### DATA
52 +
53 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
54 +| ---| ---| ---| ---| ---| --- |
55 +| 2 | mission_board | Dict | * | | 主任務設定 |
56 +| 2 | sub_missions | List(Dict) | * | | 子任務條件設定 |
57 +| 2 | member_lists | List(Dict) | * | | 任務名單 |
58 +
59 +####
60 +
61 +#### mission_board
62 +
63 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
64 +| ---| ---| ---| ---| ---| --- |
65 +| 3 | id | Integer | | * | 任務牆 ID (新增時為 Null)<br>`MISSION_MASTER_SETTING.ID` |
66 +| 3 | name | String | * | | 任務名稱 |
67 +| 3 | summary | String | * | | 任務簡述 |
68 +| 3 | description | String | * | | 任務指南 |
69 +| 3 | visible_start_time | Datetime | * | | 上架時間 |
70 +| 3 | visible_end_time | Datetime | * | | 下架時間 |
71 +| 3 | activity_start_time | Datetime | * | | 任務開始時間 |
72 +| 3 | activity_end_time | Datetime | * | | 任務結束時間 |
73 +| 3 | award_end_time | Datetime | * | | 領獎結束時間 |
74 +| 3 | dispaly_share_button | Boolean | * | | 是否顯示任務分享按鈕 |
75 +| 3 | term | String | * | | 活動條款 |
76 +| 3 | member_list_type | Enum | * | | 名單類型:<br>ALL: 全體<br>WHITE: 白名單<br>BLACK: 黑名單<br>(目前一律都是 ALL) |
77 +| 3 | reward | Dict | * | * | 主任務獎項設定 |
78 +
79 +#### sub_missions
80 +
81 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
82 +| ---| ---| ---| ---| ---| --- |
83 +| 3 | id | Integer | | * | 子任務 ID (新增時為 Null)<br>`MISSION_SUB_SETTING.ID` |
84 +| 3 | action | Enum | * | | 執行動作類型:<br>CREATE<br>UPDATE<br>DELETE |
85 +| 3 | name | String | * | | 子任務名稱 |
86 +| 3 | activity_type | Enum | * | | 子任務類型:<br>EXCHNAGE_POINTS: 兌換點數 EXCHNAGE_VOUCHER: 兌換票券<br>REDEEM: 核銷票券<br>LOGIN: 登入<br>MGM: 會員推薦 MGM THIRD_PARTY: 第三方 |
87 +| 3 | target_count | Integer | * | | 完成目標數 |
88 +| 3 | duplicate | Boolean | * | | 是否可重覆計算同種票券 |
89 +| 3 | cta_visible | Boolean | * | | 是否設定 CTA<br>(當設定為 true 時,以下兩個欄位必填) |
90 +| 3 | cta_link | String | | | CTA 連結 |
91 +| 3 | cta_content | String | | | CTA 按鈕文字 |
92 +| 3 | tier | Integer | * | | 排序 (任務順序) |
93 +| 3 | mission_content | list(Dict) | * | | 任務條件<br>參考[](https://app.clickup.com/3626232/v/dc/3en7r-19300/3en7r-124058?block=block-81d8ab85-326e-4340-a34e-b8729395ac98) |
94 +| 3 | reward | Dict | * | * | 子任務獎項設定 |
95 +
96 +#### member_lists
97 +
98 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
99 +| ---| ---| ---| ---| ---| --- |
100 +| 3 | id | Integer | | * | `CMS_MISSION_MEMBER_LIST.id` |
101 +| 3 | type | Enum | * | | 名單類型<br>BETA: 封測 (目前只會有封測,且只會有一個名單)<br>WHITE: 白名單<br>BLACK: 黑名單 |
102 +| 3 | filepath | String | * | | 名單路徑 |
103 +| 3 | action | Enum | * | | 執行動作:<br>~~CREATE~~<br>UPDATE (異動時僅 update)<br>~~DELETE~~ |
104 +
105 +#### mission_board.reward / sub_mission.reward
106 +
107 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
108 +| ---| ---| ---| ---| ---| --- |
109 +| 4 | id | Integer | | * | 任務獎勵 ID `AWARD_MISSION_SETTING.ID` |
110 +| 4 | award_group_id | Integer | * | | 獎項群 ID<br>`AWARD_GROUP_ID` |
111 +| 4 | award_id | Integer | * | | 獎項 ID<br>`AWARD_ID` |
112 +| 4 | award_type | Enum | * | | 獎勵類型<br>POINT: 點數<br>VOUCHER: 票券 |
113 +| 4 | award_content | String | * | | 獎勵內容 (顯示於 APP) |
114 +| 4 | quota | Integer | * | | 領獎名額限制 |
115 +
116 +### 條件設定
117 +範例:
118 +
119 +```scheme
120 +[
121 + {
122 + name: "500點以上票券",
123 + patterns:
124 + [
125 + {
126 + "field": "product_name",
127 + "operator": "like",
128 + "values": ["現金券", "抵用券"]
129 + },
130 + {
131 + "field": "point_limit",
132 + "operator": "ge",
133 + "values": [500]
134 + }
135 + ]
136 + },
137 + {
138 + name: "指定品牌星巴巴",
139 + patterns:
140 + [
141 + {
142 + "field": "brand_name",
143 + "operator": "in",
144 + "values": ["星巴克"]
145 + },
146 + ]
147 + }
148 +]
149 +```
150 +
151 +* 請參考 Table Schema ([https://app.clickup.com/3626232/docs/3en7r-19300/3en7r-123898](https://app.clickup.com/3626232/docs/3en7r-19300/3en7r-123898))下方說明
152 +* **欄位說明**
153 + * **field:**
154 + * serial_id 指定票券
155 + * brand_id 指定品牌
156 + * brand_name 品牌關鍵字
157 + * product_name 品名關鍵字
158 + * point_limit 點數限制
159 + * member_identity 會員身份 (第一階段不實作)
160 + * **operator:**
161 + * in 完全相符
162 + * like 包含
163 + * not_like (品牌關鍵字、品名關鍵字),not_in (指定票券、指定品牌) 不包含
164 + * gt 大於
165 + * lt 小於
166 + * eq 等於
167 + * **value:**不論一或多個值,皆以陣列形式表示
168 +
169 +## Payload Data 範例:
170 +
171 +```cs
172 +{
173 + 'progress': 'PENDING',
174 + 'data': {
175 + 'mission_board': {
176 + 'is_draft': true,
177 + 'name': 'Invalid File Mission',
178 + 'status': 'BETA',
179 + 'category': 'ASSIGNED',
180 + 'summary': 'Summary',
181 + 'description': 'Description',
182 + 'visible_start_time': '2026/03/12 10:00:00',
183 + 'visible_end_time': '2026/04/12 18:00:00',
184 + 'activity_start_time': '2026/03/12 10:00:00',
185 + 'activity_end_time': '2026/04/12 18:00:00',
186 + 'award_end_time': '2026/04/12 18:00:00',
187 + 'display_share_button': true,
188 + 'term': 'Terms',
189 + 'member_list_type': 'ALL',
190 + 'reward': {
191 + 'award_group_id': 1,
192 + 'award_id': 1,
193 + 'award_type': 'POINT',
194 + 'award_content': '100 Points',
195 + 'quota': 1000,
196 + },
197 + },
198 + 'sub_missions': [
199 + {
200 + 'action': 'CREATE',
201 + 'name': 'Dummy Sub-Mission',
202 + 'activity_type': 'LOGIN',
203 + 'target_count': 1,
204 + 'duplicate': false,
205 + 'cta_visible': false,
206 + 'tier': 1,
207 + 'mission_content': [],
208 + 'reward': null,
209 + }
210 + ],
211 + 'member_lists': [
212 + {
213 + 'type': 'BETA',
214 + 'filename': 'invalid_format.xlsx',
215 + 'filepath': 'path_toexcel.xlsx',
216 + 'action': 'CREATE',
217 + }
218 + ],
219 + },
220 + }
221 +```
222 +
223 +### RESPONSE
224 +#### STATUS CODE
225 +* 204 No Content
226 +#### HEADERS
227 +
228 +| Name | Type/Len | Desc |
229 +| ---| ---| --- |
230 +| Authorization | String | JWT Token |
231 +| X-Request-Id | String | Returning Request-Id |
232 +
233 +```json
234 +// Example:
235 +{
236 + "Authorization": "Bearer jwt-token",
237 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
238 +}
239 +```
240 +
241 +#### BODY
242 +
243 +#### ERROR CODE
244 +
245 +| HTTP Status | ErrorCode | Message | Desc |
246 +| ---| ---| ---| --- |
247 +| 404 | MISSION_MASTER_NOT_FOUND | Mission master not found | 異動主任務不存在 |
248 +| 422 | CANNOT_UPDATE_RETIRED_MISSION<br> | Cannot update retired mission | 停用任務不可異動 |
249 +| 422 | CANNOT_DECREASE_REWARD_QUOTA<br><br> | Cannot decrease reward quota<br> | 獎項數量不可減少 |
250 +| 422 | ValidationError | Mission board reward is required when category is ASSIGNED<br> | 任務類型為指定型時,主任務獎項必填 |
251 +| 422 | ValidationError | Sub mission reward is required when category is MILESTONE (index: {index})<br> | 任務類型為多門檻型時,子任務獎項為必填 |
252 +| 404 | AWARD_NOT_FOUND | Award not found | 獎項不存在 |
253 +| 409 | BETA_LIST_IDENTITY_TYPE_ERROR<br> | Beta list identity type error<br> | 封測名單僅可使用會員編號 |
254 +| 409 | BETA_LIST_VALIDATION_ERROR<br> | Beta list validation error<br> | 封測名單檔案格式錯誤 |
255 +| 409 | BETA_LIST_CONTAINS_NON_MEMBER_ITEMS<br> | Beta list contains non-member items<br> | 封測名單內有不存在的會員編號 |