#4dd1e
Back
2026/03/12
6 min read

任務牆 - 更新審核新增

任務牆 - 更新審核新增.md
203 additions, 0 deletions
... ... @@ -1 +1,204 @@
1 +## SUMMARY
2 +更新建立任務牆主任務及設定子任務的審核
3 +### REFERENCE TABLE
4 +* `DBMT.CMS_MISSION_RULE_PATTERN`
5 +* `DBMT.CMS_AUDIT`
6 +* `DBMT.CMS_AUDIT_ENTRY`
7 +* `DBMT.CMS_MISSION_RULE_ORIGIN`
8 +* `DBMT.CMS_MISSION_FILE_LIST`
9 +* `DBMT.MISSION_MASTER_SETTING`
10 +* `DBMT.MISSION_SUB_SETTING`
11 +* `DBMT.RULE_ENGINE_FLOW`
12 +
13 +### ATTRIBUTES
14 +* METHOD: **POST**
15 +* PATH: `/api/features/mission-board/management/create`
16 +* LOGIN REQUIRED: **TRUE**
17 +* FEATURE: `MISSION_BOARD_MANAGEMENT`
18 +* PERMISSION: `CREATE` , `APPLY`
19 +* CRYPTO: **None**
20 +
21 +### REQUEST
22 +#### HEADERS
23 +
24 +| Name | Type/Len | Required(*) | Desc |
25 +| ---| ---| ---| --- |
26 +| Content-Type | String | * | `"application/json"` |
27 +| Authorization | String | | JWT Token |
28 +| X-Request-Id | String | | X-Request-Id for api flow tracing |
29 +
30 +```json
31 +// Example:
32 +{
33 + "Content-Type": "application/json",
34 + "Authorization": "Bearer jwt-token",
35 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
36 +}
37 +```
38 +
39 +#### PAYLOAD
40 +
41 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
42 +| ---| ---| ---| ---| ---| --- |
43 +| 1 | progress | String | * | | 審核進度 |
44 +| 1 | data | Dict | * | |  任務牆設定資料 |
45 +
46 +### DATA
47 +
48 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
49 +| ---| ---| ---| ---| ---| --- |
50 +| 2 | mission_board | Dict | * | | 主任務設定 |
51 +| 2 | sub_missions | List(Dict) | * | | 子任務條件設定 |
52 +| 2 | member_lists | List(Dict) | * | | 任務名單 |
53 +
54 +####
55 +
56 +#### mission_board
57 +
58 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
59 +| ---| ---| ---| ---| ---| --- |
60 +| 3 | id | Integer | | * | 任務牆 ID (新增時為 Null)<br>`MISSION_MASTER_SETTING.ID` |
61 +| 3 | is_draft | Integer | * | | 是否暫存:<br>True/False |
62 +| 3 | name | String | * | | 任務名稱 |
63 +| 3 | status | Enum | * | | 狀態:<br>PUBLISHED: 啟用<br>RETIRED: 停用<br>BETA: 封測<br>(新增時固定為封測) |
64 +| 3 | category | Enum | * | | 任務類別:<br>ASSINGED: 指定型<br>MILESTONE: 多門檻型<br>SEQUENTIAL: 關聯型 |
65 +| 3 | summary | String | * | | 任務簡述 |
66 +| 3 | description | String | * | | 任務指南 |
67 +| 3 | visible_start_time | Datetime | * | | 上架時間 |
68 +| 3 | visible_end_time | Datetime | * | | 下架時間 |
69 +| 3 | activity_start_time | Datetime | * | | 任務開始時間 |
70 +| 3 | activity_end_time | Datetime | * | | 任務結束時間 |
71 +| 3 | award_end_time | Datetime | * | | 領獎結束時間 |
72 +| 3 | display_share_button | Boolean | * | | 是否顯示任務分享按鈕 |
73 +| 3 | term | String | * | | 活動條款 |
74 +| 3 | member_list_type | Enum | * | | 名單類型:<br>ALL: 全體<br>WHITE: 白名單<br>BLACK: 黑名單 |
75 +| 3 | reward | Dict | * | * | 主任務獎項設定 |
76 +
77 +#### sub_missions
78 +
79 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
80 +| ---| ---| ---| ---| ---| --- |
81 +| 3 | id | Integer | | * | 子任務 ID (新增時為 Null)<br>`MISSION_SUB_SETTING.ID` |
82 +| 3 | action | Enum | * | | 執行動作類型:<br>CREATE<br>UPDATE<br>DELETE<br>(新增時統一為 CREATE) |
83 +| 3 | name | String | * | | 子任務名稱 |
84 +| 3 | activity_type | Enum | * | | 子任務類型:<br>EXCHANGE_POINTS: 兌換點數 EXCHANGE_VOUCHER: 兌換票券<br>REDEEM: 核銷票券<br>LOGIN: 登入<br>MGM: 會員推薦 MGM THIRD_PARTY: 第三方 |
85 +| 3 | target_count | Integer | * | | 完成目標數 |
86 +| 3 | duplicate | Boolean | * | | 是否可重覆計算同種票券 |
87 +| 3 | cta_visible | Boolean | * | | 是否設定 CTA<br>(當設定為 true 時,以下兩個欄位必填) |
88 +| 3 | cta_link | String | | | CTA 連結 |
89 +| 3 | cta_content | String | | | CTA 按鈕文字 |
90 +| 3 | tier | Integer | * | | 排序 (任務順序) |
91 +| 3 | mission_content | list(Dict) | * | | 任務條件<br>參考[](https://app.clickup.com/3626232/v/dc/3en7r-19300/3en7r-124058?block=block-81d8ab85-326e-4340-a34e-b8729395ac98) |
92 +| 3 | reward | Dict | * | * | 子任務獎項設定 |
93 +
94 +#### member_lists
95 +
96 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
97 +| ---| ---| ---| ---| ---| --- |
98 +| 3 | id | Integer | | * | `CMS_MISSION_MEMBER_LIST.id` |
99 +| 3 | type | Enum | * | | 名單類型<br>BETA: 封測 (目前只會有封測,且只會有一個名單)<br>WHITE: 白名單<br>BLACK: 黑名單 |
100 +| 3 | filename | String | * | | 檔名 |
101 +| 3 | filepath | String | * | | 名單路徑 |
102 +| 3 | action | Enum | * | | 執行動作:<br>CREATE<br>UPDATE<br>DELETE<br>(建立時一律為 CREATE) |
103 +
104 +#### mission_board.reward / sub_mission.reward
105 +
106 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
107 +| ---| ---| ---| ---| ---| --- |
108 +| 4 | id | Integer | | * | 任務獎勵 ID `AWARD_MISSION_SETTING.ID` |
109 +| 4 | award_group_id | Integer | * | | 獎項群 ID<br>`AWARD_GROUP_ID` |
110 +| 4 | award_id | Integer | * | | 獎項 ID<br>`AWARD_ID` |
111 +| 4 | award_type | Enum | * | | 獎勵類型<br>POINT: 點數<br>VOUCHER: 票券 |
112 +| 4 | award_content | String | * | | 獎勵內容 (顯示於 APP) |
113 +| 4 | quota | Integer | * | | 領獎名額限制 |
114 +
115 +### 子任務條件設定
116 +**每一個 patterns array 內的條件為 "or",每個 每個條件間的關聯為 "and"**
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 + * **field:**
153 + * serial_id 指定票券
154 + * brand_id 指定品牌
155 + * brand_name 品牌關鍵字
156 + * product_name 品名關鍵字
157 + * point_limit 點數限制
158 + * member_identity 會員身份 (第一階段不實作)
159 + * **operator:**
160 + * in 完全相符
161 + * like 包含
162 + * not_like (品牌關鍵字、品名關鍵字)
163 + * not_in (指定票券、指定品牌) 不包含
164 + * ge 大於等於
165 + * le 小於等於
166 + * **value:**不論一或多個值,皆以陣列形式表示 
167 +
168 +### RESPONSE
169 +#### STATUS CODE
170 +* 201
171 +#### HEADERS
172 +
173 +| Name | Type/Len | Desc |
174 +| ---| ---| --- |
175 +| Authorization | String | JWT Token |
176 +| X-Request-Id | String | Returning Request-Id |
177 +
178 +```json
179 +// Example:
180 +{
181 + "Authorization": "Bearer jwt-token",
182 + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb"
183 +}
184 +```
185 +
186 +#### BODY
187 +
188 +| Level | Name | Type/Len | Nullable(*) | Desc |
189 +| ---| ---| ---| ---| --- |
190 +| 1 | status | String | | 回應狀態 (SUCCESS, FAILURE) |
191 +| 1 | data | Dict | | 通用資料包裝 |
192 +| 2 | id | Integer | | `CMS_MISSION_RULE_PATTERN`<br>`.id` |
193 +
194 +#### ERROR CODE
195 +
196 +| HTTP Status | ErrorCode | Message | Desc |
197 +| ---| ---| ---| --- |
198 +| 422 | ValidationError | Mission board reward is required when category is ASSIGNED<br> | 任務類型為指定型時,主任務獎項必填 |
199 +| 422 | ValidationError | Sub mission reward is required when category is MILESTONE (index: {index})<br> | 任務類型為多門檻型時,子任務獎項為必填 |
200 +| 404 | AWARD_NOT_FOUND | Award not found | 獎項不存在 |
201 +| 409 | BETA_LIST_IDENTITY_TYPE_ERROR<br> | Beta list identity type error<br> | 封測名單僅可使用會員編號 |
202 +| 409 | BETA_LIST_VALIDATION_ERROR<br> | Beta list validation error<br> | 封測名單檔案格式錯誤 |
203 +| 409 | BETA_LIST_CONTAINS_NON_MEMBER_ITEMS<br> | Beta list contains non-member items<br> | 封測名單內有不存在的會員編號 |