From c019a2d4be35bf915f751b6a7ef04e3a03d4ec91 Mon Sep 17 00:00:00 2001 From: yedongfu Date: Thu, 20 May 2021 16:57:01 +0800 Subject: [PATCH] example seems ok --- common/utils.go | 21 ++++++++++++++++++++ examples/main.go | 15 +++++++++------ examples/service.go | 47 +++++++++++++++++++++++++-------------------- main.go | 3 +-- 4 files changed, 57 insertions(+), 29 deletions(-) diff --git a/common/utils.go b/common/utils.go index f6a6dd7..2dd10c7 100644 --- a/common/utils.go +++ b/common/utils.go @@ -11,6 +11,8 @@ import ( "github.com/sirupsen/logrus" ) +type M = map[string]interface{} + func OrString(ss ...string) string { for _, s := range ss { if s != "" { @@ -94,3 +96,22 @@ func GetGinApp() *gin.Engine { }) return app } + +func WrapHandler(fn func(*gin.Context) (interface{}, error)) gin.HandlerFunc { + return func(c *gin.Context) { + r, err := fn(c) + var b = []byte{} + if err == nil { + b, err = json.Marshal(r) + } + if err != nil { + logrus.Printf("status: 500, code: 500 message: %s", err.Error()) + c.JSON(500, M{"code": 500, "message": err.Error()}) + } else { + logrus.Printf("status: 200, content: %s", string(b)) + c.Status(200) + c.Writer.Header().Add("Content-Type", "application/json") + c.Writer.Write(b) + } + } +} diff --git a/examples/main.go b/examples/main.go index 6c4dac8..d7b1297 100644 --- a/examples/main.go +++ b/examples/main.go @@ -1,11 +1,19 @@ package examples import ( + "time" + "github.com/sirupsen/logrus" "github.com/yedf/dtm/common" "github.com/yedf/dtm/dtm" ) +func Main() { + go StartSvr() + FireRequest() + time.Sleep(1000 * time.Second) +} + func FireRequest() { gid := common.GenGid() logrus.Printf("busi transaction begin: %s", gid) @@ -26,11 +34,6 @@ func FireRequest() { func StartSvr() { logrus.Printf("examples starting") app := common.GetGinApp() - app.POST(BusiApi+"/TransIn", TransIn) - app.POST(BusiApi+"/TransInCompensate", TransInCompensate) - app.POST(BusiApi+"/TransOut", TransOut) - app.POST(BusiApi+"/TransOutCompensate", TransOutCompensate) - app.GET(BusiApi+"/TransQuery", TransQuery) - logrus.Printf("examples istening at %d", BusiPort) + AddRoute(app) app.Run(":8081") } diff --git a/examples/service.go b/examples/service.go index 8927213..a8fbc41 100644 --- a/examples/service.go +++ b/examples/service.go @@ -1,13 +1,20 @@ package examples import ( - "fmt" - "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" "github.com/yedf/dtm/common" ) +func AddRoute(app *gin.Engine) { + app.POST(BusiApi+"/TransIn", common.WrapHandler(TransIn)) + app.POST(BusiApi+"/TransInCompensate", common.WrapHandler(TransInCompensate)) + app.POST(BusiApi+"/TransOut", common.WrapHandler(TransOut)) + app.POST(BusiApi+"/TransOutCompensate", common.WrapHandler(TransOutCompensate)) + app.GET(BusiApi+"/TransQuery", common.WrapHandler(TransQuery)) + logrus.Printf("examples istening at %d", BusiPort) +} + type M = map[string]interface{} var TransInResult = "" @@ -22,63 +29,61 @@ type TransReq struct { TransOutFailed bool `json:"transOutFailed"` } -func TransIn(c *gin.Context) { +func TransIn(c *gin.Context) (interface{}, error) { gid := c.Query("gid") req := TransReq{} if err := c.BindJSON(&req); err != nil { - return + return nil, err } if req.TransInFailed { - logrus.Printf("%s TransIn %v failed", req) - c.Error(fmt.Errorf("TransIn failed for gid: %s", gid)) - return + logrus.Printf("%s TransIn %v failed", gid, req) + return M{"result": "FAIL"}, nil } res := common.OrString(TransInResult, "SUCCESS") logrus.Printf("%s TransIn: %v result: %s", gid, req, res) - c.JSON(200, M{"result": res}) + return M{"result": res}, nil } -func TransInCompensate(c *gin.Context) { +func TransInCompensate(c *gin.Context) (interface{}, error) { gid := c.Query("gid") req := TransReq{} if err := c.BindJSON(&req); err != nil { - return + return nil, err } res := common.OrString(TransInCompensateResult, "SUCCESS") logrus.Printf("%s TransInCompensate: %v result: %s", gid, req, res) - c.JSON(200, M{"result": res}) + return M{"result": res}, nil } -func TransOut(c *gin.Context) { +func TransOut(c *gin.Context) (interface{}, error) { gid := c.Query("gid") req := TransReq{} if err := c.BindJSON(&req); err != nil { - return + return nil, err } if req.TransOutFailed { logrus.Printf("%s TransOut %v failed", gid, req) - c.JSON(500, M{"result": "FAIL"}) - return + return M{"result": "FAIL"}, nil } res := common.OrString(TransOutResult, "SUCCESS") logrus.Printf("%s TransOut: %v result: %s", gid, req, res) - c.JSON(200, M{"result": res}) + return M{"result": res}, nil } -func TransOutCompensate(c *gin.Context) { +func TransOutCompensate(c *gin.Context) (interface{}, error) { gid := c.Query("gid") req := TransReq{} if err := c.BindJSON(&req); err != nil { - return + return nil, err } res := common.OrString(TransOutCompensateResult, "SUCCESS") logrus.Printf("%s TransOutCompensate: %v result: %s", gid, req, res) - c.JSON(200, M{"result": res}) + return M{"result": res}, nil } -func TransQuery(c *gin.Context) { +func TransQuery(c *gin.Context) (interface{}, error) { gid := c.Query("gid") logrus.Printf("%s TransQuery", gid) res := common.OrString(TransQueryResult, "SUCCESS") - c.JSON(200, M{"result": res}) + return M{"result": res}, nil } diff --git a/main.go b/main.go index 5e7161d..adf274e 100644 --- a/main.go +++ b/main.go @@ -12,7 +12,6 @@ type M = map[string]interface{} func main() { dtmsvr.LoadConfig() go dtmsvr.StartSvr() - go examples.StartSvr() - examples.FireRequest() + go examples.Main() time.Sleep(1000 * 1000 * 1000 * 1000) }