diff --git a/README.md b/README.md index 382d856..5585cca 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,15 @@ # questionnaire_survey - ### 概述 -问卷调查实现token接口 +问卷调查实现 token 接口 #### handler + +``` POST /send/sendform --> 表单提交 POST /send/getform --> 所有提交表单列表 GET /send/query --> 根据表单id获取对应表单 POST /send/delete --> 根据表单id删除对应表单 POST /send/update --> 根据表单id修改对应表单 +``` diff --git a/go.mod b/go.mod index 175fc3a..1c7c2dc 100644 --- a/go.mod +++ b/go.mod @@ -3,20 +3,18 @@ module myschools.me/wyh/questionnaire_survey go 1.16 require ( - github.com/gin-gonic/gin v1.7.2 // indirect + github.com/gin-gonic/gin v1.7.2 github.com/go-playground/validator/v10 v10.7.0 // indirect - github.com/golang/protobuf v1.5.2 // indirect - github.com/json-iterator/go v1.1.11 // indirect github.com/leodido/go-urn v1.2.1 // indirect github.com/mattn/go-isatty v0.0.13 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect + github.com/sirupsen/logrus v1.8.1 + github.com/spf13/viper v1.8.1 github.com/ugorji/go v1.2.6 // indirect golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c // indirect golang.org/x/text v0.3.6 // indirect google.golang.org/protobuf v1.27.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - gorm.io/driver/mysql v1.1.1 // indirect - gorm.io/gorm v1.21.12 // indirect + gorm.io/driver/mysql v1.1.1 + gorm.io/gorm v1.21.12 ) diff --git a/handler/send-handler.go b/handler/question-handler.go similarity index 55% rename from handler/send-handler.go rename to handler/question-handler.go index 07e1b8f..2b8599b 100644 --- a/handler/send-handler.go +++ b/handler/question-handler.go @@ -2,35 +2,49 @@ package handler import ( "encoding/json" + "fmt" "io/ioutil" "log" "github.com/gin-gonic/gin" "gorm.io/gorm" "myschools.me/wyh/questionnaire_survey/model" - "myschools.me/wyh/questionnaire_survey/mysql" + mysql "myschools.me/wyh/questionnaire_survey/mysql1" ) -//SendForm 提交表单 -func SendForm(c *gin.Context) { - db := mysql.Connect() - submit := model.Submit{Name: "zhangsan", Email: "573805736@qq.com", City: "NingBo", Sex: "男", Hobby: "cg", Desc: "暂无"} - if err := db.Create(&submit).Error; err != nil { +//QuestionSend 提交表单 +func QuestionSend(c *gin.Context) { + db := mysql.New() + payload, err := ioutil.ReadAll(c.Request.Body) + if err != nil { if err != gorm.ErrRecordNotFound { log.Fatal(err) } } + var up = &model.Submit{} + if err := json.Unmarshal(payload, up); err != nil { + if err != gorm.ErrRecordNotFound { + log.Fatal(err) + } + } + fmt.Println(up.DateTime) + fmt.Println(up) + if err := db.Create(up).Error; err != nil { + if err != gorm.ErrRecordNotFound { + log.Fatal(err) + } + } c.JSON(200, gin.H{ "flag": "success", }) } -//GetForm 获取全部表单 -func GetForm(c *gin.Context) { - db := mysql.Connect() +//QuestionList 获取全部表单 +func QuestionList(c *gin.Context) { + db := mysql.New() var forms []model.Submit - if err := db.Find(&forms).Error; err != nil { + if err := db.Where("state=?", 0).Find(&forms).Error; err != nil { if err != gorm.ErrRecordNotFound { log.Fatal(err) } @@ -39,9 +53,9 @@ func GetForm(c *gin.Context) { // c.JSON(200, "ok") } -// Query 查询id对应表单 -func Query(c *gin.Context) { - db := mysql.Connect() +// QuestionQuery 查询id对应表单 +func QuestionQuery(c *gin.Context) { + db := mysql.New() var query = model.Submit{} var id = c.Param("id") if err := db.Where("formid=?", id).Find(&query).Error; err != nil { @@ -52,12 +66,12 @@ func Query(c *gin.Context) { c.JSON(200, query) } -// Delete 删除id对应表单 -func Delete(c *gin.Context) { - db := mysql.Connect() +// QuestionDelete 删除id对应表单 +func QuestionDelete(c *gin.Context) { + db := mysql.New() var query = model.Submit{} var id = c.Param("id") - if err := db.Where("formid=?", id).Delete(&query).Error; err != nil { + if err := db.Model(&query).Where("formid=?", id).Update("state", 1).Error; err != nil { if err != gorm.ErrRecordNotFound { log.Fatal(err) } @@ -67,9 +81,9 @@ func Delete(c *gin.Context) { }) } -// Update 更新id对应表单 -func Update(c *gin.Context) { - db := mysql.Connect() +// QuestionUpdate 更新id对应表单 +func QuestionUpdate(c *gin.Context) { + db := mysql.New() formid := c.Param("id") payload, err := ioutil.ReadAll(c.Request.Body) if err != nil { diff --git a/initmysql.go b/initmysql.go index f3cec41..eb7dc3f 100644 --- a/initmysql.go +++ b/initmysql.go @@ -4,12 +4,12 @@ import ( "fmt" "myschools.me/wyh/questionnaire_survey/model" - "myschools.me/wyh/questionnaire_survey/mysql" + mysql "myschools.me/wyh/questionnaire_survey/mysql1" ) //InitMysql 初始化mysql func InitMysql() { - db := mysql.Connect() + db := mysql.New() if err := db.AutoMigrate(&model.Submit{}); err != nil { fmt.Println("迁移失败") } else { diff --git a/main.go b/main.go index 1224681..df70e82 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,61 @@ package main -import "github.com/gin-gonic/gin" +import ( + "flag" + "fmt" + "net/http" + + "github.com/gin-gonic/gin" + log "github.com/sirupsen/logrus" + "github.com/spf13/viper" +) + +const ( + APPNAME = "Question" +) func main() { + cf := flag.String("config", "config.yaml", "file of config") + flag.Parse() + viper.SetConfigFile(*cf) + if err := viper.ReadInConfig(); err != nil { + log.WithFields(log.Fields{ + "func": "main", + }).Errorf("%s", err.Error()) + return + } + //返回数据格式是json + http.HandleFunc("/", receiveClientRequest) + InitMysql() // handler.SendForm() router := gin.New() setupRouters(router) + // s := &http.Server{ + // Addr: viper.GetString("api.host"), + // Handler: router, + // ReadTimeout: 10 * time.Second, + // WriteTimeout: 10 * time.Second, + // MaxHeaderBytes: 1 << 20, + // } + // fmt.Println(viper.GetString("api.host")) + // log.WithFields(log.Fields{ + // "func": "main", + // }).Infof("%s on %s", APPNAME, viper.GetString("api.host")) + + // if err := s.ListenAndServe(); err != nil { + // log.WithFields(log.Fields{ + // "func": "main", + // }).Errorf("%s", err.Error()) + // } router.Run() } +func receiveClientRequest(w http.ResponseWriter, r *http.Request) { + + w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域 + w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型 + w.Header().Set("content-type", "application/json") //返回数据格式是json + + r.ParseForm() + fmt.Println("收到客户端请求: ", r.Form) +} diff --git a/model/submit.go b/model/submit.go index 1012b46..7a8d37a 100644 --- a/model/submit.go +++ b/model/submit.go @@ -4,16 +4,15 @@ import "time" // Submit 表单提交 type Submit struct { - Formid uint `gorm:"primary_key;auto-increment" json:"-"` - Name string `gorm:"type:varchar(50);not null;" json:"name"` - Email string `gorm:"type:varchar(50);not null;" json:"email"` - City string `gorm:"type:varchar(50);not null;" json:"city"` - Date *time.Time `gorm:"index;" json:"date"` - Time *time.Time `gorm:"index;" json:"time"` - Sex string `gorm:"type:varchar(50);not null;" json:"sex"` - Hobby string `gorm:"type:varchar(50);not null;" json:"hobby"` - Desc string `gorm:"type:varchar(50);not null;" json:"desc"` - CreatedAt time.Time `json:"create_at"` - UpdatedAt time.Time `json:"update_at"` - Serial int `gorm:"size:16" json:"serial"` + Formid uint `gorm:"primary_key;auto-increment" json:"formid"` + Name string `gorm:"type:varchar(50);not null;" json:"name"` + Email string `gorm:"type:varchar(50);not null;" json:"email"` + City string `gorm:"type:varchar(50);not null;" json:"city"` + DateTime string `gorm:"index" json:"date_time"` + Sex string `gorm:"type:varchar(50);not null;" json:"sex"` + Hobby string `gorm:"type:varchar(50);not null;" json:"hobby"` + Desc string `gorm:"type:varchar(50);not null;" json:"desc"` + CreatedAt time.Time `json:"create_at"` + UpdatedAt time.Time `json:"update_at"` + State int `gorm:"index" json:"state"` } diff --git a/mysql1/mysql.go b/mysql1/mysql.go new file mode 100644 index 0000000..979c1f5 --- /dev/null +++ b/mysql1/mysql.go @@ -0,0 +1,53 @@ +package mysql + +import ( + "time" + + log "github.com/sirupsen/logrus" + "github.com/spf13/viper" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" +) + +var ( + _db *gorm.DB +) + +//New mysql instance +func New() *gorm.DB { + if _db != nil { + mysqlDB, err := _db.DB() + if err != nil { + log.WithFields(log.Fields{ + "func": "New", + }).Errorf("%v", err) + goto RENEW + } + if err := mysqlDB.Ping(); err != nil { + mysqlDB.Close() + log.WithFields(log.Fields{ + "func": "New", + }).Errorf("%v", err) + goto RENEW + } + return _db + } + +RENEW: + db, err := gorm.Open(mysql.Open(viper.GetString("mysql.addr")), &gorm.Config{ + SkipDefaultTransaction: true, + Logger: logger.Default.LogMode(logger.Silent), + }) + if err != nil { + log.WithFields(log.Fields{ + "func": "New", + }).Errorf("%v", err) + } + sdb, _ := db.DB() + sdb.SetConnMaxLifetime(time.Hour) + sdb.SetMaxIdleConns(viper.GetInt("mysql.maxidle")) + sdb.SetMaxOpenConns(viper.GetInt("mysql.maxopen")) + _db = db + return _db +} diff --git a/routers.go b/routers.go index c27ef1e..cbea2bb 100644 --- a/routers.go +++ b/routers.go @@ -6,12 +6,13 @@ import ( ) func setupRouters(r *gin.Engine) { - send := r.Group(`send`) + question := r.Group(`question`) { - send.GET(`/sendform`, handler.SendForm) - send.POST(`/getform`, handler.GetForm) - send.GET(`/query/:id`, handler.Query) - send.GET(`/delete/:id`, handler.Delete) - send.POST(`/update/:id`, handler.Update) + + question.POST(`/questionsubmit`, handler.QuestionSend) + question.POST(`/questionlist`, handler.QuestionList) + question.GET(`/questionquery/:id`, handler.QuestionQuery) + question.GET(`/questiondelete/:id`, handler.QuestionDelete) + question.POST(`/questionupdate/:id`, handler.QuestionUpdate) } } diff --git a/test.http b/test.http index b0eec6a..536fc81 100644 --- a/test.http +++ b/test.http @@ -1,33 +1,42 @@ -@url=http://localhost:8080 +@url=http://localhost:8080/question ### form create -GET {{url}}/send/sendform HTTP/1.1 +POST {{url}}/questionsubmit HTTP/1.1 +{ + "name":"zhangsan", + "email":"573805736@qq.com", + "city":"NingBo", + "date_time":"2021-07-27 15:03:41", + "sex":"Male", + "hobby":"Eat", + "desc":"暂无" + +} ### form search -POST {{url}}/send/getform HTTP/1.1 +POST {{url}}/questionlist HTTP/1.1 ### form query -GET {{url}}/send/query/2 HTTP/1.1 +GET {{url}}/questionquery/2 HTTP/1.1 ### form delete -GET {{url}}/send/delete/4 HTTP/1.1 +GET {{url}}/questiondelete/6 HTTP/1.1 ### form update -POST {{url}}/send/update/2 HTTP/1.1 +POST {{url}}/questionupdate/3 HTTP/1.1 { - "name":"lisi", - "email":"781542268@qq.com", - "city":"QuZou", - "data":null, - "time":null, - "sex":"男", - "hobby":"dyx", - "desc":"积极" + "name":"zhang", + "email":"573805736@qq.com", + "city":"BeiJin", + "date_time":"2021-07-27 15:03:41", + "sex":"Male", + "hobby":"Eat", + "desc":"暂无" } \ No newline at end of file