---
# System prepended metadata

title: 110-1 選課網站
tags: [110-1]

---

---
tags: 110-1
---

# 110-1 選課網站

### 下學期預選時程
* 開始時間： 11月初
* 期限：12月13號封測（後端跟演算法一定要好）
* 12月27~29開始預選

### 相關連結

[110-1 預選網站檢討文件](https://docs.google.com/document/d/1Dtg02a07t2bNg8fwKPZEcvn4zul6aDdcaZDqOpZCwRA/edit)

[預選網站檢查SOP](https://ntueesaad.notion.site/COLLAB-f3d3a0ffd8494e8e98241b2101c128e7)

## 2021/12/11
 - [x] priority_value of guarantee has to be number (e?)
 - [x] 特定年級要load原本的資料
 - [ ] **login session problem**
 - [ ] option color faded
 - [ ] alert students not found must be longer?


## 2021/12/3
  ### small bug
 - [x] （威侑） **login button can't click for sometime**
 * 用useHistory, history.push("/"), 參考下面
 - [x] (Justin Huang) **Options showing undefined (if priority_type = "" => show "無")**
 - [x] **priority_value of guarantee has to be number**
 - [x] (陳駿瑋)**courses description required** 
 * 可以去api.js判斷data.description是否為null, 然後改成空字串
 - [x] (Connor Chen）delayed remain time
 - [x] (Connor Chen) students 擋人的403要回到/ or /courses
 - [x] （威侑） maintainer 不可以進去 distribute
 

 ### todo
 - [x] (張創渝 ＆ 黃宥翔)**預選 upload csv (refer to add student)**
 - [x] (張創渝 ＆ 黃宥翔)**add space in courses manage for enter students (also by upload csv)**
 * **上面兩個可以做一個小視窗(rollable)，裡面列出student_id from top to down，右下有個按鈕upload csv** 
 * 前後端都要確定id is in students, if not inside, pop error message
- [x] (Justin Huang) **add course 時 default selected options limit must be 1(trivial), number must larger than 0**
 - [ ] result ui color and 排版...(可以截圖問ui大師)
 - [x] （張創渝）直接列出所有年級的課程(類型由上往下，課程由左往右)(course那邊不要用tab)**類型呢...?**
 - [ ] (梁正)選課及演算法說明寬度變大。**寬度而已...**


* login 按鈕可以參考`src/container/drawer/index.js`
```
useHistory 
import { Link, useHistory } from "react-router-dom";
const history = useHistory();

<div
  style={{ cursor: "pointer" }}
  onClick={() => history.push("/login")}
  aria-hidden="true"
>
  LOGIN
</div>
```

## 2021/11/26
*  options 可以修改(陳駿瑋)
*  接後端(Justin Huang)
*  選課及演算法說明版面寬度可以更大 | 多一個明顯的登入視窗（若沒登入）! | 主頁上面加一個按鈕或其他形式超連結到Course (梁正)
*  加以儲存按鈕+判斷 (Monica Huang)
*  直接列出所有年級的課程(類型由上往下，課程由左往右)(course那邊不要用tab)(張創渝)
*  deal with distribute (Ray Huang)
*  可以增加一個result的頁面（放到 homepage）：查看所有已預選的課程(陳亮瑜)
*  沒選上該課的人前端屏蔽課程(陳亮瑜)

### auto logout problem (in backend?)
![](https://i.imgur.com/tLAXFpJ.png)




## 這次要做的(到2021-fall branch)
選項：
必修（由大到小），某幾個年級優先，大三保障 xx，大四保障xx，全部平等

```
// 必修（null），某幾個年級優先(array)，大三保障 xx(number)，大四保障xx(number)，全部平等(none)
priority_type: String
priority_value: various type

courseSchema({
    id:
    name:
    type:
    description:
    students: 前端屏蔽用
    number: 可選上人數
    options:[
        {
            name:
            limit:
            priority_type: "higher-grade-first", "grades", "guarantee-third-grade", "guarantee-fourth-grade", "none", "preselect" 
            priority_value: 0, [Number], Number, Number, 0, [String]
        }
    ]
})
```

後端：
* 十選二條件（大三大四優先、大三保障xx名、大四保障xx名）需正式加入系統中 
* statistics.csv 可加上 選上 “選項 vs 志願序” 的表格
* (第二次)選項可在前端隱蔽(不清除分發結果，直接去 db 撈) 
* **DONE** 選課期間定期自動備份 一小時一次 可以保留前幾個小時 

前端：
*  options 可以修改(陳駿瑋)
*  可以增加一個result的頁面（放到 homepage）：查看所有已預選的課程, 加一個 status 顯示已儲存
*  使用說明：步驟分開, 滑鼠點擊特效
*  選課及演算法說明版面寬度可以更大 ()
*  直接列出所有年級的課程(類型由上往下，課程由左往右)(course那邊不要用tab)
*  多一個明顯的登入視窗（若沒登入）!
*  主頁上面加一個按鈕或其他形式超連結到Course

有解決方法：
* (第二次)選時段屬於十選二實驗，但僅能上一個志願！（”上兩個”可當新的屬性）: 新增一個Course Type / 多一個Course的欄位

### 資訊部改良事項(待更新)

#### 後端
1. 演算法
    * 十選二條件（大三大四優先、大三保障xx名、大四保障xx名）需正式加入系統中 
    * 選項可在前端隱蔽
    * 網站無法匯出、匯入課程資料
    * preSelect 應加上注明的 “選項“（不只數電實驗可用）且不應在後端特判
2. api
    * statistics.csv 可加上 選上 “選項 vs 志願序” 的表格
    * 一鍵匯出課程資訊
3. database
    * 半導體和電磁波實驗時段選項不應出現在名單以外的人: 用戶特定族群
    * 選時段屬於十選二實驗，但僅能上一個志願！（”上兩個”可當新的屬性）: 新增一個Course Type / 多一個Course的欄位
    *  mongoDB 設定帳號密碼 或 牽至 atlas
    *  選課期間定期自動備份 一小時一次 可以保留前幾個小時



#### 前端介面
1. 功能
    * 一鍵匯出課程資訊
    * 半導體和電磁波實驗時段選項不應出現在名單以外的人: 前端屏蔽
    * 新增course時可以同時把一階實驗預選名單輸入進去
    * Introduction 的 MarkDown，有時 render 會崩潰，插入圖片只能用HTML格式, 編輯器語法跟 render 語法不一樣 (換編輯器/renderer ？)
    * 封測的時候要檢查 對時的問題
    * options可以修改

2. UI
    * 時間旁邊多一個登入視窗（若沒登入）!
    * 直接列出所有年級的課程(類型由上往下，課程由左往右)
    * 選課及演算法說明版面寬度可以更大, 更直覺的翻頁方式, 可從前端 Ｍarkdown 編輯
    * 主頁上面加一個按鈕或其他形式超連結到Course
    * 使用說明：步驟分開, 滑鼠點擊特效
    * login: 打錯密碼連學號不見, 
    * 可以增加一個result的頁面：查看所有已預選的課程, 加一個 status 顯示已儲存
    * ~~加上一個drag indicator （六個點點)~~ 加一個類似 placeholder 在背景提示可以拖
3. Mobile(較不優先)
    * 手機版選課的地方可改為上下, 在前面選課列表可能也要有所調整

4. 新頁面
    * 查詢系統結合

![](https://i.imgur.com/x69X2UF.png)





