|
@@ -0,0 +1,182 @@
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "fmt"
|
|
|
+ "net/http"
|
|
|
+ "os"
|
|
|
+ "time"
|
|
|
+
|
|
|
+ "git.chuangxin1.com/csacred/toolkit"
|
|
|
+ "git.chuangxin1.com/csacred/toolkit/binding"
|
|
|
+ khttp "git.chuangxin1.com/csacred/toolkit/http"
|
|
|
+ "github.com/chuangxin1/toolkit/types"
|
|
|
+ "github.com/go-kit/kit/log"
|
|
|
+)
|
|
|
+
|
|
|
+// FormID http request from of user
|
|
|
+type FormID struct {
|
|
|
+ ID int `json:"id" db:"id" form:"id"`
|
|
|
+}
|
|
|
+
|
|
|
+// FormUser http request from of user
|
|
|
+type FormUser struct {
|
|
|
+ Page int `json:"page" db:"page" form:"page" validate:"required,gt=0"`
|
|
|
+ PageSize int `json:"pagesize" db:"pagesize" form:"pagesize" validate:"required,gte=5,lte=100"`
|
|
|
+ Code int `json:"code" db:"code" form:"code"`
|
|
|
+ Name string `json:"name" db:"name" form:"name" validate:"max=20"`
|
|
|
+ ID int `json:"id" db:"id" form:"id"`
|
|
|
+}
|
|
|
+
|
|
|
+// User user
|
|
|
+type User struct {
|
|
|
+ ID int `json:"id"`
|
|
|
+ Phone string `json:"phone"`
|
|
|
+ Name string `json:"name"`
|
|
|
+ Passwd string `json:"passwd"`
|
|
|
+ Sex string `json:"sex"`
|
|
|
+ Birthday types.DateText `json:"birthday"`
|
|
|
+ //*
|
|
|
+ Country types.NullInt `json:"country"`
|
|
|
+ Province types.NullInt `json:"province"`
|
|
|
+ City types.NullInt `json:"city"`
|
|
|
+ Nation types.NullInt `json:"nation"`
|
|
|
+ // */
|
|
|
+ Avatar types.NullString `json:"avatar"`
|
|
|
+ Signature types.NullString `json:"signature"`
|
|
|
+ Category int `json:"category"`
|
|
|
+ Scale int `json:"scale"`
|
|
|
+ Score int `json:"score"`
|
|
|
+ Balance float32 `json:"balance"`
|
|
|
+ Status int `json:"status"`
|
|
|
+ Stime string `json:"stime"`
|
|
|
+ Attr types.JSONText `json:"attr"`
|
|
|
+}
|
|
|
+
|
|
|
+func get(u FormID) (user User, err error) {
|
|
|
+ var db = toolkit.NewDB()
|
|
|
+ //if err = db.Connect(); err == nil {
|
|
|
+ //defer db.Close()
|
|
|
+ var (
|
|
|
+ buffer bytes.Buffer
|
|
|
+ where bytes.Buffer
|
|
|
+ )
|
|
|
+
|
|
|
+ buffer.WriteString(`select id, phone, name, password passwd, sex, `)
|
|
|
+ buffer.WriteString(`birthday, country, province, city, nation, avatar, `)
|
|
|
+ buffer.WriteString(`signature, category, balance, scale, score, attr, `)
|
|
|
+ buffer.WriteString(`status, sys_time stime from usr_user`)
|
|
|
+ where.WriteString(` where id > 0 and id = :id`)
|
|
|
+
|
|
|
+ buffer.WriteString(where.String())
|
|
|
+
|
|
|
+ err = db.Row(&user, buffer.String(), u)
|
|
|
+ //}
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func list(formUser FormUser) (users []User, total int, err error) {
|
|
|
+ var db = toolkit.NewDB()
|
|
|
+ //if err = db.Connect(); err == nil {
|
|
|
+ //defer db.Close()
|
|
|
+ var (
|
|
|
+ buffer bytes.Buffer
|
|
|
+ where bytes.Buffer
|
|
|
+ sql bytes.Buffer
|
|
|
+ )
|
|
|
+
|
|
|
+ buffer.WriteString(`select id, phone, name, password passwd, sex, `)
|
|
|
+ buffer.WriteString(`birthday, country, province, city, nation, avatar, `)
|
|
|
+ buffer.WriteString(`signature, category, balance, scale, score, attr, `)
|
|
|
+ buffer.WriteString(`status, sys_time stime `)
|
|
|
+
|
|
|
+ where.WriteString(` from usr_user where id > 0`)
|
|
|
+
|
|
|
+ if len(formUser.Name) > 0 {
|
|
|
+ where.WriteString(` and name like :name`)
|
|
|
+ }
|
|
|
+
|
|
|
+ sql.WriteString(`select count(*) total`)
|
|
|
+ sql.WriteString(where.String())
|
|
|
+ buffer.WriteString(where.String())
|
|
|
+ buffer.WriteString(` order by id desc`)
|
|
|
+ buffer.WriteString(db.Limit(formUser.Page, formUser.PageSize))
|
|
|
+ //fmt.Println(buffer.String(), sql.String())
|
|
|
+ err = db.Row(&total, sql.String(), formUser)
|
|
|
+ //fmt.Println("total", total)
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ err = db.Rows(&users, buffer.String(), formUser)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+func main() {
|
|
|
+ logger := log.NewLogfmtLogger(os.Stderr)
|
|
|
+
|
|
|
+ readTimeout := 30 * time.Second
|
|
|
+ writeTimeout := 30 * time.Second
|
|
|
+ maxHeaderBytes := 1 << 20
|
|
|
+
|
|
|
+ router := khttp.NewRouter()
|
|
|
+
|
|
|
+ khttp.AddGetHandle(router, "/ver", func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ ver := map[string]string{
|
|
|
+ "version": "0.2.0",
|
|
|
+ "comments": "chuangxin1.com API",
|
|
|
+ "author": "ls"}
|
|
|
+ khttp.WriteJSON(w, toolkit.RowReplyData(ver))
|
|
|
+ })
|
|
|
+
|
|
|
+ khttp.AddGetHandle(router, "/users", func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ var user FormUser
|
|
|
+
|
|
|
+ user.Page = 1
|
|
|
+ user.PageSize = 20
|
|
|
+ users, total, err := list(user)
|
|
|
+ if err != nil {
|
|
|
+ khttp.WriteJSON(w, toolkit.ErrReplyData(toolkit.ErrDataNotFound, err.Error()))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ khttp.WriteJSON(w, toolkit.RowsReplyData(total, users))
|
|
|
+ })
|
|
|
+
|
|
|
+ khttp.AddGetHandle(router, "/profile", func(w http.ResponseWriter, r *http.Request) {
|
|
|
+ var user FormID
|
|
|
+
|
|
|
+ binding.Bind(r, &user)
|
|
|
+ users, err := get(user)
|
|
|
+ if err != nil {
|
|
|
+ khttp.WriteJSON(w, toolkit.ErrReplyData(toolkit.ErrDataNotFound, err.Error()))
|
|
|
+ return
|
|
|
+ }
|
|
|
+ khttp.WriteJSON(w, toolkit.RowReplyData(users))
|
|
|
+ })
|
|
|
+
|
|
|
+ dns := fmt.Sprintf(
|
|
|
+ "root:Lsar-5211@tcp(127.0.0.1:3306)/community_user?charset=utf8mb4")
|
|
|
+
|
|
|
+ dbConfig := toolkit.DbConfig{
|
|
|
+ Driver: `mysql`,
|
|
|
+ DNS: dns,
|
|
|
+ MaxOpenConns: 50,
|
|
|
+ MaxIdle: 5,
|
|
|
+ MaxLifetime: 0}
|
|
|
+
|
|
|
+ toolkit.SetDbConfig(dbConfig)
|
|
|
+ defer toolkit.FreeDB()
|
|
|
+
|
|
|
+ //serviceRouter(router, logger)
|
|
|
+ //hs := make(HostSwitch)
|
|
|
+ //hs["192.168.1.8:9122"] = router
|
|
|
+ //toolkit.StartServer(addr, hs, readTimeout, writeTimeout, maxHeaderBytes, logger)
|
|
|
+ khttp.ListenAndServe(
|
|
|
+ ":9006",
|
|
|
+ router,
|
|
|
+ readTimeout,
|
|
|
+ writeTimeout,
|
|
|
+ maxHeaderBytes,
|
|
|
+ logger)
|
|
|
+}
|