From 61fef8d0fa17f808da8b11542b9d2139b577aa57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Thu, 1 Jun 2023 06:01:29 +0800 Subject: [PATCH] =?UTF-8?q?enhance(user):=E6=89=93=E9=80=9A=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD=EF=BC=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E7=A8=8B=E5=BA=8F=E5=9F=BA=E6=9C=AC=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/user.go | 49 ++++++++++++++++++++++++++++++++++++++++++++++ repository/user.go | 16 +++++++-------- router/router.go | 3 +++ 3 files changed, 60 insertions(+), 8 deletions(-) create mode 100644 controller/user.go diff --git a/controller/user.go b/controller/user.go new file mode 100644 index 0000000..c5c2ec3 --- /dev/null +++ b/controller/user.go @@ -0,0 +1,49 @@ +package controller + +import ( + "electricity_bill_calc/exceptions" + "electricity_bill_calc/model" + "electricity_bill_calc/response" + "electricity_bill_calc/service" + "net/http" + + "github.com/gofiber/fiber/v2" +) + +func InitializeUserHandlers(router *fiber.App) { + router.Post("/login", doLogin) +} + +type _LoginForm struct { + Username string `json:"uname"` + Password string `json:"upass"` + Type int16 `json:"type"` +} + +func doLogin(c *fiber.Ctx) error { + result := response.NewResult(c) + loginData := new(_LoginForm) + if err := c.BodyParser(loginData); err != nil { + return result.Error(http.StatusInternalServerError, "表单解析失败。") + } + var ( + session *model.Session + err error + ) + if loginData.Type == model.USER_TYPE_ENT { + session, err = service.UserService.ProcessEnterpriseUserLogin(loginData.Username, loginData.Password) + } else { + session, err = service.UserService.ProcessManagementUserLogin(loginData.Username, loginData.Password) + } + if err != nil { + if authError, ok := err.(*exceptions.AuthenticationError); ok { + if authError.NeedReset { + return result.LoginNeedReset() + } + return result.Error(int(authError.Code), authError.Message) + } else { + return result.Error(http.StatusInternalServerError, err.Error()) + } + } + return result.LoginSuccess(session) +} diff --git a/repository/user.go b/repository/user.go index 58c1598..fa42f04 100644 --- a/repository/user.go +++ b/repository/user.go @@ -35,14 +35,14 @@ func (ur _UserRepository) FindUserByUsername(username string) (*model.User, erro ctx, cancel := global.TimeoutContext() defer cancel() - var user = new(model.User) + var user model.User sql, params, _ := ur.ds.From("user").Where(goqu.Ex{"username": username}).Prepared(true).ToSQL() if err := pgxscan.Get(ctx, global.DB, &user, sql, params...); err != nil { ur.log.Error("从数据库查询指定用户名的用户基本信息失败。", zap.String("username", username), zap.Error(err)) return nil, err } cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", username)}, "user", username) - return user, nil + return &user, nil } // 使用用户唯一编号查询指定用户的基本信息 @@ -55,14 +55,14 @@ func (ur _UserRepository) FindUserById(uid string) (*model.User, error) { ctx, cancel := global.TimeoutContext() defer cancel() - var user = new(model.User) + var user model.User sql, params, _ := ur.ds.From("user").Where(goqu.Ex{"id": uid}).Prepared(true).ToSQL() if err := pgxscan.Get(ctx, global.DB, &user, sql, params...); err != nil { ur.log.Error("从数据库查询指定用户唯一编号的用户基本信息失败。", zap.String("user id", uid), zap.Error(err)) return nil, err } cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", uid)}, "user", uid) - return user, nil + return &user, nil } // 使用用户的唯一编号获取用户的详细信息 @@ -75,14 +75,14 @@ func (ur _UserRepository) FindUserDetailById(uid string) (*model.UserDetail, err ctx, cancel := global.TimeoutContext() defer cancel() - var user = new(model.UserDetail) + var user model.UserDetail sql, params, _ := ur.ds.From("user_detail").Where(goqu.Ex{"id": uid}).Prepared(true).ToSQL() if err := pgxscan.Get(ctx, global.DB, &user, sql, params...); err != nil { ur.log.Error("从数据库查询指定用户唯一编号的用户详细信息失败。", zap.String("user id", uid), zap.Error(err)) return nil, err } cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", uid)}, "user_detail", uid) - return user, nil + return &user, nil } // 使用用户唯一编号获取用户的综合详细信息 @@ -95,7 +95,7 @@ func (ur _UserRepository) FindUserInformation(uid string) (*model.UserWithDetail ctx, cancel := global.TimeoutContext() defer cancel() - var user = new(model.UserWithDetail) + var user model.UserWithDetail sql, params, _ := ur.ds. From("user").As("u"). Join( @@ -116,7 +116,7 @@ func (ur _UserRepository) FindUserInformation(uid string) (*model.UserWithDetail return nil, err } cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", uid)}, "user_information", uid) - return user, nil + return &user, nil } // 检查指定用户唯一编号是否存在对应的用户 diff --git a/router/router.go b/router/router.go index db53a00..965eeb3 100644 --- a/router/router.go +++ b/router/router.go @@ -1,6 +1,7 @@ package router import ( + "electricity_bill_calc/controller" "electricity_bill_calc/logger" "electricity_bill_calc/security" "fmt" @@ -43,6 +44,8 @@ func App() *fiber.App { })) app.Use(security.SessionRecovery) + controller.InitializeUserHandlers(app) + return app }