u
This commit is contained in:
1 parent
8408cf779f
commit
25a9e41025
58 files changed
+2079
-6308
No files matched your search
@@ -0,0 +1,66 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package auth
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/db"
|
||||
dbtype "cn/oneao/base-go/db/sqlc"
|
||||
"cn/oneao/base-go/logx"
|
||||
"cn/oneao/base-go/utils/jwtx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
|
||||
"cn/oneao/base-go/biz/model/auth"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// LoginDefault .
|
||||
// @router /auth/login/default [POST]
|
||||
func LoginDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req auth.LoginDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 登录
|
||||
account := req.Account
|
||||
password := req.Password
|
||||
|
||||
params := dbtype.GetUserForLoginParams{
|
||||
Account: account,
|
||||
Password: password,
|
||||
}
|
||||
loginUser, err := db.Queries.GetUserForLogin(ctx, params)
|
||||
|
||||
if err != nil {
|
||||
response.Fail(c).Message("账号或密码错误!").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 异步更新登录事件
|
||||
go func(userID int64) {
|
||||
time, err := db.Queries.UpdateUserLoginLastTime(ctx, userID)
|
||||
if err != nil || time == 0 {
|
||||
logx.CtxError(ctx, "更新用户登录时间失败,UserID=%d, err=%v", loginUser.ID, err)
|
||||
}
|
||||
}(loginUser.ID)
|
||||
|
||||
// 包装数据
|
||||
token, err := jwtx.CreateAccessToken(loginUser.ID)
|
||||
refreshToken, err := jwtx.CreateRefreshToken(loginUser.ID)
|
||||
|
||||
resp := new(auth.LoginDefaultResp)
|
||||
|
||||
resp.Token = token
|
||||
resp.RefreshToken = refreshToken
|
||||
resp.UserId = loginUser.ID
|
||||
resp.Gender = loginUser.Gender.Int32
|
||||
resp.SeqNo = loginUser.SeqNo.Int32
|
||||
resp.Username = loginUser.Username.String
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package auth
|
||||
|
||||
import (
|
||||
auth "cn/oneao/base-go/biz/model/auth"
|
||||
"cn/oneao/base-go/db"
|
||||
dbtype "cn/oneao/base-go/db/sqlc"
|
||||
"cn/oneao/base-go/utils/errorx"
|
||||
"cn/oneao/base-go/utils/idgen"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
"github.com/jackc/pgx/v5"
|
||||
)
|
||||
|
||||
// RegisterDefault .
|
||||
// @router /auth/register/default [POST]
|
||||
func RegisterDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req auth.RegisterDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
account := req.Account
|
||||
password := req.Password
|
||||
|
||||
_, err = db.Queries.GetUserByAccount(ctx, account)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
// 忽略
|
||||
} else {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
response.Fail(c).Message("该账号已被注册").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 开启事务
|
||||
tx, err := db.DB.BeginTx(ctx, pgx.TxOptions{})
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
err := tx.Rollback(ctx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
err := tx.Commit(ctx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// 插入用户
|
||||
params := dbtype.InsertUserParams{
|
||||
ID: idgen.NextId(),
|
||||
Account: account,
|
||||
Password: password,
|
||||
}
|
||||
|
||||
insert, err := db.Queries.WithTx(tx).InsertUser(ctx, params)
|
||||
if err != nil || insert == 0 {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 初始化用户分类
|
||||
err = initMoneyCategoryTx(ctx, tx, params.ID)
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 注册成功
|
||||
response.Success(c).Message("注册成功").Send()
|
||||
}
|
||||
|
||||
func initMoneyCategoryTx(ctx context.Context, tx pgx.Tx, userId int64) error {
|
||||
sysCategories, err := db.Queries.ListMoneySysCategory(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(sysCategories) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
userCategories := make([]dbtype.BatchInsertMoneyUserCategoriesParams, 0, len(sysCategories))
|
||||
for _, sysCat := range sysCategories {
|
||||
userCategories = append(userCategories, dbtype.BatchInsertMoneyUserCategoriesParams{
|
||||
ID: idgen.NextId(),
|
||||
UserID: userId,
|
||||
Name: sysCat.Name,
|
||||
Icon: sysCat.Icon,
|
||||
Type: sysCat.Type,
|
||||
SortNumber: sysCat.SortNumber,
|
||||
})
|
||||
}
|
||||
|
||||
_, err = db.Queries.WithTx(tx).BatchInsertMoneyUserCategories(ctx, userCategories)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package auth
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/utils/errorx"
|
||||
"cn/oneao/base-go/utils/jwtx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
|
||||
auth "cn/oneao/base-go/biz/model/auth"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// RefreshAccessToken .
|
||||
// @router /auth/refreshToken [POST]
|
||||
func RefreshAccessToken(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req auth.RefreshAccessTokenReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
refreshToken := string(c.GetHeader("refreshToken"))
|
||||
if refreshToken == "" {
|
||||
response.Fail(c).
|
||||
Code(response.HttpCode.Unauthorized).
|
||||
Send()
|
||||
return
|
||||
}
|
||||
|
||||
tokenResult := jwtx.VerifyToken(refreshToken)
|
||||
|
||||
if !tokenResult.IsValid || tokenResult.IsExpired {
|
||||
// Refresh Token 无效或过期,需要重新登录
|
||||
response.Fail(c).
|
||||
Code(response.HttpCode.Unauthorized).
|
||||
Send()
|
||||
return
|
||||
}
|
||||
|
||||
userID := tokenResult.Claims.UserID
|
||||
// 生成新的 Access Token
|
||||
newAccessToken, err := jwtx.CreateAccessToken(userID)
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(auth.RefreshAccessTokenResp)
|
||||
resp.AccessToken = newAccessToken
|
||||
|
||||
response.Success(c).
|
||||
Data(resp).
|
||||
Send()
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package login
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
login "cn/oneao/base-go/biz/model/auth/login"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// LoginDefault .
|
||||
// @router /auth/login/default [POST]
|
||||
func LoginDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req login.LoginDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(login.LoginDefaultResp)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package money_category
|
||||
|
||||
import (
|
||||
money_category "cn/oneao/base-go/biz/model/money_category"
|
||||
"cn/oneao/base-go/biz/router/middleware"
|
||||
"cn/oneao/base-go/db"
|
||||
"cn/oneao/base-go/utils/errorx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// QueryUserMoneyCategory .
|
||||
// @router /money/category [GET]
|
||||
func QueryUserMoneyCategory(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req money_category.QueryUserMoneyCategoryReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
userID := middleware.GetUserID(ctx)
|
||||
|
||||
// 查询用户分类
|
||||
moneyUserCategories, err := db.Queries.FindUserMoneyCategoriesByUserID(ctx, userID)
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 构造返回数据,切片类型是 []*UserMoneyCategory
|
||||
resp := &money_category.QueryUserMoneyCategoryResp{
|
||||
Categories: make([]*money_category.UserMoneyCategory, 0, len(moneyUserCategories)),
|
||||
}
|
||||
|
||||
for _, c := range moneyUserCategories {
|
||||
category := &money_category.UserMoneyCategory{
|
||||
Id: c.ID,
|
||||
Name: c.Name,
|
||||
Icon: c.Icon,
|
||||
|
||||
Type: c.Type.Int32,
|
||||
SortNumber: c.SortNumber.Int32,
|
||||
}
|
||||
resp.Categories = append(resp.Categories, category)
|
||||
}
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package register
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
register "cn/oneao/base-go/biz/model/auth/register"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// RegisterDefault .
|
||||
// @router /auth/register/default [POST]
|
||||
func RegisterDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req register.RegisterDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(register.RegisterDefaultResp)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
Reference in new issue
Block a user