From a45b1f3603cbf060609fc2d75bfb2b343a2e783f Mon Sep 17 00:00:00 2001 From: Jay Date: Tue, 17 Apr 2018 17:16:03 +0800 Subject: [PATCH] fix --- models/album.go | 16 +++++++ models/photo.go | 13 ++++++ modules/apimsg/apimsg.go | 85 ++++++++++++++++++++++++++++++++++++++ modules/context/context.go | 35 ++++++++++++++++ routers/account/account.go | 23 +++++++++++ routers/routes/routes.go | 19 ++++----- 6 files changed, 181 insertions(+), 10 deletions(-) create mode 100644 models/album.go create mode 100644 models/photo.go create mode 100644 modules/apimsg/apimsg.go create mode 100644 modules/context/context.go create mode 100644 routers/account/account.go diff --git a/models/album.go b/models/album.go new file mode 100644 index 0000000..5c0a601 --- /dev/null +++ b/models/album.go @@ -0,0 +1,16 @@ +package models + +import ( + "time" +) + +// Album model +type Album struct { + ID string `xorm:"id"` + UID string `xorm:"uid"` + Name string `xorm:"name"` + Public bool `xorm:"public default false"` + Ctime time.Time `xorm:"ctime created"` + Mtime time.Time `xorm:"mtime updated"` + Photos []*Photo `xorm:"-"` +} diff --git a/models/photo.go b/models/photo.go new file mode 100644 index 0000000..686cc4d --- /dev/null +++ b/models/photo.go @@ -0,0 +1,13 @@ +package models + +import "time" + +// Photo model +type Photo struct { + ID string `xorm:"id"` + Album string `xorm:"album"` + Name string `xorm:"name"` + Thumbnail string `xorm:"thumbnail"` + Ctime time.Time `xorm:"ctime"` + Mtime time.Time `xorm:"mtime"` +} diff --git a/modules/apimsg/apimsg.go b/modules/apimsg/apimsg.go new file mode 100644 index 0000000..a7e2050 --- /dev/null +++ b/modules/apimsg/apimsg.go @@ -0,0 +1,85 @@ +package apimsg + +// ResObject error object +type ResObject struct { + Status int + Obj interface{} +} + +var objs map[string]*ResObject + +// InitError initial error objs +func InitError() { + objs = make(map[string]*ResObject) + + objs["InternalError"] = &ResObject{ + Status: 500, + Obj: map[string]string{ + "message": "Server Internal Error", + }, + } + objs["DataFormat"] = &ResObject{ + Status: 400, + Obj: map[string]string{ + "message": "Data Format Error", + }, + } + objs["Forbidden"] = &ResObject{ + Status: 403, + Obj: map[string]string{ + "message": "Forbidden", + }, + } + objs["Success"] = &ResObject{ + Status: 200, + Obj: map[string]string{ + "message": "Success", + }, + } + objs["LoginFirst"] = &ResObject{ + Status: 401, + Obj: map[string]string{ + "message": "please login first", + }, + } + objs["TokenTimeout"] = &ResObject{ + Status: 401, + Obj: map[string]string{ + "message": "token invaildated", + }, + } + objs["NotFound"] = &ResObject{ + Status: 404, + Obj: map[string]string{ + "message": "Not Found", + }, + } +} + +// GetRes get error obj +func GetRes(name string, msg interface{}) *ResObject { + if objs == nil { + InitError() + } + + obj, ok := objs[name] + if !ok { + obj = objs["InternalError"] + } + + resobj := &ResObject{} + resobj.Status = obj.Status + switch msg.(type) { + case string: + tmp := make(map[string]string) + tmp["message"] = msg.(string) + resobj.Obj = tmp + break + case map[string]interface{}: + resobj.Obj = msg + break + default: + resobj.Obj = obj.Obj + } + return resobj +} diff --git a/modules/context/context.go b/modules/context/context.go new file mode 100644 index 0000000..842d9a7 --- /dev/null +++ b/modules/context/context.go @@ -0,0 +1,35 @@ +package context + +import ( + "git.trj.tw/golang/go-gallery/modules/apimsg" + "github.com/gin-gonic/gin" +) + +// Context custom patch context +type Context struct { + *gin.Context +} + +type CustomMiddle func(*Context) + +func PatchContext(handler CustomMiddle) gin.HandlerFunc { + return func(c *gin.Context) { + ctx := &Context{ + Context: c, + } + handler(ctx) + } +} + +// NotFound response +func (c *Context) NotFound(msg string) { + obj := apimsg.GetRes("NotFound", msg) + // c.JSON(obj.Status, obj.Obj) + c.AbortWithStatusJSON(obj.Status, obj.Obj) +} + +// Success response +func (c *Context) Success(msg interface{}) { + obj := apimsg.GetRes("Success", msg) + c.JSON(obj.Status, obj.Obj) +} diff --git a/routers/account/account.go b/routers/account/account.go new file mode 100644 index 0000000..4ca2b38 --- /dev/null +++ b/routers/account/account.go @@ -0,0 +1,23 @@ +package account + +import ( + "git.trj.tw/golang/go-gallery/modules/context" +) + +// UserLogin route +func UserLogin(c *context.Context) { + loginArg := struct { + Account string `form:"account" json:"account" binding:"required"` + Password string `form:"password" json:"password" binding:"required"` + }{ + Account: "", + Password: "", + } + err := c.ShouldBind(&loginArg) + if err != nil { + c.NotFound("body not found") + return + } + + c.Success("api success") +} diff --git a/routers/routes/routes.go b/routers/routes/routes.go index 73c1ef1..7e39c25 100644 --- a/routers/routes/routes.go +++ b/routers/routes/routes.go @@ -1,15 +1,17 @@ package routes import ( - "fmt" - "git.trj.tw/golang/go-gallery/models" + "git.trj.tw/golang/go-gallery/modules/context" + "git.trj.tw/golang/go-gallery/routers/account" "github.com/gin-gonic/gin" ) // NewServ - get new service func NewServ() *gin.Engine { - r := gin.Default() + r := gin.New() + r.Use(gin.Logger()) + r.Use(gin.Recovery()) return r } @@ -23,7 +25,6 @@ func SetDefaultRoutes(r *gin.Engine) { }) return } - fmt.Println(accs) c.JSON(200, accs) }) @@ -35,11 +36,9 @@ func SetDefaultRoutes(r *gin.Engine) { "message": "Success", }) }) - api.GET("s/", func(c *gin.Context) { - c.JSON(200, gin.H{ - "status": 200, - "message": "api sssss", - }) - }) + } + accountAPI := api.Group("/account") + { + accountAPI.POST("/login", context.PatchContext(account.UserLogin)) } }