通用操作属性

This commit is contained in:
筱锋xiao_lfeng 2023-12-25 02:19:00 +08:00
parent 3b770b7ea6
commit d4d4fd3f79
No known key found for this signature in database
GPG Key ID: F693AA12AABBFA87
9 changed files with 216 additions and 39 deletions

View File

@ -16,3 +16,7 @@ type IHelloV1 interface {
type IAuthV1 interface {
AuthRegister(ctx context.Context, req *request.RegisterReq) (res *request.RegisterRes, err error)
}
type ITokenV1 interface {
TokenCreate(ctx context.Context, req *request.TokenCreateReq) (res *request.TokenCreateRes, err error)
}

2
go.mod
View File

@ -11,6 +11,8 @@ require (
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.6.1 // indirect
github.com/gorilla/websocket v1.5.1 // indirect
github.com/grokify/html-strip-tags-go v0.1.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect

4
go.sum
View File

@ -20,6 +20,10 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.6.1 h1:5VW1vlaFNSHHhMliRkGTcDshMeA52Il8T+gffJJaVMc=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.6.1/go.mod h1:jxCa1WV/W+q0F4ILebakUsqRrl7iL3qvP+Uci0eXAew=
github.com/gogf/gf/v2 v2.6.1 h1:n/cfXM506WjhPa6Z1CEDuHNM1XZ7C8JzSDPn2AfuxgQ=
github.com/gogf/gf/v2 v2.6.1/go.mod h1:x2XONYcI4hRQ/4gMNbWHmZrNzSEIg20s2NULbzom5k0=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=

View File

@ -1,39 +0,0 @@
package middleware
import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/text/gregex"
"strconv"
"time"
)
// TimestampMiddleware
//
// 全局中间件
// 检查时间戳误差是否在
func TimestampMiddleware(r *ghttp.Request) {
// 检查时间戳误差是否在
timestamp, err := strconv.ParseInt(r.GetHeader("timestamp"), 10, 64)
if gregex.IsMatch(`^[0-9]{13,14}$`, []byte(strconv.FormatInt(timestamp, 10))) {
if timestamp+int64(2000) > time.Now().UnixMilli() && timestamp-int64(2000) < time.Now().UnixMilli() {
r.Middleware.Next()
} else {
if err != nil {
r.Response.WriteJson(g.Map{
"code": 40011,
"message": "时间戳过期",
"data": nil,
})
}
}
} else {
if err != nil {
r.Response.WriteJson(g.Map{
"code": 40010,
"message": "时间戳格式错误",
"data": nil,
})
}
}
}

View File

@ -0,0 +1,96 @@
package middleware
import (
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/text/gregex"
"net/http"
"strconv"
"time"
)
// DefaultHandlerResponse is the default implementation of HandlerResponse.
type DefaultHandlerResponse struct {
Code int `json:"code" dc:"Error code"`
Message string `json:"message" dc:"Error message"`
Data interface{} `json:"data" dc:"Result data for certain request according API definition"`
}
// TimestampMiddleware
//
// 全局中间件
// 检查时间戳误差是否在
func TimestampMiddleware(r *ghttp.Request) {
// 检查时间戳误差是否在
timestamp, err := strconv.ParseInt(r.GetHeader("timestamp"), 10, 64)
if gregex.IsMatch(`^[0-9]{13,14}$`, []byte(strconv.FormatInt(timestamp, 10))) {
if timestamp+int64(2000) > time.Now().UnixMilli() && timestamp-int64(2000) < time.Now().UnixMilli() {
r.Middleware.Next()
} else {
if err != nil {
r.Response.WriteJson(g.Map{
"code": 40011,
"message": "时间戳过期",
"data": nil,
})
}
}
} else {
if err != nil {
r.Response.WriteJson(g.Map{
"code": 40010,
"message": "时间戳格式错误",
"data": nil,
})
}
}
}
func JsonResponseMiddleware(r *ghttp.Request) {
r.Middleware.Next()
// There's custom buffer content, it then exits current handler.
if r.Response.BufferLength() > 0 {
return
}
var (
msg = r.GetRequest("message").String()
err = r.GetError()
res = r.GetHandlerResponse()
code int
)
if err != nil {
if r.GetRequest("code") == nil {
code = 500
}
msg = err.Error()
} else {
if r.Response.Status > 0 && r.Response.Status != 200 {
msg = http.StatusText(r.Response.Status)
switch r.Response.Status {
case http.StatusNotFound:
code = 404
case http.StatusForbidden:
code = 403
default:
code = r.GetRequest("code").Int()
}
// 处理错误
err = gerror.New(r.GetRequest("message").String())
r.SetError(err)
} else {
code = 200
if msg == "" {
msg = "success"
}
}
}
r.Response.WriteJson(DefaultHandlerResponse{
Code: code,
Message: msg,
Data: res,
})
}

View File

@ -2,6 +2,7 @@ package main
import (
_ "PersonalMain/internal/packed"
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
"github.com/gogf/gf/v2/os/gctx"

View File

@ -0,0 +1,29 @@
package ErrorCode
type ErrorCode struct {
output string
code int
message string
}
type Errors interface {
Output() string
Code() int
Message() string
}
var (
NoneDataResult = ErrorCode{output: "success", code: 200, message: "success"}
)
func (e ErrorCode) Output() string {
return e.output
}
func (e ErrorCode) Code() int {
return e.code
}
func (e ErrorCode) Message() string {
return e.message
}

View File

@ -0,0 +1,30 @@
package Processing
import (
"math/rand"
"strconv"
"time"
)
// CreateToken
//
// 生成 token
func CreateToken() string {
token := strconv.FormatInt(time.Now().UnixMilli(), 10)
if len(token) <= 13 {
token = "0" + token
}
token += "-"
for i := 0; i < 20; i++ {
if rand.Intn(2) == 0 {
token += strconv.Itoa(rand.Intn(10))
} else {
token += string(byte(rand.Intn(26) + 97))
}
}
token += "-"
for i := 0; i < 14; i++ {
token += strconv.Itoa(rand.Intn(10))
}
return token
}

50
utility/ResultUtil.go Normal file
View File

@ -0,0 +1,50 @@
package utility
import (
"PersonalMain/utility/ErrorCode"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
type DataResult struct{}
// Success
//
// 内容输出(包含 data
func Success(req *ghttp.Request, message string, data interface{}) {
req.Response.WriteJson(g.Map{
"output": "Success",
"code": 200,
"message": message,
"data": data,
})
}
// SuccessNoData
//
// 内容输出(不含 data
func SuccessNoData(req *ghttp.Request, message string) {
req.Response.WriteJson(g.Map{
"output": "Success",
"code": 200,
"message": message,
})
}
func Error(req *ghttp.Request, errorCode ErrorCode.ErrorCode, data interface{}) {
req.Response.WriteJson(g.Map{
"output": errorCode.Output(),
"code": errorCode.Code(),
"message": errorCode.Message(),
"data": data,
})
}
func ErrorDefault(req *ghttp.Request, output string, code int, message string, data interface{}) {
req.Response.WriteJson(g.Map{
"output": output,
"code": code,
"message": message,
"data": data,
})
}