審核列表.md
270 additions, 0 deletions
| ... | ... | @@ -1 +1,271 @@ |
| 1 | +# 任務牆紀錄 - 審核列表 | |
| 2 | +### SUMMARY | |
| 3 | +取得任務牆紀錄審核列表,支援多欄位篩選與分頁,包含審核基本資訊及對應的任務紀錄資料。 | |
| 4 | + | |
| 5 | +### REFERENCE TABLE | |
| 6 | + | |
| 7 | +**Read** | |
| 8 | +* `DBMT.CMS_AUDIT` | |
| 9 | +* `DBMT.CMS_AUDIT_ENTRY` | |
| 10 | +* `DBMT.USER_MISSION_LOG` | |
| 11 | +* `DBMT.MISSION_MASTER_SETTING` | |
| 12 | +* `DBMT.MISSION_SUB_SETTING` | |
| 13 | + | |
| 14 | +### ATTRIBUTES | |
| 15 | +* METHOD: **GET** | |
| 16 | +* PATH: `/api/features/mission-board/record/audit` | |
| 17 | +* LOGIN REQUIRED: **TRUE** | |
| 18 | +* FEATURE: `MISSION_BOARD_RECORD` | |
| 19 | +* PERMISSION: `READ`, `APPLY`, `REVIEW` | |
| 20 | +* CRYPTO: **None** | |
| 21 | + | |
| 22 | +### REQUEST | |
| 23 | +#### HEADERS | |
| 24 | + | |
| 25 | +| Name | Type/Len | Required(*) | Desc | | |
| 26 | +| ---| ---| ---| --- | | |
| 27 | +| Content-Type | String | * | `"application/json"` | | |
| 28 | +| Authorization | String | * | JWT Token | | |
| 29 | +| X-Request-Id | String | | X-Request-Id for api flow tracing | | |
| 30 | + | |
| 31 | +```json | |
| 32 | +// Example: | |
| 33 | +{ | |
| 34 | + "Content-Type": "application/json", | |
| 35 | + "Authorization": "Bearer jwt-token", | |
| 36 | + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb" | |
| 37 | +} | |
| 38 | +``` | |
| 39 | + | |
| 40 | +#### QUERY PARAMETERS | |
| 41 | + | |
| 42 | +| Name | Type/Len | Required(*) | Desc | | |
| 43 | +| ---| ---| ---| --- | | |
| 44 | +| page | Integer | | 頁碼(預設: 1) | | |
| 45 | +| per_page | Integer | | 每頁筆數(預設: 20) | | |
| 46 | +| audit__id | Integer | | 審核 ID | | |
| 47 | +| audit__progress | List(Enum) | | 審核進度: `pending` / `approved` / `rejected` / `error` | | |
| 48 | +| audit__requester_id | Integer | | 申請人 ID | | |
| 49 | +| audit__auditor_id | Integer | | 審核人 ID | | |
| 50 | +| requester__id | Integer | | 申請人使用者 ID | | |
| 51 | +| requester__name | String | | 申請人姓名 | | |
| 52 | +| requester__username | String | | 申請人帳號 | | |
| 53 | +| auditor__id | Integer | | 審核人使用者 ID | | |
| 54 | +| auditor__name | String | | 審核人姓名 | | |
| 55 | +| auditor__username | String | | 審核人帳號 | | |
| 56 | +| user_mission_log__id | Integer | | 任務紀錄 ID | | |
| 57 | +| user_mission_log__user_id | String | | 使用者 ID | | |
| 58 | +| user_mission_log__master_id | Integer | | 主任務 ID | | |
| 59 | +| user_mission_log__sub_id | Integer | | 子任務 ID | | |
| 60 | +| user_mission_log__source | String | | 來源 | | |
| 61 | + | |
| 62 | +```dpr | |
| 63 | +// Example | |
| 64 | +GET /api/features/mission-board/record/audit?page=1&per_page=20&audit__progress=pending&user_mission_log__user_id=U123456 | |
| 65 | +``` | |
| 66 | + | |
| 67 | +### RESPONSE | |
| 68 | +#### STATUS CODE | |
| 69 | +* 200 | |
| 70 | + | |
| 71 | +#### HEADERS | |
| 72 | + | |
| 73 | +| Name | Type/Len | Desc | | |
| 74 | +| ---| ---| --- | | |
| 75 | +| Authorization | String | JWT Token | | |
| 76 | +| X-Request-Id | String | Returning Request-Id | | |
| 77 | + | |
| 78 | +```json | |
| 79 | +// Example: | |
| 80 | +{ | |
| 81 | + "Authorization": "Bearer jwt-token", | |
| 82 | + "x-request-id": "78f91284-d9df-43e6-a8d2-d557273c10bb" | |
| 83 | +} | |
| 84 | +``` | |
| 85 | + | |
| 86 | +#### BODY | |
| 87 | + | |
| 88 | +| Level | Name | Type/Len | Nullable(*) | Desc | | |
| 89 | +| ---| ---| ---| ---| --- | | |
| 90 | +| 1 | status | String | | 回應狀態 (SUCCESS, FAILURE) | | |
| 91 | +| 1 | data | Dict | | 通用資料包裝 | | |
| 92 | +| 2 | items | List | | 審核列表 | | |
| 93 | +| 2 | pagination | Dict | | 分頁資訊 | | |
| 94 | + | |
| 95 | +#### pagination | |
| 96 | + | |
| 97 | +| Level | Name | Type/Len | Nullable(*) | Desc | | |
| 98 | +| ---| ---| ---| ---| --- | | |
| 99 | +| 3 | page | Integer | | 當前頁碼 | | |
| 100 | +| 3 | per_page | Integer | | 每頁筆數 | | |
| 101 | +| 3 | total | Integer | | 總筆數 | | |
| 102 | + | |
| 103 | +#### items (List Item) | |
| 104 | + | |
| 105 | +| Level | Name | Type/Len | Nullable(*) | Desc | | |
| 106 | +| ---| ---| ---| ---| --- | | |
| 107 | +| 3 | id | Integer | | 審核 ID (`CMS_AUDIT.ID`) | | |
| 108 | +| 3 | feature | Enum | | 功能模組 (`MISSION_BOARD_RECORD`) | | |
| 109 | +| 3 | function | String | | 功能名稱 (`primary`) | | |
| 110 | +| 3 | progress | Enum | | 審核進度: `pending` / `approved` / `rejected` / `error` | | |
| 111 | +| 3 | comment | String | * | 審核備註 | | |
| 112 | +| 3 | requester_id | Integer | | 申請人 ID | | |
| 113 | +| 3 | auditor_id | Integer | * | 審核人 ID | | |
| 114 | +| 3 | action | Enum | | 審核動作: `create` / `update` / `delete` | | |
| 115 | +| 3 | create_time | Datetime | | 建立時間 | | |
| 116 | +| 3 | update_time | Datetime | | 更新時間 | | |
| 117 | +| 3 | requester | Dict | | 申請人資訊 | | |
| 118 | +| 3 | auditor | Dict | * | 審核人資訊 | | |
| 119 | +| 3 | data | Dict | | 任務紀錄資料 | | |
| 120 | + | |
| 121 | +#### requester / auditor | |
| 122 | + | |
| 123 | +| Level | Name | Type/Len | Nullable(*) | Desc | | |
| 124 | +| ---| ---| ---| ---| --- | | |
| 125 | +| 4 | id | Integer | | 使用者 ID | | |
| 126 | +| 4 | username | String | | 使用者帳號 | | |
| 127 | +| 4 | name | String | | 使用者姓名 | | |
| 128 | + | |
| 129 | +#### data | |
| 130 | + | |
| 131 | +| Level | Name | Type/Len | Nullable(*) | Desc | | |
| 132 | +| ---| ---| ---| ---| --- | | |
| 133 | +| 4 | mission_master | Dict | * | 主任務資訊 | | |
| 134 | +| 4 | mission_subs | List(Dict) | * | 子任務資訊列表 | | |
| 135 | +| 4 | user_mission_logs | List(Dict) | * | 任務紀錄列表 | | |
| 136 | + | |
| 137 | +#### mission_master | |
| 138 | + | |
| 139 | +| Level | Name | Type/Len | Nullable(*) | Desc | Source | | |
| 140 | +| ---| ---| ---| ---| ---| --- | | |
| 141 | +| 5 | id | Integer | | 主任務 ID | `MISSION_MASTER_SETTING.ID` | | |
| 142 | +| 5 | name | String | | 主任務名稱 | `MISSION_MASTER_SETTING.NAME` | | |
| 143 | +| 5 | status | Enum | | 狀態 | `MISSION_MASTER_SETTING.STATUS` | | |
| 144 | +| 5 | category | Enum | | 任務分類 | `MISSION_MASTER_SETTING.CATEGORY` | | |
| 145 | +| 5 | description | String | | 說明 | `MISSION_MASTER_SETTING.DESCRIPTION` | | |
| 146 | +| 5 | summary | String | | 摘要 | `MISSION_MASTER_SETTING.SUMMARY` | | |
| 147 | +| 5 | visible_start_time | Datetime | * | 顯示開始時間 | `MISSION_MASTER_SETTING.VISIBLE_START_TIME` | | |
| 148 | +| 5 | visible_end_time | Datetime | * | 顯示結束時間 | `MISSION_MASTER_SETTING.VISIBLE_END_TIME` | | |
| 149 | +| 5 | activity_start_time | Datetime | * | 活動開始時間 | `MISSION_MASTER_SETTING.ACTIVITY_START_TIME` | | |
| 150 | +| 5 | activity_end_time | Datetime | * | 活動結束時間 | `MISSION_MASTER_SETTING.ACTIVITY_END_TIME` | | |
| 151 | +| 5 | award_end_time | Datetime | * | 派獎截止時間 | `MISSION_MASTER_SETTING.AWARD_END_TIME` | | |
| 152 | + | |
| 153 | +#### mission_subs (List Item) | |
| 154 | + | |
| 155 | +| Level | Name | Type/Len | Nullable(*) | Desc | Source | | |
| 156 | +| ---| ---| ---| ---| ---| --- | | |
| 157 | +| 5 | id | Integer | | 子任務 ID | `MISSION_SUB_SETTING.ID` | | |
| 158 | +| 5 | name | String | | 子任務名稱 | `MISSION_SUB_SETTING.NAME` | | |
| 159 | +| 5 | activity_type | Enum | | 活動類型 | `MISSION_SUB_SETTING.ACTIVITY_TYPE` | | |
| 160 | +| 5 | category | Enum | | 任務分類 | `MISSION_SUB_SETTING.CATEGORY` | | |
| 161 | +| 5 | master_id | Integer | | 所屬主任務 ID | `MISSION_SUB_SETTING.MASTER_ID` | | |
| 162 | +| 5 | tier | Integer | * | 層級 | `MISSION_SUB_SETTING.TIER` | | |
| 163 | +| 5 | mission_content | Dict | * | 任務內容設定 | `MISSION_SUB_SETTING.MISSION_CONTENT` | | |
| 164 | +| 5 | target_count | Integer | * | 目標次數 | `MISSION_SUB_SETTING.TARGET_COUNT` | | |
| 165 | +| 5 | duplicate | Integer | * | 允許重複次數 | `MISSION_SUB_SETTING.DUPLICATE` | | |
| 166 | +| 5 | cta_visible | Integer | * | CTA 顯示設定 | `MISSION_SUB_SETTING.CTA_VISIBLE` | | |
| 167 | +| 5 | cta_link | String | * | CTA 連結 | `MISSION_SUB_SETTING.CTA_LINK` | | |
| 168 | +| 5 | cta_content | String | * | CTA 文字 | `MISSION_SUB_SETTING.CTA_CONTENT` | | |
| 169 | +| 5 | rule_id | Integer | * | 規則 ID | `MISSION_SUB_SETTING.RULE_ID` | | |
| 170 | +| 5 | create_time | Datetime | | 建立時間 | `MISSION_SUB_SETTING.CREATE_TIME` | | |
| 171 | +| 5 | update_time | Datetime | * | 更新時間 | `MISSION_SUB_SETTING.UPDATE_TIME` | | |
| 172 | + | |
| 173 | +#### user_mission_logs (List Item) | |
| 174 | + | |
| 175 | +| Level | Name | Type/Len | Nullable(*) | Desc | Source | | |
| 176 | +| ---| ---| ---| ---| ---| --- | | |
| 177 | +| 5 | id | Integer | | 任務紀錄 ID | `USER_MISSION_LOG.ID` | | |
| 178 | +| 5 | user_id | String | | 使用者 ID | `USER_MISSION_LOG.USER_ID` | | |
| 179 | +| 5 | master_id | Integer | | 主任務 ID | `USER_MISSION_LOG.MASTER_ID` | | |
| 180 | +| 5 | sub_id | Integer | | 子任務 ID | `USER_MISSION_LOG.SUB_ID` | | |
| 181 | +| 5 | count | Integer | | 次數(可為負數) | `USER_MISSION_LOG.COUNT` | | |
| 182 | +| 5 | source | String | | 來源 | `USER_MISSION_LOG.SOURCE` | | |
| 183 | +| 5 | create_time | Datetime | * | 建立時間 | `USER_MISSION_LOG.CREATE_TIME` | | |
| 184 | + | |
| 185 | +```json | |
| 186 | +// Example: | |
| 187 | +{ | |
| 188 | + "status": "SUCCESS", | |
| 189 | + "data": { | |
| 190 | + "items": [ | |
| 191 | + { | |
| 192 | + "id": 42, | |
| 193 | + "feature": "MISSION_BOARD_RECORD", | |
| 194 | + "function": "primary", | |
| 195 | + "progress": "pending", | |
| 196 | + "comment": null, | |
| 197 | + "requester_id": 1, | |
| 198 | + "auditor_id": null, | |
| 199 | + "action": "create", | |
| 200 | + "create_time": "2026-04-08T10:00:00", | |
| 201 | + "update_time": "2026-04-08T10:00:00", | |
| 202 | + "requester": { | |
| 203 | + "id": 1, | |
| 204 | + "username": "admin", | |
| 205 | + "name": "Admin User" | |
| 206 | + }, | |
| 207 | + "auditor": null, | |
| 208 | + "data": { | |
| 209 | + "mission_master": { | |
| 210 | + "id": 1, | |
| 211 | + "name": "每日登入任務", | |
| 212 | + "status": "ACTIVE", | |
| 213 | + "category": "ASSIGNED", | |
| 214 | + "description": "每日登入任務說明", | |
| 215 | + "summary": "登入任務", | |
| 216 | + "visible_start_time": "2026-01-01 00:00:00", | |
| 217 | + "visible_end_time": "2026-12-31 23:59:59", | |
| 218 | + "activity_start_time": "2026-01-01 00:00:00", | |
| 219 | + "activity_end_time": "2026-12-31 23:59:59", | |
| 220 | + "award_end_time": null | |
| 221 | + }, | |
| 222 | + "mission_subs": [ | |
| 223 | + { | |
| 224 | + "id": 10, | |
| 225 | + "name": "登入一次", | |
| 226 | + "activity_type": "LOGIN", | |
| 227 | + "category": "ASSIGNED", | |
| 228 | + "master_id": 1, | |
| 229 | + "tier": 1, | |
| 230 | + "mission_content": {}, | |
| 231 | + "target_count": 1, | |
| 232 | + "duplicate": 0, | |
| 233 | + "cta_visible": 1, | |
| 234 | + "cta_link": null, | |
| 235 | + "cta_content": null, | |
| 236 | + "rule_id": null, | |
| 237 | + "create_time": "2026-01-01 00:00:00", | |
| 238 | + "update_time": null | |
| 239 | + } | |
| 240 | + ], | |
| 241 | + "user_mission_logs": [ | |
| 242 | + { | |
| 243 | + "id": 101, | |
| 244 | + "user_id": "U123456", | |
| 245 | + "master_id": 1, | |
| 246 | + "sub_id": 10, | |
| 247 | + "count": 5, | |
| 248 | + "source": "CMS", | |
| 249 | + "create_time": null | |
| 250 | + } | |
| 251 | + ] | |
| 252 | + } | |
| 253 | + } | |
| 254 | + ], | |
| 255 | + "pagination": { | |
| 256 | + "page": 1, | |
| 257 | + "per_page": 20, | |
| 258 | + "total": 1 | |
| 259 | + } | |
| 260 | + } | |
| 261 | +} | |
| 262 | +``` | |
| 263 | + | |
| 264 | +#### ERROR CODE | |
| 265 | + | |
| 266 | +| HTTP Status | ErrorCode | Message | Desc | | |
| 267 | +| ---| ---| ---| --- | | |
| 268 | +| 401 | Unauthorized | Unauthorized | 未授權 | | |
| 269 | +| 403 | Forbidden | Forbidden | 無權限存取 | | |
| 270 | +| 422 | ValidationError | Validation error | Schema 驗證失敗 | |