Thundermeet 是針對有相約時間需求的用戶所設計的約時間平台,我們提供 Google 行事曆和內部活動間的匯入匯出、參與時間優先度區分、簡便篩選特定參與者或時間優先度、個人頁面活動整合等功能,透過 Thundermeet,我們希望能有效解決使用者在相約時間時會遇到的困擾,給用戶在過程中更好的使用者體驗。
我們使用 golang 撰寫 APIs 與 unit test,主要包含 Model、Service、Controller 與 Routes 四大部分。
Model 定義存進 DB 的資料結構、Service 內含直接與 DB 進行連線、CRUD 的函數、Controller 為撰寫 Business Logic,進行 User Authentication 的地方,而 Routes 內則定義 APIs 的路徑。另外,我們利用 Heroku Postgres 雲端資料庫儲存資料,在本地開發測試後,部署至 Heroku 雲端上。
以下是 Thundermeet 後端示意圖:
PATCH /v1/users
: 修改使用者資料GET /v1/users
: 獲得使用者資訊POST /v1/users
: 新增使用者(註冊)POST /v1/users/checkAnswer
: 忘記密碼時,檢視提示問題之答案是否正確POST /v1/users/login
: 登入POST /v1/users/resetPassword
: 重置密碼(需驗證checkAnswer後得到jwt,方可修改)
PATCH /v1/events
: 修改活動資料GET /v1/events
: 獲得用戶所有活動資料POST /v1/events
: 新增活動資料GET /v1/events/{event_id}
: 獲得單一活動資料DELETE v1/events/{event_id}
: 刪除單一活動
PUT /v1/timeblocks
: 使用者更新有空時間,傳至後端POST /v1/timeblocks
: 使用者填寫有空時間,傳至後端POST /v1/timeblocks/confirm
: 使用者確認 event 最終時間PATCH /v1/timeblocks/export
: 使用者想從Thundermeet 匯出 timeblocks 時至其他eventPATCH /v1/timeblocks/import
: 使用者想將Thundermeet 其他活動的資訊匯入當前eventGET /v1/timeblocks/{event_id}
: 依據 event id 獲取所有 timeblocks
GET /v1/groups
: 獲得使用者所有群組資料POST /v1/groups
: 創建單一群組DELETE /v1/groups
: 刪除單一群組GET /v1/groups/{group_id}
: 獲得所有群組資訊POST /v1/groups/{group_id}
: 新增活動至單一群組DELETE /v1/groups/{group_id}
: 從單一群組刪除活動PATCH /v1/groups/{group_id}
: 修改單一群組名稱
To install (check your version of Go first):
go get -u github.com/swaggo/swag/cmd/swag
# 1.16 or newer
go install github.com/swaggo/swag/cmd/swag@latest
After writing relevant documentation, do:
-
change some code in
main.go
url := ginSwagger.URL("http://localhost:8080/swagger/doc.json")
// @host localhost:8080/
-
cancel comments of the following rows in
main.go
// envErr := godotenv.Load() // if envErr != nil { // log.Fatal("Error loading .env file") // }
-
swag init
-
go run main.go
-
change some code in
main.go
url := ginSwagger.URL("https://thundermeet-backend.herokuapp.com/swagger/doc.json")
// @host thundermeet-backend.herokuapp.com/
-
comment the following rows in
main.go
envErr := godotenv.Load() if envErr != nil { log.Fatal("Error loading .env file") }
-
swag init
-
Start the deployment process
-
go to https://thundermeet-backend.herokuapp.com/swagger/index.html#/
make sure to do the process of Swagger localhost part
go mod tidy
go run main.go
(Windows) Install docker and make sure docker desktop is running first!
- Note: only need to build if make any project edits
docker build -t thundermeet-be .
docker run --rm -p 8080:8080 thundermeet-be
-
Make sure to do the following processes for the first time
- download
heroku CLI
- In your terminal, type
heroku login
- download
-
The whole deployment process
-
remember to pull before editing!
-
git add .
-
git commit -m "message"
-
git push heroku heroku-deploy:main
-
if we see "404 not found" at https://thundermeet-backend.herokuapp.com/, then the deployment is successful.
-
-
If you want to test your {test-branch} on heroku
git push heroku {test-branch}:main
-
If you want to publish main branch on heroku (not suggested)
git push heroku main
-
If there's any problem after deploying, do the following process
heroku releases
heroku rollback vX
- cd to
test
folder - run
go test
- if you see
ok thundermeet_backend/test
in console, means that all tests have passed.
- createEvent:新增一項活動
- selectOneEvent:根據 event id 查找活動
- getEventParticipants:根據 event id 查找活動參與者
- deleteEvent:刪除一項活動
- deleteEventGroupRelation:刪除活動與群組之間的關聯
- createTimeblock:新增一個時間區塊
- createTimeblockParticipant:新增使用者填寫的時間區塊資料
- getTimeblocksForEvent:取得活動所有的時間區塊
- getStatusForTimeblock:取得該時間區塊使用者空閒狀況
- deleteTimeblocksFromEvent:刪除活動特定時間區塊
- registerOneUser:註冊一個使用者
- selectOneUser:根據 user id 查找一個使用者
- createOneGroup:新增一個群組
- selectOneGroup:根據 group id 查找一個群組