# 8/11 蓋期末專案地基之功能幻想篇
### 專案目標
以實際的作品運用現代框架與工具,呈現計畫中所學的成果
### 產品名稱
Z-axis
### 產品簡介
Z-axis,為您的演說帶來無限的可能。
在虛擬的網路世界中,Z-axis 將連結您(代表 x)與觀眾(代表 y)的即時多人互動,三方串連打造更加自由、更加立體的互動空間。
Z-axis 提供即時匿名留言、按讚投票、抽籤問答、測驗互動、問卷調查...等多項豐富演說的功能,透過即時數據,分析所有活動參與者的想法,以利整場演說延伸出更多互動地可能。
### 產品目標說明
提供演說者:
- 更加直覺、簡潔的使用介面。
- 多樣化的互動功能,例:按讚投票、抽籤問答、測驗互動、問卷調查。
- 後台數據分析功能,了解活動參與者的想法、答題狀況等。
提供參與者:
- 進行「匿名」活動參與,包含留言、投票、答題、抽獎等。
- 透過匿名,更加勇於表達意見、想法與提問。
### 產品需求描述
#### 前台
- 註冊
- google
- email
- 登入
- google
- email
- 頁面
- Q&A 頁面
- 管理員:置頂問題、隨機抽問題、註記回答過的問題
- 參與者:提問、按讚、按讚數量、參與者提問的問題、Q&A 數量
- 測驗頁面
- 管理員:測驗狀態、排名總表
- 參與者:倒數計時、答題、答題狀況、PR 值
- 抽獎頁面
- 管理員:抽獎
- 參與者:中獎名單
- 顯示標題/簡介
- 隱藏標題/簡介
- 切換主題
#### 後台
- 建立
- Q&A
- 標題、簡介、開始時間、結束時間
- 測驗
- 名稱、簡介、題目
- 抽獎
- 名稱、簡介、獎品資訊
- 已建立活動列表
- 已發佈:查看、刪除、查詢關鍵字
- Q&A:名稱、簡介、提問數量、提問內容、連結
- 測驗:名稱、簡介、題目、排名、落點分析
- (落點分析:總參與人數 按下開始測驗,完成人數 時間內交卷,排名,排名折線圖 x題數 y答對人數)
- 抽獎:名稱、簡介、獎品資訊、中獎人名單
- 未發佈:查看、刪除、查詢關鍵字、編輯
- Q&A:名稱、簡介、連結
- 測驗:名稱、簡介、題目
- 抽獎:名稱、簡介、獎品資訊
### 產品架構流程圖
- 產品功能模塊的集合
- (待)
## 功能篇
### role
- 「管理員」: 活動的發起者,可以回答 Q&A 與參與者互動
- 「參與者」: 可以提出 Q&A 給管理員回答
### 系統更新公告
- P2 身為一個管理員,我希望可以在後台看到,官方的系統更新公告
### 註冊功能
( 管理員 - 綁 Google 或輸入信箱/密碼 )
- P0 身為一個管理員,我希望可以透過 Google 帳號註冊
- P0 身為一個管理員,我希望可以透過輸入 email、密碼,來註冊管理員
- P1 身為一個管理員,我希望可以註冊成功後,網頁自動轉向後台
- P1 身為一個管理員,我希望可以在我忘記輸入欄位時,跳出警示訊息,以便提醒我
- P1 身為一個管理員,我希望可以在我重複註冊時,跳出警示訊息,以便提醒我
- P1 身為一個管理員,我希望可以在我輸入密碼未包含英文及數字時,跳出警示訊息,以便提醒我
---
- P3 身為一個管理員,我希望可以透過 email 驗證,來確認非機器人
### 登入功能
- P0 身為一個管理員,我希望可以透過 Google 帳號登入
- P0 身為一個管理員,我希望可以透過輸入 email、密碼登入
- P1 身為一個管理員,我希望可以登入成功後,網頁自動轉向後台
- P1 身為一個管理員,我希望可以在我忘記輸入欄位時,跳出警示訊息,以便提醒我
- P1 身為一個管理員,我希望可以在我輸入錯誤 email 或 密碼時,跳出警示訊息,以便提醒我
### 使用者後台:
- P1 身為一個管理員,我希望可以透過後台,「查看」我發過的每項活動標題、簡介、開始時間、結束時間
- P1 身為一個管理員,我希望可以透過後台,「刪除」我發過的每項活動標題、簡介、開始時間、結束時間
- P1 身為一個管理員,我希望可以透過後台,「編輯」我尚未發出去的活動標題、簡介、開始時間、結束時間
- P2 身為一個管理員,我希望可以透過後台,「搜尋」標題的關鍵字,以查詢我發過某項活動
- P2 身為一個管理員,我希望可以透過後台,「查看」我發過的每項活動,觀眾提問數量
- P2 身為一個管理員,我希望可以透過後台,「查看」我發過的每項活動,觀眾提問內容
- P2 身為一個管理員,我希望可以透過後台,「查看」我發過的活動總數
---
- P1 身為一個管理員,我希望可以透過後台,「點選」進入活動頁面
- P1 身為一個管理員,我希望可以透過後台,「點選」複製連結,讓我可以分享給觀眾
---
- P3 身為一個管理員,我希望可以透過後台,「建立」QRcode
- P3 身為一個管理員,我希望可以透過後台,「下載」QRcode 圖片
---
- P1 身為一個管理員,我希望可以從管理員後台,點選新增 Q&A 活動按鈕
- P3 身為一個管理員,我希望可以從管理員後台,點選建立測驗按鈕
- P3 身為一個管理員,我希望可以點選建立抽獎按鈕
---
- P4 身為一個管理員,我希望可以從線上系統直接回答聽眾的問題(管理員回覆評論功能)
### Q&A
( 管理員 - Q&A 發佈:新增、輸入、發佈、取消 )
- P1 身為一個管理員,我希望可以從管理員後台,點選新增 Q&A 活動按鈕
- P1 身為一個管理員,我希望可以透過輸入活動標題、活動簡介、選擇開始時間、結束時間,以建立活動
- P1 身為一個管理員,我希望可以選擇時間長短,決定最短當天到最長 7 天的匿名留言時間限制
- P1 身為一個管理員,我希望可以在我輸入完輸入框後,可以點選發佈按鈕,成功發佈活動
- P1 身為一個管理員,我希望可以在我忘記輸入欄位時,跳出警示訊息,以便提醒我
- P1 身為一個管理員,我希望可以點選新增活動按鈕後,也可以點選取消按鈕,以取消我正在輸入或開啟的建立畫面
- *開始時間、結束時間設定要查一下
---
( 管理員 - 進入 Q&A 介面:功能 )
- P2 身為一個管理員,我希望可以透過左側欄來「查看」目前的活動標題及簡介
- P2 身為一個管理員,我希望可以透過左側欄來「隱藏」目前的活動標題及簡介
- P2 身為一個管理員,我希望可以透過問題列,將某一則問題置頂
- P2 身為一個管理員,我希望可以透過「點選」問題上的已解決按鈕,將已回答的問題「顯示」在 Resolved 處
- P2 身為一個管理員,我希望可以透過「點選」問題上的已解決按鈕,將已回答的問題「消失」在 Popular / Recent
---
( 管理員 - 進入 Q&A 介面:抽問題 )
- P3 身為一個管理員,我希望可以透過左側欄,來點選隨機抽籤問題按鈕
- P3 身為一個管理員,我希望可以透過左側欄,在點選隨機抽籤之後,隨機抽出我尚未回答的問題(已按讚數加權抽出來)
- P3 身為一個管理員,我希望可以透過左側欄,在點選隨機抽籤之後,抽出其中一則問題,並顯示在置頂的下一則
- P3 身為一個管理員,我希望可以透過左側欄,在點選隨機抽籤之後,抽出其中一則問題,若沒有置頂問題,則置頂
---
( 參與者 - 進入 Q&A 介面:功能 )
- P1 身為一個參與者,我希望不需要註冊,就可以匿名提出問題,或一起輸入暱稱及問題
- P1 身為一個參與者,我希望可以即時看到每個人的問題
---
- P2 身為一個參與者,我希望可以對有興趣的問題按讚
- P2 身為一個參與者,我希望可以看到某問題的按讚數量
- P2 身為一個參與者,我希望可以透過左側欄來「查看」目前的活動標題及簡介
- P2 身為一個參與者,我希望可以透過左側欄來「隱藏」目前的活動標題及簡介
- P2 身為一個參與者,我希望可以點選 My Question,看到我發表過的問題
- P2 身為一個參與者,我希望可以看到 Q&A 裡面,問題的總數
- P2 身為一個參與者,我希望可以切換顯示評論:Popular / Recent / Resolve
---
- P4 身為一個參與者,我希望切換佈景主題
- P4 身為一個參與者,我希望可以透過網址,隨時進入活動頁面,查看管理員的回答
### 測驗:
( 管理員 - 測驗發佈:新增、輸入、發佈、取消 )
- P3 身為一個管理員,我希望可以從管理員後台,點選建立測驗按鈕
- P3 身為一個管理員,我希望可以透過輸入測驗標題、測驗簡介、選擇開始時間、結束時間、勾選設置起始倒數時間(30秒或1分鐘)、設置問題、正確答案、其他選項,以建立測驗
- P3 身為一個管理員,我希望可以在我輸入完輸入框後,可以點選發佈按鈕,成功發佈測驗
- P3 身為一個管理員,我希望可以在我忘記輸入欄位時,跳出警示訊息,以便提醒我
- P3 身為一個管理員,我希望可以點選新增測驗按鈕後,也可以點選取消按鈕,以取消我正在輸入或開啟的建立畫面
---
( 管理員 - 進入測驗介面:功能 )
- P3 身為一個管理員,我希望可以查看目前的測驗狀態,尚未開始/測驗中/測驗結束
- P3 身為一個管理員,我希望可以在測驗結束後,顯示參與者的落點分析(table or 圓餅圖 or 長條圖....)
- P3 身為一個管理員,我希望可以在測驗結束後,查看參與者的答題排名總表(包含參與者 id 與答題狀況,相同成績以最早繳卷排序)
---
( 參與者 - 進入測驗介面:功能 )
- P3 身為一個參與者,我希望測驗的起始倒數時間可以顯示於畫面上,讓我有心理準備,時間一到立即顯示問題
- P3 身為一個參與者,我希望可以在測驗結束的倒數10秒前,畫面上顯示倒數計時,時間到會引爆炸彈(+炸彈聲音),系統會強制交卷
- P3 身為一個參與者,我希望可以在測驗結束後,可以顯示自己的測驗 id與答題狀況(例如:5/10, 2/10, 7/10)
- P4 身為一個參與者,我希望可以在測驗結束後,可以顯示測驗被隨機分配到的暱稱(動物名稱)
### 抽獎:
( 管理員 - 抽獎發佈:新增、輸入、發佈、取消 )
- P4 身為一個管理員,我希望可以點選建立抽獎按鈕
- P4 身為一個管理員,我希望可以透過輸入抽獎活動名稱、抽獎活動簡介、抽獎品項、獎品數量、獎品規格,以建立抽獎
- P4 身為一個管理員,我希望可以在我輸入完輸入框後,可以點選發佈按鈕,成功建立抽獎
- P4 身為一個管理員,我希望可以在我忘記輸入欄位時,跳出警示訊息,以便提醒我
- P4 身為一個管理員,我希望可以點選新增抽獎按鈕後,也可以點選取消按鈕,以取消我正在輸入或開啟的建立畫面
---
( 管理員 - 進入抽獎介面:功能 )
- P4 身為一個管理員,我希望可以點選立即抽獎按鈕,可以依據我的獎品數量,抽出參與者抽獎代號
- P4 身為一個管理員,我希望可以在抽出參與者抽獎代號後,於畫面上顯示
---
( 參與者 - 進入抽獎介面:功能 )
- P4 身為一個參與者,我希望可以輸入姓名、email 後,系統會隨機產生一個參與者抽獎代號,讓我對獎
- P4 身為一個參與者,我希望在抽出參與者抽獎代號後,可以所有中獎的抽獎代號,將顯示於畫面上
### 問卷:
- P4 身為一個管理員,我希望可以點選建立線上問卷按鈕,連結到 google 表單
### 開發工具
- wireframe
- figma
- gitmind
- 前端
- styled components
- React(框架)
- 後端
- Server: express(後端)、socket.io(即時)
- DB: MySQL
- 部署 : heroku(考慮一下冷啟動問題) or 遠端伺服器
- 其他
- webpack
- [Asana](https://asana.com/zh-tw/pricing)
### 風格
- 未來科技、遊戲感
### 連結
- [Asana](https://app.asana.com/0/1200807050490054/board)
- [gitmind](https://gitmind.com/app/doc/ffb3586974a18d41808ad3225bd1b7c7)
- [figma](https://www.figma.com/files/team/1009302895883855323/Z-axis?fuid=1009302891056958970)
- [socket.io 參考影片1](https://creativecoding.in/2020/03/25/%E7%94%A8-socket-io-%E5%81%9A%E4%B8%80%E5%80%8B%E5%8D%B3%E6%99%82%E8%81%8A%E5%A4%A9%E5%AE%A4%E5%90%A7%EF%BC%81%EF%BC%88%E7%9B%B4%E6%92%AD%E7%AD%86%E8%A8%98%EF%BC%89/)
- [socket.io 參考影片2](https://www.youtube.com/watch?v=1BfCnjr_Vjg&ab_channel=Fireship)
### 分支命名規範

ref:https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/454533/
Branch:
- dev
- dev-path
### sequelize db cli
安
```javascript=
// user
npx sequelize-cli model:generate --name User --attributes nickname:string(32),email:string,password:string,userToken:string
npx sequelize-cli model:generate --name User --attributes nickname:string,email:string,password:string,userToken:string
// issue
npx sequelize-cli model:generate --name Issue --attributes title:string,description:text,beginTime:date,finishTime:date,userId:integer
// issue_guest_comment
npx sequelize-cli model:generate --name Issue_Guest_Comment --attributes nickname:string(32),content:text,likesNum:integer,isResolved:boolean,reply:text,replyCreateAt:date,issueId:integer,guestToken:string
npx sequelize-cli model:generate --name Issue_Guest_Comment --attributes nickname:string,content:text,likesNum:integer,isResolved:boolean,reply:text,replyCreateAt:date,issueId:integer,guestToken:string
// guest
npx sequelize-cli model:generate --name Guest --attributes guestToken:string
```
npx sequelize-cli init
npx sequelize-cli db:migrate
## 討論紀錄
#### 8/04 Wed
- Angelina, Carol, Benben 組隊成功
---
#### 8/11 Wed 20:00-21:00
- User Story
#### 8/12 Thu 17:00-18:00
- User Story
- Didi 加入
#### 8/13 Fri 11:00-12:00
- User Story
#### 8/15 Sun
- Carol 退出
---
### week19
#### 8/16 Mon 11:00-12:30
- 開發工具
- 專案名稱:Z-axis
- 專案管理工具:Asana
- 回家作業:找喜歡的 UI
- 明天討論:wireframe
#### 8/17 Tue 11:00-12:30 倒數 54 天
- 討論 UI 方向
- Figma 簡易操作
- 產品簡介(2.1)
- (X)Asana 使用
- (X)User Story 優化
#### 8/18 Wed 11:00-12:30 倒數 53 天
- 研究 Asana
- 優化 User Story(2.3)
- 產品簡介(2.1)
- 產品功能架構規劃 [Function Map](https://gitmind.com/app/doc/ffb3586974a18d41808ad3225bd1b7c7)
- 問題:發佈Q&A後-> 管理員新增抽獎/測驗 -> 產生額外url -> 參與者更新介面(還是會自動更新) -> 顯示按鈕(還是顯示跳出顯示資訊?) -> 連結到抽獎/測驗頁面 -> 有回到Q&A按鈕 -> 回到Q&A前,跳提醒?會消失什麼內容嗎,尚未交卷,離開會消失之類的?,還是 產生額外url -> 需要管理員自己想辦法分享給參與者 -> 以上指的是都有用到的功能
- 解決:提供 url、qrcode 給管理員,管理員自行運用
#### 8/19 Thu 11:00-13:15 倒數 52 天
- 繳交 [week19 homework](https://github.com/Lidemy/mentor-program-5th-angelina524/pull/21)
- 產品功能架構規劃 [Function Map](https://gitmind.com/app/doc/ffb3586974a18d41808ad3225bd1b7c7)
#### 8/20 Fri 11:00-12:30 倒數 51 天
- 檢討 week19 homework
- 使用者流程
- UI 設計通用尺寸查詢 https://medium.com/uxabc/artboard-size-5f0d457f7b32
#### 8/21 Sat 11:00-13:30 倒數 50 天
- 構思介面位置 figma
#### 8/22 Sun 倒數 49 天
- figma 後台, 關於我, Q&A 介面
---
### week20 後端
#### 8/23 Mon 11:00-12:30 倒數 48 天
- figma Q&A, 登入, 註冊 介面完成
#### 8/24 Tue 11:00-12:00 倒數 47 天
- 資料庫欄位:https://drawsql.app/
#### 8/25 Wed 11:00-12:00 倒數 46 天
- 資料庫欄位:https://drawsql.app/
#### 8/26 Thu 11:00-12:00 倒數 45 天
- 中獎人如何兌獎
- 資料庫欄位
#### 8/27 Fri 11:00-12:00 倒數 44 天
- 規劃 API:URL Path Documentation
#### 8/28 Sat 11:00-12:00 倒數 43 天
- 規劃 API:URL Path Documentation
#### 8/29 Sun 倒數 42 天
---
### week21
#### 8/30 Mon 11:00-12:00 倒數 41 天
- 後端分配
- 架基本的插件、環境=> didi
- users => 安潔
- issue => ben
#### 8/31 Tue 11:00-12:00 倒數 40 天
- 確認 github 權限
- 後端開發
- Didi 完成環境建置
- 安潔 完成 user path
#### 9/01 Wed 11:00-12:00 倒數 39 天
- 資料庫欄位屬性整理
- 開 model 指令
#### 9/02 Thu 11:00-12:00 倒數 38 天
- 開票/分票
- 後端開發
#### 9/03 Fri 11:00-12:30 倒數 37 天
- 後端開發
- 需要檢查 Datatypes
- Allen 加入
#### 9/04 Sat 11:00-12:30 倒數 36 天 Didi 主持
- 後端開發
#### 9/05 Sun 倒數 35 天 Ben 主持
- 後端開發
- 使用者流程
- 產品功能架構規劃 Function Map
[參考菜菜](https://hackmd.io/@GXGttDHLSu6-nPfTaqugEw/rJaiwo7hP)
---
### week22
#### 9/06 Mon 11:00-12:00 Allen 主持
#### 9/07 Tue 11:00-12:00 安潔主持
#### 9/08 Wed 11:00-12:00
#### 9/09 Thu 11:00-12:00
#### 9/10 Fri 11:00-12:00
#### 9/11 Sat 11:00-12:00
#### 9/12 Sun
---
### week23
#### 9/13 Mon 11:00-12:00
#### 9/14 Tue 11:00-12:00
#### 9/15 Wed 11:00-12:00
#### 9/16 Thu 11:00-12:00
#### 9/17 Fri 11:00-12:00
#### 9/18 Sat 11:00-12:00
#### 9/19 Sun
---
### week24
#### 9/20 Mon 11:00-12:00
#### 9/21 Tue 11:00-12:00
#### 9/22 Wed 11:00-12:00
#### 9/23 Thu 11:00-12:00
#### 9/24 Fri 11:00-12:00
#### 9/25 Sat 11:00-12:00
#### 9/26 Sun
---
### week25
#### 9/27 Mon 11:00-12:00
#### 9/28 Tue 11:00-12:00
#### 9/29 Wed 11:00-12:00
#### 9/30 Thu 11:00-12:00
#### 10/01 Fri 11:00-12:00
#### 10/02 Sat 11:00-12:00
#### 10/03 Sun
---
### week26