# 夢⼯廠遊戲 - 單機遊戲序號兌換功能需求 ## Database - **序號儲存表** - *活動編號:為通用編號,代表平日正常活動* - *活動開始日期* - *活動結束日期* - *活動權限* - *0 => 不與其他活動搭配* - *1 => 與其他活動搭配* - *搭配活動編號: 輸入內容為其他活動編號的文字組合* - *兌換產品編號: 顯⽰兌換的產品編號* - *兌換產品內容: 顯⽰對應的兌換產品內容* - **兌換用序號: 加密後的序號內容** - **發出時間: 呼叫 web api 時間** - **兌換時間: 符合活動資格且已被兌換時間** - **是否已經兌換: 顯⽰是否已經被兌換** - **是否已經過期: 顯⽰兌換時間是否超出活動時間** - **活動儲存表** - *活動編號* - *活動開始日期* - *活動結束日期* - *活動權限* - *0: 不與其他活動搭配* - *1: 與其他活動搭配* - *搭配活動編號: 輸入內容為其他活動編號的文字組合* - *兌換產品編號: 輸入此產品的編號* - *兌換產品名稱: 兌換活動的產品名稱* - **全部數量: 全部可以被兌換的產品數量** - **已兌換數量: 目前已經被兌換的產品數量** ### 序號儲存表 |活動<br>編號|活動<br>開始<br>日期|活動<br>結束<br>日期|活動<br>權限|搭配<br>活動<br>編號|==兌換用<br>序號==|發出<br>時間|兌換<br>時間|是否<br>已經<br>兌換|是否<br>已經<br>過期|兌換<br>產品<br>內容|兌換<br>產品<br>編號| |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| |-1|null|null|0|null|null|null|null|false|false|null|null| ### 活動儲存表 |活動<br>編號|活動<br>開始<br>日期|活動<br>結束<br>日期|活動<br>權限|搭配<br>活動<br>編號|兌換<br>產品<br>編號|兌換<br>產品<br>名稱|全部<br>數量|已兌換<br>數量| |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:| |-1|null|null|0|null|-1|null|-1|-1| ## API - 對遊戲端 - 產生`序號`:產生`活動`需要的兌換商品`序號`,此`序號`只能唯一;並將兌換商品`序號`儲存至 database - 對兌換序號網⾴端 - 輸入`序號`:用戶將`序號`由網⾴輸入進⾏兌換,並與 database 溝通後,判斷`序號`是否過期或未兌換。如果未兌換`序號`則將更新資訊存到 database。最後將結果輸出至網⾴端 - 對後台 - `活動`輸入:維護端將`活動`內容輸入至 database,以提供`序號`比對相對應的`活動`內容 --- ## Implementation ### system generate new serial no for player - generate an unique `serial_no`, then insert one new row on `SerialNo` table, and the final respond the `serial_no`. ||| |:-:|:-:| |request<br>method|`post`| |API|`/api/redeem`| |body|`{}`| |response|`serial_no`| ### player input the serial no for the redeem - find the row on `SerialNo` table with `serial_no` - not found => serial no is wrong - found, then check if - redeemed - expired - out of stock ||| |:-:|:-| |request<br>method|`get`| |API|`/api/verify`| |body|`{`<br>`serial_no`<br>`}`| |response|`wrong_serialno/redeemed/expired/outofstock/success`| ### add more events - create/modify/delete a event, according to the request method and the `event_no` ||| |:-:|:-| |request<br>method|`post/patch/delete`| |API|`/event`| |body|`{`<br>`[event_no]`<br>`event_start`<br>`event_end`<br>`event_auth`<br>`event_others`<br>`redeem_no`<br>`redeem_title`<br>`redeem_total_amount`<br>`redeemed_amount`<br>`}`| |response|`execution status`| ## QnA - ~~`活動儲存表`中的大部分欄位與`序號儲存表`對應? 是否能改以 foreign key 對應?~~ - `序號`是否有限制格式, 多少位數, 純數字, 純英文或數英混合? - 呼叫產生`序號`的 API 時, 系統需要在`序號儲存表`新增一筆資料, 這筆資料中的`活動`相關資料要以誰為準? - 呼叫核對`序號`的 API 時, 系統除了回復`已經兌換`, `已經到期`, 還會有其他可能的核對結果? 例如, `數量不足` - `活動編號` 是流水號嗎? 還是由維護端填入?