From 1961fbeba763065e05a862991b1a58865ec5cb21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A1=9C=E8=8F=AF?= Date: Thu, 11 May 2023 16:32:46 +0800 Subject: [PATCH] session --- models/session.go | 176 ++++++++++++++++++++++++++++++++++++++++++++ routers/sessions.go | 55 ++++++++++++++ 2 files changed, 231 insertions(+) create mode 100644 models/session.go create mode 100644 routers/sessions.go diff --git a/models/session.go b/models/session.go new file mode 100644 index 0000000..5555d3d --- /dev/null +++ b/models/session.go @@ -0,0 +1,176 @@ +package models + +import ( + "log" + "main/configs" +) + +type Session struct { + ID int `json:"id"` + Name string `json:"name"` + CreatedAt string `json:"created_at"` + UpdatedAt string `json:"updated_at"` +} + +func (session *Session) Get() { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return + } + defer db.Close() + row := db.QueryRow("SELECT * FROM sessions WHERE id = ?", session.ID) + err = row.Scan(&session.ID, &session.Name, &session.CreatedAt, &session.UpdatedAt) + if err != nil { + log.Println(err) + return + } +} + +func (session *Session) Create() error { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return err + } + defer db.Close() + stmt, err := db.Prepare("INSERT INTO sessions(name) values(?)") + if err != nil { + log.Println(err) + return err + } + defer stmt.Close() + result, err := stmt.Exec(session.Name) + if err != nil { + log.Println(err) + return err + } + id, err := result.LastInsertId() + if err != nil { + return err + } + session.ID = int(id) + return nil +} + +func (session *Session) Delete() error { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return err + } + defer db.Close() + stmt, err := db.Prepare("DELETE FROM sessions WHERE id = ?") + if err != nil { + log.Println(err) + return err + } + defer stmt.Close() + _, err = stmt.Exec(session.ID) + if err != nil { + log.Println(err) + return err + } + return nil +} + +func (session *Session) Update() error { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return err + } + defer db.Close() + stmt, err := db.Prepare("UPDATE sessions SET name = ? WHERE id = ?") + if err != nil { + log.Println(err) + return err + } + defer stmt.Close() + _, err = stmt.Exec(session.Name, session.ID) + if err != nil { + log.Println(err) + return err + } + return nil +} + +func GetSessions() ([]Session, error) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return nil, err + } + defer db.Close() + rows, err := db.Query("SELECT id, name FROM sessions") + if err != nil { + log.Println(err) + return nil, err + } + defer rows.Close() + sessions := []Session{} + for rows.Next() { + var session Session + if err := rows.Scan(&session.ID, &session.Name); err != nil { + log.Println(err) + return nil, err + } + sessions = append(sessions, session) + } + return sessions, nil +} + +func GetSession(id int) (*Session, error) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return nil, err + } + defer db.Close() + row := db.QueryRow("SELECT id, name FROM sessions WHERE id = ?", id) + var session Session + if err := row.Scan(&session.ID, &session.Name); err != nil { + log.Println(err) + return nil, err + } + return &session, nil +} + +func QuerySessions(page, pagesize int) (list []interface{}) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return + } + defer db.Close() + rows, err := db.Query("SELECT id, name FROM sessions LIMIT ?, ?", (page-1)*pagesize, pagesize) + if err != nil { + log.Println(err) + return + } + defer rows.Close() + for rows.Next() { + var session Session + if err := rows.Scan(&session.ID, &session.Name); err != nil { + log.Println(err) + return + } + list = append(list, session) + } + return +} + +func CountSessions() (count int) { + db, err := configs.GetDB() + if err != nil { + log.Println(err) + return + } + defer db.Close() + row := db.QueryRow("SELECT COUNT(*) FROM sessions") + if err := row.Scan(&count); err != nil { + log.Println(err) + return + } + return +} diff --git a/routers/sessions.go b/routers/sessions.go new file mode 100644 index 0000000..dbefbcc --- /dev/null +++ b/routers/sessions.go @@ -0,0 +1,55 @@ +package routers + +import ( + "main/models" + "main/utils" + "net/http" + + "github.com/gorilla/mux" +) + +// 獲取會話列表 +func SessionsGet(w http.ResponseWriter, r *http.Request) { + var listview models.ListView + listview.Page = utils.ParamInt(r.URL.Query().Get("page"), 1) + listview.PageSize = utils.ParamInt(r.URL.Query().Get("pageSize"), 10) + listview.List = models.QuerySessions(listview.Page, listview.PageSize) + listview.Total = models.CountSessions() + listview.Next = listview.Page*listview.PageSize < listview.Total + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(listview.ToJSON()) +} + +// 創建會話 +func SessionsPost(w http.ResponseWriter, r *http.Request) { + var session models.Session + session.Create() + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(utils.ToJSON(session)) +} + +// 獲取會話 +func SessionsItemGet(w http.ResponseWriter, r *http.Request) { + session := models.Session{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} + session.Get() + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(utils.ToJSON(session)) +} + +// 更新會話 +func SessionsItemPatch(w http.ResponseWriter, r *http.Request) { + session := models.Session{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} + session.Get() + session.Update() + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(utils.ToJSON(session)) +} + +// 刪除會話 +func SessionsItemDelete(w http.ResponseWriter, r *http.Request) { + session := models.Session{ID: utils.ParamInt(mux.Vars(r)["id"], 0)} + session.Get() + session.Delete() + w.Header().Set("Content-Type", "application/json; charset=utf-8") + w.Write(utils.ToJSON(session)) +}