enhance(user):打通用户登录功能,调整程序基本结构。
This commit is contained in:
parent
523e6215f4
commit
61fef8d0fa
49
controller/user.go
Normal file
49
controller/user.go
Normal 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)
|
||||||
|
}
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查指定用户唯一编号是否存在对应的用户
|
// 检查指定用户唯一编号是否存在对应的用户
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user