任務牆 - 更新審核編輯.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> | 封測名單內有不存在的會員編號 | |