enhance(user):打通用户登录功能,调整程序基本结构。

This commit is contained in:
徐涛 2023-06-01 06:01:29 +08:00
parent 523e6215f4
commit 61fef8d0fa
3 changed files with 60 additions and 8 deletions

49
controller/user.go Normal file
View File

@ -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)
}

View File

@ -35,14 +35,14 @@ func (ur _UserRepository) FindUserByUsername(username string) (*model.User, erro
ctx, cancel := global.TimeoutContext() ctx, cancel := global.TimeoutContext()
defer cancel() 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() 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 { if err := pgxscan.Get(ctx, global.DB, &user, sql, params...); err != nil {
ur.log.Error("从数据库查询指定用户名的用户基本信息失败。", zap.String("username", username), zap.Error(err)) ur.log.Error("从数据库查询指定用户名的用户基本信息失败。", zap.String("username", username), zap.Error(err))
return nil, err return nil, err
} }
cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", username)}, "user", username) 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() ctx, cancel := global.TimeoutContext()
defer cancel() 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() 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 { if err := pgxscan.Get(ctx, global.DB, &user, sql, params...); err != nil {
ur.log.Error("从数据库查询指定用户唯一编号的用户基本信息失败。", zap.String("user id", uid), zap.Error(err)) ur.log.Error("从数据库查询指定用户唯一编号的用户基本信息失败。", zap.String("user id", uid), zap.Error(err))
return nil, err return nil, err
} }
cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", uid)}, "user", uid) 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() ctx, cancel := global.TimeoutContext()
defer cancel() 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() 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 { if err := pgxscan.Get(ctx, global.DB, &user, sql, params...); err != nil {
ur.log.Error("从数据库查询指定用户唯一编号的用户详细信息失败。", zap.String("user id", uid), zap.Error(err)) ur.log.Error("从数据库查询指定用户唯一编号的用户详细信息失败。", zap.String("user id", uid), zap.Error(err))
return nil, err return nil, err
} }
cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", uid)}, "user_detail", uid) 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() ctx, cancel := global.TimeoutContext()
defer cancel() defer cancel()
var user = new(model.UserWithDetail) var user model.UserWithDetail
sql, params, _ := ur.ds. sql, params, _ := ur.ds.
From("user").As("u"). From("user").As("u").
Join( Join(
@ -116,7 +116,7 @@ func (ur _UserRepository) FindUserInformation(uid string) (*model.UserWithDetail
return nil, err return nil, err
} }
cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", uid)}, "user_information", uid) cache.CacheEntity(user, []string{"user", fmt.Sprintf("user:%s", uid)}, "user_information", uid)
return user, nil return &user, nil
} }
// 检查指定用户唯一编号是否存在对应的用户 // 检查指定用户唯一编号是否存在对应的用户

View File

@ -1,6 +1,7 @@
package router package router
import ( import (
"electricity_bill_calc/controller"
"electricity_bill_calc/logger" "electricity_bill_calc/logger"
"electricity_bill_calc/security" "electricity_bill_calc/security"
"fmt" "fmt"
@ -43,6 +44,8 @@ func App() *fiber.App {
})) }))
app.Use(security.SessionRecovery) app.Use(security.SessionRecovery)
controller.InitializeUserHandlers(app)
return app return app
} }