#9ea09
Back
2025/12/05
7 min read

派獎 - 建立審核編輯

派獎 - 建立審核編輯.md
213 additions, 0 deletions
... ... @@ -1 +1,214 @@
1 +### SUMMARY
2 +更新待審核的派獎設定申請內容。
3 +* 只能編輯狀態為 PENDING 的審核
4 +* 只能編輯自己申請的審核
5 +* 需檢查派獎時間合理性 (start_time < end_time)
6 +* 需檢查 ETA 發放類型是否提供發放時間
7 +
8 +### REFERENCE TABLE
9 +* `DBMT.CMS_AUDIT`
10 +* `DBMT.CMS_AUDIT_ENTRY`
11 +* `DBMT.AWARD_GROUP`
12 +* `DBMT.AWARD`
13 +* `DBMT.AWARD_GP`
14 +* `DBMT.PUSHNOTIFY_RELATION`
15 +* `DBMT.PUSHNOTIFY_NOTIFICATION_ENTRY`
16 +* `DBMT.PUSHNOTIFY_MESSAGE_ENTRY`
17 +
18 +### ATTRIBUTES
19 +* METHOD: **POST**
20 +* PATH: `/api/features/award/groups/audit/update/{data_id: int}`
21 +* LOGIN REQUIRED: **TRUE**
22 +* FEATURE: `AWARD_GROUP`
23 +* PERMISSION: `UPDATE`, `APPLY`
24 +* CRYPTO: **None**
25 +
26 +### REQUEST
27 +#### HEADERS
28 +
29 +| Name | Type/Len | Required(*) | Nullable(*) | 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 +#### PATH PARAMETERS
45 +
46 +| Name | Type/Len | Required(*) | Desc |
47 +| ---| ---| ---| --- |
48 +| audit_id | Integer | * | 審核 ID |
49 +
50 +#### PAYLOAD
51 +
52 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
53 +| ---| ---| ---| ---| ---| --- |
54 +| 1 | progress | String | * | | 審核進度 |
55 +| 1 | data | Dict | * | | 派獎設定資料 |
56 +
57 +### DATA
58 +
59 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
60 +| ---| ---| ---| ---| ---| --- |
61 +| 2 | award_group | Dict | * | | 派獎群組設定 |
62 +| 2 | create_awards | List(Dict) | | * | 新增獎項設定列表 |
63 +| 2 | update_awards | List(Dict) | * | | 更新獎項設定列表 |
64 +
65 +### award_group
66 +
67 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
68 +| ---| ---| ---| ---| ---| --- |
69 +| 3 | id | Integer | | * | 派獎群組 ID (新增時不提供) |
70 +| 3 | name | String(50) | * | | 派獎群組名稱 |
71 +| 3 | status | Enum | * | | 狀態:<br>ACTIVE: 上架<br>INACTIVE: 下架<br>RETIRED: 永久下架 |
72 +| 3 | start_time | Datetime | * | | 派獎開始時間 |
73 +| 3 | end_time | Datetime | * | | 派獎結束時間 |
74 +
75 +### create_awards (List Item)
76 +
77 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
78 +| ---| ---| ---| ---| ---| --- |
79 +| 3 | award | Dict | * | | 獎項設定 |
80 +| 3 | prize_gp | Dict | * | | 小樹點獎項設定 |
81 +| 3 | notify | Dict | * | | 推播通知設定 |
82 +
83 +### create_awards.award
84 +
85 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
86 +| ---| ---| ---| ---| ---| --- |
87 +| 4 | id | Integer | | * | 獎項 ID (新增時不提供) |
88 +| 4 | code | String(50) | * | | 獎項代碼 |
89 +| 4 | name | String(50) | * | | 獎項名稱 |
90 +| 4 | active_status | Enum | * | | 啟用狀態:<br>ACTIVE: 啟用<br>INACTIVE: 停用 |
91 +| 4 | award_type | Enum | * | | 獎項類型:<br>ORCA_POINT: 小樹點<br>QWARE: Qware 點數<br>SELFGEN_VOUCHER: 自建票券<br>EDENRED: Edenred<br>SYSTEX: Systex |
92 +| 4 | deliver_type | Enum | * | | 發放類型:<br>IMMEDIATE: 立即發放<br>ETA: 預定時間發放 |
93 +| 4 | deliver_amount | Integer | * | | 發放數量 |
94 +| 4 | deliver_limit | Integer | * | | 發放上限 |
95 +| 4 | deliver_time | Datetime | | * | 預定發放時間 (deliver_type=ETA 時必填) |
96 +
97 +### create_awards.prize_gp
98 +
99 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
100 +| ---| ---| ---| ---| ---| --- |
101 +| 4 | id | Integer | | * | 小樹點獎項 ID (新增時不提供) |
102 +| 4 | note | String(64) | | * | 備註 |
103 +
104 +### create_awards.notify
105 +
106 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
107 +| ---| ---| ---| ---| ---| --- |
108 +| 4 | id | Integer | | * | 推播關聯 ID (新增時不提供) |
109 +| 4 | notification | Dict | | * | 外部推播設定 |
110 +| 4 | message | Dict | | * | 訊息夾設定 |
111 +
112 +### create_awards.notification
113 +
114 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
115 +| ---| ---| ---| ---| ---| --- |
116 +| 5 | id | Integer | | * | 推播 ID (新增時不提供) |
117 +| 5 | title | String(300) | * | | 推播標題 |
118 +| 5 | content | String(200) | * | | 推播內文 |
119 +| 5 | notification_behavior | Enum | * | | 推播點擊行為:<br>OPEN_URL: 開啟連結<br>OPEN_INBOX: 開啟訊息夾 |
120 +| 5 | url | String(200) | | * | DeepLink 網址 (notification_behavior=OPEN_URL 時必填) |
121 +
122 +### create_awards.message
123 +
124 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
125 +| ---| ---| ---| ---| ---| --- |
126 +| 5 | id | Integer | | * | 訊息夾 ID (新增時不提供) |
127 +| 5 | title | String(100) | * | | 訊息夾標題 |
128 +| 5 | content | String(4000) | * | | 訊息夾內文 |
129 +| 5 | btn_wording | String(50) | | * | 按鈕文字 |
130 +| 5 | url | String(4000) | | * | 網址 (btn_wording 有值時必填) |
131 +
132 +### update_awards (List Item)
133 +
134 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
135 +| ---| ---| ---| ---| ---| --- |
136 +| 3 | award | Dict | * | | 獎項設定 |
137 +| 3 | prize_gp | Dict | | * | 小樹點獎項設定 |
138 +| 3 | notify | Dict | * | * | 推播通知設定 |
139 +
140 +### update_awards.award
141 +
142 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
143 +| ---| ---| ---| ---| ---| --- |
144 +| 4 | id | Integer | * | | 獎項 ID |
145 +| 4 | code | String(50) | * | | 獎項代碼 |
146 +| 4 | name | String(50) | * | | 獎項名稱 |
147 +| 4 | active_status | Enum | * | | 啟用狀態:<br>ACTIVE: 啟用<br>INACTIVE: 停用 |
148 +| 4 | award_type | Enum | * | | 獎項類型:<br>ORCA_POINT: 小樹點<br>QWARE: Qware 點數<br>SELFGEN_VOUCHER: 自建票券<br>EDENRED: Edenred<br>SYSTEX: Systex |
149 +| 4 | deliver_limit | Integer | * | | 發放上限 |
150 +| 4 | deliver_time | Datetime | | * | 預定發放時間 (deliver_type=ETA 時必填) |
151 +
152 +### update_awards.prize_gp
153 +
154 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
155 +| ---| ---| ---| ---| ---| --- |
156 +| 4 | id | Integer | * | | 小樹點獎項 ID |
157 +| 4 | note | String(64) | | * | 備註 |
158 +
159 +### update_awards.notify
160 +
161 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
162 +| ---| ---| ---| ---| ---| --- |
163 +| 4 | id | Integer | * | | 推播關聯 ID |
164 +| 4 | notification | Dict | | * | 外部推播設定 |
165 +| 4 | message | Dict | | * | 訊息夾設定 |
166 +
167 +### update_awards.notification
168 +
169 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
170 +| ---| ---| ---| ---| ---| --- |
171 +| 5 | id | Integer | * | | 推播 ID |
172 +| 5 | title | String(50) | | | 推播標題 |
173 +| 5 | content | String(150) | | | 推播內文 |
174 +| 5 | notification_behavior | Enum | | | 推播點擊行為:<br>OPEN_URL: 開啟連結<br>OPEN_INBOX: 開啟訊息夾 |
175 +| 5 | url | String(135) | | * | DeepLink 網址 (notification_behavior=OPEN_URL 時必填) |
176 +
177 +### update_awards.message
178 +
179 +| Level | Name | Type/Len | Required(*) | Nullable(*) | Desc |
180 +| ---| ---| ---| ---| ---| --- |
181 +| 5 | id | Integer | * | | 訊息夾 ID |
182 +| 5 | title | String(100) | | | 訊息夾標題 |
183 +| 5 | content | String(4000) | | | 訊息夾內文 |
184 +| 5 | btn_wording | String(50) | | * | 按鈕文字 |
185 +| 5 | url | String(4000) | | * | 網址 (btn_wording 有值時必填) |
186 +
187 +### RESPONSE
188 +#### STATUS CODE
189 +* 200
190 +
191 +#### BODY
192 +
193 +| Level | Name | Type/Len | Nullable(*) | Desc |
194 +| ---| ---| ---| ---| --- |
195 +| 1 | status | String | | 回應狀態 (SUCCESS, FAILURE) |
196 +| 1 | data | Dict | | 通用資料包裝 |
197 +| 2 | id | Integer | | `CMS_AUDIT`.id |
198 +
199 +#### ERROR CODE
200 +
201 +| HTTP Status | ErrorCode | Message | Desc |
202 +| ---| ---| ---| --- |
203 +| 400 | ValidationError | Start time must be before end time | 開始時間必須早於結束時間 |
204 +| 400 | ValidationError | Deliver time must be provided for ETA delivery | ETA 發放類型必須提供發放時間 |
205 +| 400 | ValidationError | Deliver time must not be in the past | 發放時間不可為過去時間 |
206 +| 400 | ValidationError | URL must be provided for OPEN_URL notification behavior | OPEN_URL 行為必須提供 URL |
207 +| 400 | ValidationError | URL must be provided for button action | 按鈕文字有值時必須提供 URL |
208 +| 401 | Unauthorized | Unauthorized | 未授權 |
209 +| 403 | Forbidden | Forbidden | 無權限存取 |
210 +| 400 | AwardGroupAuditError.DELIVER_TIME_BAD_REQUEST | Deliver time must greater than end_time and system now. | 發放時間必須大於結束時間且晚於系統目前時間 |
211 +| 400 | AwardGroupAuditError.AWARD_GROUP_STATUS_BAD_REQUEST | Award group status not allowed to changed. | 派獎群組狀態不允許變更 |
212 +| 400 | AwardGroupAuditError.AWARD_GROUP_START_TIME_BAD_REQUEST | Award group start time must greater than every awards. | 派獎開始時間必須早於所有獎項時間 |
213 +| 400 | AwardGroupAuditError.AWARD_MISSING_BAD_REQUEST | At lease one award setting. | 至少需要一個獎項設定 |