From 9eb2560ed1da9405e70bf02bfa7528ef9db6d3ce Mon Sep 17 00:00:00 2001 From: Shikong <919411476@qq.com> Date: Thu, 6 Oct 2022 16:41:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=8F=8D=E5=B0=84=E6=B3=A8?= =?UTF-8?q?=E5=86=8C=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/app.go | 25 +++++++++++-------------- controller/auth/auth.go | 1 + controller/controller.go | 33 +++++++++++++++------------------ controller/types/type.go | 15 +++++++++++++++ controller/user/user.go | 38 ++++++++++++++++++++++++++++++++++++-- global/app.go | 5 +++++ 6 files changed, 83 insertions(+), 34 deletions(-) create mode 100644 controller/auth/auth.go create mode 100644 controller/types/type.go create mode 100644 global/app.go diff --git a/app/app.go b/app/app.go index 6922b5c..7a5ef6e 100644 --- a/app/app.go +++ b/app/app.go @@ -12,8 +12,6 @@ import ( "gofiber.study.skcks.cn/global" ) -var App *fiber.App - func Run() { err := viper.Unmarshal(global.Config) if err != nil { @@ -28,20 +26,20 @@ func Run() { reloadDataSources(global.Config) reloadJwt(global.Config) - App = reloadApp(global.Config) + global.App = reloadApp(global.Config) - if err := App.Listen(global.Config.Server.Addr); err != nil { + if err := global.App.Listen(global.Config.Server.Addr); err != nil { logger.Log.Fatalf("[x] [Fiber] 致命错误: %s", err) } } func reloadApp(c *config.BasicConfig) *fiber.App { - if App != nil { - _ = App.Shutdown() + if global.App != nil { + _ = global.App.Shutdown() } - app := fiber.New(fiber.Config{ + global.App = fiber.New(fiber.Config{ JSONEncoder: json.Marshal, JSONDecoder: json.Unmarshal, Prefork: c.Server.PreFork, @@ -65,20 +63,19 @@ func reloadApp(c *config.BasicConfig) *fiber.App { }) if c.Server.EnableRoutesMsg { - routes(app) + routes(global.App) } - controller.SwaggerHandler(app) - controller.RegisterController(app) - controller.HelloWorld(app) - controller.ErrorHandler(app) + controller.SwaggerHandler(global.App) + controller.RegisterController(global.App) + controller.ErrorHandler(global.App) - app.Hooks().OnListen(func() error { + global.App.Hooks().OnListen(func() error { utils.MainAppExec(func() { logger.Log.Infoln("[√] [服务启动完成]") }) return nil }) - return app + return global.App } diff --git a/controller/auth/auth.go b/controller/auth/auth.go new file mode 100644 index 0000000..8832b06 --- /dev/null +++ b/controller/auth/auth.go @@ -0,0 +1 @@ +package auth diff --git a/controller/controller.go b/controller/controller.go index 42cc06d..abf581d 100644 --- a/controller/controller.go +++ b/controller/controller.go @@ -4,34 +4,31 @@ import ( "github.com/gofiber/fiber/v2" "github.com/gofiber/swagger" "gofiber.study.skcks.cn/common/errorx" - "gofiber.study.skcks.cn/common/logger" - "gofiber.study.skcks.cn/common/response" "gofiber.study.skcks.cn/controller/casbin" "gofiber.study.skcks.cn/controller/test" "gofiber.study.skcks.cn/controller/user" + "reflect" ) func RegisterController(app *fiber.App) { - user.RegisterController(app) + controllers := make([]interface{}, 0) + controllers = append(controllers, user.NewUserController(app)) + + for _, controller := range controllers { + reflectRegisterRoute(controller) + } + casbin.RegisterController(app) test.RegisterController(app) } -// HelloWorld -// -// @Summary HelloWorld -// @Description 简单的 HelloWorld 示例 -// @Tags HelloWorld -// @Accept json -// @Produce json -// @Success 200 {object} response.Response{data=string} -// @Failure default {object} errorx.CodeErrorResponse -// @Router / [get] -func HelloWorld(app *fiber.App) { - app.Get("/", func(c *fiber.Ctx) error { - logger.Log.Infof("\n%s", c.Request().String()) - return c.JSON(response.NewResponse("Hello, World 👋!")) - }) +func reflectRegisterRoute(controller interface{}) { + t := reflect.ValueOf(controller) + for i := 0; i < t.NumMethod(); i++ { + method := t.Method(i) + args := make([]reflect.Value, 0) + method.Call(args) + } } // ErrorHandler diff --git a/controller/types/type.go b/controller/types/type.go new file mode 100644 index 0000000..9d2f9f9 --- /dev/null +++ b/controller/types/type.go @@ -0,0 +1,15 @@ +package types + +import ( + "github.com/gofiber/fiber/v2" +) + +type Controller struct { + Group fiber.Router +} + +func NewController(app *fiber.App, group string) *Controller { + return &Controller{ + Group: app.Group(group), + } +} diff --git a/controller/user/user.go b/controller/user/user.go index d555784..c144273 100644 --- a/controller/user/user.go +++ b/controller/user/user.go @@ -4,12 +4,46 @@ import ( "github.com/gofiber/fiber/v2" "gofiber.study.skcks.cn/common/errorx" "gofiber.study.skcks.cn/common/response" + "gofiber.study.skcks.cn/controller/types" "gofiber.study.skcks.cn/services/user" ) +type Controller struct { + *types.Controller +} + +func NewUserController(app *fiber.App) *Controller { + controller := Controller{ + Controller: types.NewController(app, "/user"), + } + + //t := reflect.TypeOf(&controller) + //for i := 0; i < t.NumMethod(); i++ { + // method := t.Method(i) + // args := make([]reflect.Value, 0) + // args = append(args, reflect.ValueOf(&controller)) + // method.Func.Call(args) + //} + return &controller +} + +func (c *Controller) GetByAccount() { + c.Group.Get("/account", func(ctx *fiber.Ctx) error { + account := ctx.Query("account") + + u, err := user.GetUserByAccount(account) + if err != nil { + return ctx.JSON(errorx.NewDefaultError(err.Error())) + } + + return ctx.JSON(response.NewResponse(u)) + }) +} + func RegisterController(app *fiber.App) { - group := app.Group("/user") - group.Add(fiber.MethodGet, "/account", getByAccount) + NewUserController(app) + //group := app.Group("/user") + //group.Add(fiber.MethodGet, "/account", getByAccount) } // getByAccount 根据 账号 获取用户信息 diff --git a/global/app.go b/global/app.go new file mode 100644 index 0000000..63b4935 --- /dev/null +++ b/global/app.go @@ -0,0 +1,5 @@ +package global + +import "github.com/gofiber/fiber/v2" + +var App *fiber.App