成功代理登录功能

This commit is contained in:
474420502 2024-04-12 10:20:29 +08:00
parent 809c0deaa2
commit 6e8a6eb7d1
7 changed files with 196 additions and 96 deletions

View File

@ -2,6 +2,7 @@ package actions
import ( import (
"strings" "strings"
"time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/iapologizewhenimwrong/Vestmore_GO/model" "github.com/iapologizewhenimwrong/Vestmore_GO/model"
@ -20,10 +21,12 @@ var CompanyKey = "vestmore-bjwl"
// app_market: string; // app_market: string;
// lang: string; // lang: string;
// token: string; // token: string;
func BaseGetToken(ctx *gin.Context, param *BaseGetTokenParam, resp *basic.Response) { func BaseGetToken(ctx *gin.Context, param *BaseGetTokenParam) (resp *basic.Response) {
ctx.ShouldBind(param) ctx.ShouldBind(param)
// model.Models.KillaraCustomerModel.Find() // model.Models.KillaraCustomerModel.Find()
log.Println() log.Println()
return resp.Success()
} }
// @Action account/loginWithTelephonePassword // @Action account/loginWithTelephonePassword
@ -40,22 +43,22 @@ func BaseGetToken(ctx *gin.Context, param *BaseGetTokenParam, resp *basic.Respon
// app_market: uint64; // app_market: uint64;
// email: string; // email: string;
// timestamp: int64; // timestamp: int64;
func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWithTelephonePasswordParam, resp *basic.Response) { func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWithTelephonePasswordParam) (resp *basic.Response) {
// ctx.ShouldBind() // ctx.ShouldBind()
// model.Models.KillaraCustomerModel.Find() // model.Models.KillaraCustomerModel.Find()
if param.CountryCode == "" { if param.CountryCode == "" {
resp.ErrorEx(1, "country_code 参数缺失") resp.ErrorMsg(1, "country_code 参数缺失")
return return
} }
if param.Telephone == "" { if param.Telephone == "" {
resp.ErrorEx(1, "telephone 参数缺失") resp.ErrorMsg(1, "telephone 参数缺失")
return return
} }
if param.Password == "" { if param.Password == "" {
resp.ErrorEx(1, "password 参数缺失") resp.ErrorMsg(1, "password 参数缺失")
return return
} }
@ -70,43 +73,38 @@ func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWith
customer, err = model.Models.KillaraCustomerModel.GetCustomerByTelephoneForBackEnd(telephone) customer, err = model.Models.KillaraCustomerModel.GetCustomerByTelephoneForBackEnd(telephone)
if err != nil { if err != nil {
resp.ErrorEx(1, err.Error()) resp.ErrorMsg(1, err.Error())
return return
} }
if customer == nil { if customer == nil {
customer, err = model.Models.KillaraCustomerModel.GetCustomerByCode(telephone) customer, err = model.Models.KillaraCustomerModel.GetCustomerByCode(telephone)
if err != nil { if err != nil {
resp.ErrorEx(1, err.Error()) resp.ErrorMsg(1, err.Error())
return return
} }
} }
if customer == nil { if customer == nil {
resp.ErrorEx(1, "账号未注册") return resp.ErrorMsg(1, "账号未注册")
return
} }
if *customer.CountryCode != countryCode { if *customer.CountryCode != countryCode {
resp.ErrorEx(1, "电话号码国家不正确") return resp.ErrorMsg(1, "电话号码国家不正确")
return
} }
if *customer.Status != 1 { if *customer.Status != 1 {
resp.ErrorEx(1, "账号已禁用,无法登录") return resp.ErrorMsg(1, "账号已禁用,无法登录")
return
} }
if !auth.CheckPassword(*customer.Password, *customer.Salt, *customer.RandomPassword, password) { if !auth.CheckPassword(*customer.Password, *customer.Salt, *customer.RandomPassword, password) {
resp.ErrorEx(1, "账号或密码错误") return resp.ErrorMsg(1, "账号或密码错误")
return
} }
customerID := *customer.CustomerId customerID := *customer.CustomerId
err = model.Models.KillaraCustomerTokenModel.UpdateTokenCustomerID(param.Token, customerID) err = model.Models.KillaraCustomerTokenModel.UpdateTokenCustomerID(param.Token, customerID)
if err != nil { if err != nil {
resp.ErrorEx(1, err.Error()) return resp.ErrorMsg(1, err.Error())
return
} }
var deviceCode string var deviceCode string
@ -127,20 +125,25 @@ func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWith
log.Println(deviceCode, version, ip) log.Println(deviceCode, version, ip)
// data := model.KillaraCustomerDevice{ data := &model.KillaraCustomerDevice{
// CustomerId: &customerID, CustomerId: &customerID,
// Device: &deviceCode, Device: &deviceCode,
// Version: &version, Version: &version,
// Ip: &ip, Ip: &ip,
// AppMarket: &param., AppMarket: &param.AppMarket,
// Date: time.Now().Format("2006-01-02 15:04:05"), Date: basic.TimePtr(time.Now()),
// } }
// // 假设 insertCustomerDevice 是对应的服务接口 // 假设 insertCustomerDevice 是对应的服务接口
// insertCustomerDevice(data) // insertCustomerDevice(data)
err = model.Models.KillaraCustomerModel.InsertCustomerDevice(data)
if err != nil {
return resp.ErrorErr(1, err)
}
// // 假设 clearDuplicateToken 是对应的服务接口 // // 假设 clearDuplicateToken 是对应的服务接口
// clearDuplicateToken(customerID, param.Token) // clearDuplicateToken(customerID, param.Token)
model.Models.KillaraCustomerTokenModel.ClearDuplicateToken(customerID, param.Token, 1)
// return map[string]interface{}{ // return map[string]interface{}{
// "success": true, // "success": true,
@ -150,6 +153,7 @@ func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWith
// }, nil // }, nil
// log.Println(param) // log.Println(param)
return resp.Success()
} }
// @Action account/registerSmsCode // @Action account/registerSmsCode
@ -158,9 +162,10 @@ func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWith
// country_code?: string; // country_code?: string;
// telephone?: string; // telephone?: string;
// token: string; // token: string;
func AccountRegisterSmsCode(ctx *gin.Context, param *AccountRegisterSmsCodeParam, resp *basic.Response) { func AccountRegisterSmsCode(ctx *gin.Context, param *AccountRegisterSmsCodeParam) (resp *basic.Response) {
// ctx.ShouldBind() // ctx.ShouldBind()
log.Println() log.Println()
return resp.Success()
} }
// @Action account/forgetSmsCode // @Action account/forgetSmsCode
@ -169,9 +174,10 @@ func AccountRegisterSmsCode(ctx *gin.Context, param *AccountRegisterSmsCodeParam
// country_code?: string; // country_code?: string;
// telephone?: string; // telephone?: string;
// token: string; // token: string;
func AccountForgetSmsCode(ctx *gin.Context, param *AccountForgetSmsCodeParam, resp *basic.Response) { func AccountForgetSmsCode(ctx *gin.Context, param *AccountForgetSmsCodeParam) (resp *basic.Response) {
// ctx.ShouldBind() // ctx.ShouldBind()
log.Println() log.Println()
return resp.Success()
} }
type RegisterValidEmailCode struct { type RegisterValidEmailCode struct {
@ -189,12 +195,11 @@ type RegisterValidEmailCode struct {
// email: string; // email: string;
// timestamp: int64; // timestamp: int64;
// token: string; // token: string;
func AccountRegisterEmailCode(ctx *gin.Context, param *AccountRegisterEmailCodeParam, resp *basic.Response) { func AccountRegisterEmailCode(ctx *gin.Context, param *AccountRegisterEmailCodeParam) (resp *basic.Response) {
log.Println(param) log.Println(param)
if !email.IsEmailValid(param.Email) { if !email.IsEmailValid(param.Email) {
resp.Error(basic.ErrEmailFormat) return resp.Error(basic.ErrEmailFormat)
return
} }
gcm := encryption_decryption.NewSecretGCM[RegisterValidEmailCode](CompanyKey) gcm := encryption_decryption.NewSecretGCM[RegisterValidEmailCode](CompanyKey)
@ -207,13 +212,13 @@ func AccountRegisterEmailCode(ctx *gin.Context, param *AccountRegisterEmailCodeP
} }
tokenstr, err := gcm.Encrypt(codetoken) tokenstr, err := gcm.Encrypt(codetoken)
if err != nil { if err != nil {
resp.Error(basic.ErrEncGcm) return resp.Error(basic.ErrEncGcm)
return
} }
resp.Success(map[string]any{ resp.Success(map[string]any{
"token": tokenstr, "token": tokenstr,
}) })
return resp.Success()
} }
// @Action member/alterPassword // @Action member/alterPassword
@ -223,9 +228,10 @@ func AccountRegisterEmailCode(ctx *gin.Context, param *AccountRegisterEmailCodeP
// new_password: string; // new_password: string;
// old_password: string; // old_password: string;
// token?: string; // token?: string;
func MemberAlterPassword(ctx *gin.Context, param *MemberAlterPasswordParam, resp *basic.Response) { func MemberAlterPassword(ctx *gin.Context, param *MemberAlterPasswordParam) (resp *basic.Response) {
// ctx.ShouldBind() // ctx.ShouldBind()
log.Println() log.Println()
return resp.Success()
} }
// @Action account/loginWithEmailPassword // @Action account/loginWithEmailPassword
@ -240,7 +246,8 @@ func MemberAlterPassword(ctx *gin.Context, param *MemberAlterPasswordParam, resp
// email: string; // email: string;
// timestamp: int64; // timestamp: int64;
// token: string; // token: string;
func AccountLoginWithEmailPassword(ctx *gin.Context, param *AccountLoginWithEmailPasswordParam, resp *basic.Response) { func AccountLoginWithEmailPassword(ctx *gin.Context, param *AccountLoginWithEmailPasswordParam) (resp *basic.Response) {
log.Println(param) log.Println(param)
return resp.Success()
} }

View File

@ -1,28 +1,27 @@
package actions package actions
import ( import (
"<no value>/utils/basic"
"<no value>/utils/log"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/iapologizewhenimwrong/Vestmore_GO/utils/basic"
"github.com/iapologizewhenimwrong/Vestmore_GO/utils/log"
) )
var HandlersFuncRoutes map[string]gin.HandlerFunc = make(map[string]gin.HandlerFunc) var HandlersFuncRoutes map[string]gin.HandlerFunc = make(map[string]gin.HandlerFunc)
func init() { func init() {
// func AccountForgetSmsCode(ctx *gin.Context, param *AccountForgetSmsCodeParam, resp *basic.Response) // func AccountForgetSmsCode(ctx *gin.Context, param *AccountForgetSmsCodeParam) (resp *basic.Response)
HandlersFuncRoutes["account/forgetSmsCode"] = AccountForgetSmsCodeHandler HandlersFuncRoutes["account/forgetSmsCode"] = AccountForgetSmsCodeHandler
// func AccountLoginWithEmailPassword(ctx *gin.Context, param *AccountLoginWithEmailPasswordParam, resp *basic.Response) // func AccountLoginWithEmailPassword(ctx *gin.Context, param *AccountLoginWithEmailPasswordParam) (resp *basic.Response)
HandlersFuncRoutes["account/loginWithEmailPassword"] = AccountLoginWithEmailPasswordHandler HandlersFuncRoutes["account/loginWithEmailPassword"] = AccountLoginWithEmailPasswordHandler
// func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWithTelephonePasswordParam, resp *basic.Response) // func AccountLoginWithTelephonePassword(ctx *gin.Context, param *AccountLoginWithTelephonePasswordParam) (resp *basic.Response)
HandlersFuncRoutes["account/loginWithTelephonePassword"] = AccountLoginWithTelephonePasswordHandler HandlersFuncRoutes["account/loginWithTelephonePassword"] = AccountLoginWithTelephonePasswordHandler
// func AccountRegisterEmailCode(ctx *gin.Context, param *AccountRegisterEmailCodeParam, resp *basic.Response) // func AccountRegisterEmailCode(ctx *gin.Context, param *AccountRegisterEmailCodeParam) (resp *basic.Response)
HandlersFuncRoutes["account/registerEmailCode"] = AccountRegisterEmailCodeHandler HandlersFuncRoutes["account/registerEmailCode"] = AccountRegisterEmailCodeHandler
// func AccountRegisterSmsCode(ctx *gin.Context, param *AccountRegisterSmsCodeParam, resp *basic.Response) // func AccountRegisterSmsCode(ctx *gin.Context, param *AccountRegisterSmsCodeParam) (resp *basic.Response)
HandlersFuncRoutes["account/registerSmsCode"] = AccountRegisterSmsCodeHandler HandlersFuncRoutes["account/registerSmsCode"] = AccountRegisterSmsCodeHandler
// func BaseGetToken(ctx *gin.Context, param *BaseGetTokenParam, resp *basic.Response) // func BaseGetToken(ctx *gin.Context, param *BaseGetTokenParam) (resp *basic.Response)
HandlersFuncRoutes["base/getToken"] = BaseGetTokenHandler HandlersFuncRoutes["base/getToken"] = BaseGetTokenHandler
// func MemberAlterPassword(ctx *gin.Context, param *MemberAlterPasswordParam, resp *basic.Response) // func MemberAlterPassword(ctx *gin.Context, param *MemberAlterPasswordParam) (resp *basic.Response)
HandlersFuncRoutes["member/alterPassword"] = MemberAlterPasswordHandler HandlersFuncRoutes["member/alterPassword"] = MemberAlterPasswordHandler
} }
@ -34,18 +33,21 @@ type AccountForgetSmsCodeParam struct {
} }
func AccountForgetSmsCodeHandler(ctx *gin.Context) { func AccountForgetSmsCodeHandler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &AccountForgetSmsCodeParam{} param := &AccountForgetSmsCodeParam{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
AccountForgetSmsCode(ctx, param, resp) resp = AccountForgetSmsCode(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }
type AccountLoginWithEmailPasswordParam struct { type AccountLoginWithEmailPasswordParam struct {
@ -62,18 +64,21 @@ type AccountLoginWithEmailPasswordParam struct {
} }
func AccountLoginWithEmailPasswordHandler(ctx *gin.Context) { func AccountLoginWithEmailPasswordHandler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &AccountLoginWithEmailPasswordParam{} param := &AccountLoginWithEmailPasswordParam{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
AccountLoginWithEmailPassword(ctx, param, resp) resp = AccountLoginWithEmailPassword(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }
type AccountLoginWithTelephonePasswordParam struct { type AccountLoginWithTelephonePasswordParam struct {
@ -92,18 +97,21 @@ type AccountLoginWithTelephonePasswordParam struct {
} }
func AccountLoginWithTelephonePasswordHandler(ctx *gin.Context) { func AccountLoginWithTelephonePasswordHandler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &AccountLoginWithTelephonePasswordParam{} param := &AccountLoginWithTelephonePasswordParam{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
AccountLoginWithTelephonePassword(ctx, param, resp) resp = AccountLoginWithTelephonePassword(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }
type AccountRegisterEmailCodeParam struct { type AccountRegisterEmailCodeParam struct {
@ -117,18 +125,21 @@ type AccountRegisterEmailCodeParam struct {
} }
func AccountRegisterEmailCodeHandler(ctx *gin.Context) { func AccountRegisterEmailCodeHandler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &AccountRegisterEmailCodeParam{} param := &AccountRegisterEmailCodeParam{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
AccountRegisterEmailCode(ctx, param, resp) resp = AccountRegisterEmailCode(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }
type AccountRegisterSmsCodeParam struct { type AccountRegisterSmsCodeParam struct {
@ -139,18 +150,21 @@ type AccountRegisterSmsCodeParam struct {
} }
func AccountRegisterSmsCodeHandler(ctx *gin.Context) { func AccountRegisterSmsCodeHandler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &AccountRegisterSmsCodeParam{} param := &AccountRegisterSmsCodeParam{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
AccountRegisterSmsCode(ctx, param, resp) resp = AccountRegisterSmsCode(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }
type BaseGetTokenParam struct { type BaseGetTokenParam struct {
@ -161,18 +175,21 @@ type BaseGetTokenParam struct {
} }
func BaseGetTokenHandler(ctx *gin.Context) { func BaseGetTokenHandler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &BaseGetTokenParam{} param := &BaseGetTokenParam{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
BaseGetToken(ctx, param, resp) resp = BaseGetToken(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }
type MemberAlterPasswordParam struct { type MemberAlterPasswordParam struct {
@ -184,16 +201,19 @@ type MemberAlterPasswordParam struct {
} }
func MemberAlterPasswordHandler(ctx *gin.Context) { func MemberAlterPasswordHandler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &MemberAlterPasswordParam{} param := &MemberAlterPasswordParam{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
MemberAlterPassword(ctx, param, resp) resp = MemberAlterPassword(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }

View File

@ -22,24 +22,21 @@ func TestGenActionsHandlerFunc(t *testing.T) {
createActionRoutesGen() createActionRoutesGen()
} }
func TestCase2(t *testing.T) {
eg := `// device: string;`
re := regexp.MustCompile(` +([a-zA-Z_\-/]+)(\?{0,1}): +(\w+) ?;`)
vs := re.FindAllStringSubmatch(eg, -1)
log.Println(vs)
}
// 生成路由代码 // 生成路由代码
func createActionRoutesGen() { func createActionRoutesGen() {
var err error var err error
af := getActionsInfo() moduleName := GetModuleName(6)
af := getActionsInfo(moduleName)
tpl, err := template.ParseGlob("./*.tpl") tpl, err := template.ParseGlob("./*.tpl")
if err != nil { if err != nil {
panic(err) panic(err)
} }
// genFile(tpl, "gen_action_routes.tpl", "./action_routes_gen.go", af) // genFile(tpl, "gen_action_routes.tpl", "./action_routes_gen.go", af)
genFile(tpl, "types_gen.tpl", "./actions/types_gen.go", af) genFile(tpl, "types_gen.tpl", "./actions/types_gen.go", map[string]any{
"ActionFunctions": af,
"ModuleName": moduleName,
})
} }
func genFile(tpl *template.Template, executeTemplate string, genFilePath string, tplParam any) { func genFile(tpl *template.Template, executeTemplate string, genFilePath string, tplParam any) {
@ -55,7 +52,7 @@ func genFile(tpl *template.Template, executeTemplate string, genFilePath string,
panic(err) panic(err)
} }
log.Println(string(data)) // log.Println(string(data))
f, err := os.OpenFile(genFilePath, os.O_TRUNC|os.O_WRONLY|os.O_CREATE, 0644) f, err := os.OpenFile(genFilePath, os.O_TRUNC|os.O_WRONLY|os.O_CREATE, 0644)
if err != nil { if err != nil {
@ -85,15 +82,14 @@ type paramStruct struct {
ParamFields []paramStructField ParamFields []paramStructField
} }
func getActionsInfo() map[string]*actionsFunc { func getActionsInfo(moduleName string) map[string]*actionsFunc {
regActionRe := regexp.MustCompile(`(?i)action +([^ ]+)`) regActionRe := regexp.MustCompile(`(?i)action +([^ ]+)`)
paramStructRe := regexp.MustCompile(` +([a-zA-Z_\-/]+)(\?{0,1}): +(\w+) ?;`) paramStructRe := regexp.MustCompile(` +([a-zA-Z_\-/]+)(\?{0,1}): +(\w+) ?;`)
moduleName := GetModuleName(6)
dir := "actions" dir := "actions"
actionsMap := make(map[string]*actionsFunc) actionsMap := make(map[string]*actionsFunc)
// actionsMap["ModuleName"] = moduleName
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
if err != nil { if err != nil {
return err return err

View File

@ -9,13 +9,13 @@ import (
var HandlersFuncRoutes map[string]gin.HandlerFunc = make(map[string]gin.HandlerFunc) var HandlersFuncRoutes map[string]gin.HandlerFunc = make(map[string]gin.HandlerFunc)
func init() { func init() {
{{- range .}} {{- range .ActionFunctions}}
// func {{.FuncName}}(ctx *gin.Context, param *{{.ParamStruct.ParamStructName}}, resp *basic.Response) // func {{.FuncName}}(ctx *gin.Context, param *{{.ParamStruct.ParamStructName}}) (resp *basic.Response)
HandlersFuncRoutes["{{.ActionName}}"] = {{.FuncName}}Handler HandlersFuncRoutes["{{.ActionName}}"] = {{.FuncName}}Handler
{{- end}} {{- end}}
} }
{{- range .}} {{- range .ActionFunctions}}
type {{.ParamStruct.ParamStructName}} struct { type {{.ParamStruct.ParamStructName}} struct {
{{- range .ParamStruct.ParamFields}} {{- range .ParamStruct.ParamFields}}
{{.ParamNameCamel}} {{.ParamType}} `json:"{{.ParamName}}" form:"{{.ParamName}}" binding:"{{.ParamBinding}}"` {{.ParamNameCamel}} {{.ParamType}} `json:"{{.ParamName}}" form:"{{.ParamName}}" binding:"{{.ParamBinding}}"`
@ -23,17 +23,20 @@ type {{.ParamStruct.ParamStructName}} struct {
} }
func {{.FuncName}}Handler(ctx *gin.Context) { func {{.FuncName}}Handler(ctx *gin.Context) {
resp := &basic.Response{IsSuccess: true} var resp *basic.Response
defer ctx.JSON(200, resp)
param := &{{.ParamStruct.ParamStructName}}{} param := &{{.ParamStruct.ParamStructName}}{}
err := ctx.ShouldBind(param) err := ctx.ShouldBind(param)
if err != nil { if err != nil {
log.Println(err) log.Println(err)
resp.Error(basic.ErrParamParse) resp = resp.Error(basic.ErrParamParse)
return return
} }
{{.FuncName}}(ctx, param, resp) resp = {{.FuncName}}(ctx, param)
if resp == nil {
resp = resp.Error(basic.ErrRespNotNil)
}
ctx.JSON(200, resp)
} }
{{end}} {{end}}

View File

@ -6,6 +6,8 @@ type ErrorCode struct {
} }
var ( var (
ErrRespNotNil = &ErrorCode{Code: 10000, Message: "resp must not nil"}
ErrEncGcm = &ErrorCode{Code: 10001, Message: "gmc加密错误"} ErrEncGcm = &ErrorCode{Code: 10001, Message: "gmc加密错误"}
ErrParamParse = &ErrorCode{Code: 10100, Message: "参数解析错误"} ErrParamParse = &ErrorCode{Code: 10100, Message: "参数解析错误"}

View File

@ -1,5 +1,49 @@
package basic package basic
import "time"
func IntPtr(src int) *int {
return &src
}
func Int32Ptr(src int32) *int32 {
return &src
}
func Int64Ptr(src int64) *int64 {
return &src
}
func UintPtr(src uint) *uint {
return &src
}
func Uint32Ptr(src uint32) *uint32 {
return &src
}
func Uint64Ptr(src uint64) *uint64 {
return &src
}
//
func Float32Ptr(src float32) *float32 {
return &src
}
func Float64Ptr(src float64) *float64 {
return &src
}
func BytesPtr(src []byte) *[]byte {
return &src
}
func StringPtr(src string) *string { func StringPtr(src string) *string {
return &src return &src
} }
func TimePtr(time time.Time) *time.Time {
return &time
}

View File

@ -1,5 +1,7 @@
package basic package basic
import "github.com/iapologizewhenimwrong/Vestmore_GO/utils/log"
// 全局返回的结构体 // 全局返回的结构体
type Response struct { type Response struct {
Data interface{} `json:"data"` Data interface{} `json:"data"`
@ -8,23 +10,49 @@ type Response struct {
IsSuccess bool `json:"success"` IsSuccess bool `json:"success"`
} }
func (resp *Response) Error(errcode *ErrorCode, Data ...interface{}) { func (resp *Response) Error(errcode *ErrorCode, Data ...interface{}) *Response {
if resp == nil {
resp = &Response{}
}
resp.ErrorCode = errcode.Code resp.ErrorCode = errcode.Code
resp.ErrorText = errcode.Message resp.ErrorText = errcode.Message
resp.IsSuccess = false resp.IsSuccess = false
resp.setData(Data) resp.setData(Data)
log.Error(resp.ErrorText)
return resp
} }
func (resp *Response) ErrorEx(Code int, Message string, Data ...interface{}) { func (resp *Response) ErrorErr(Code int, err error, Data ...interface{}) *Response {
if resp == nil {
resp = &Response{}
}
resp.ErrorCode = Code
resp.ErrorText = err.Error()
resp.IsSuccess = false
resp.setData(Data)
log.Error(resp.ErrorText)
return resp
}
func (resp *Response) ErrorMsg(Code int, Message string, Data ...interface{}) *Response {
if resp == nil {
resp = &Response{}
}
resp.ErrorCode = Code resp.ErrorCode = Code
resp.ErrorText = Message resp.ErrorText = Message
resp.IsSuccess = false resp.IsSuccess = false
resp.setData(Data) resp.setData(Data)
log.Error(resp.ErrorText)
return resp
} }
func (resp *Response) Success(Data ...interface{}) { func (resp *Response) Success(Data ...interface{}) *Response {
if resp == nil {
resp = &Response{}
}
resp.IsSuccess = true resp.IsSuccess = true
resp.setData(Data) resp.setData(Data)
return resp
} }
func (resp *Response) setData(Data []interface{}) { func (resp *Response) setData(Data []interface{}) {