chore: rename Err to Status

This commit is contained in:
Paul Pan 2022-09-20 14:15:21 +08:00
parent ec660e706e
commit 8603315a5d
18 changed files with 63 additions and 61 deletions

View File

@ -10,6 +10,7 @@ import (
func main() {
a := &cli.App{
Name: "OJ",
Usage: "woj-server",
Compiled: getBuildTime(),
Version: Version,
EnableBashCompletion: true,

View File

@ -37,21 +37,21 @@ func (h *handler) Create(c *gin.Context) {
Password: req.Password,
}
u, err := h.userService.Create(createData)
if err != e.Success {
e.Pong(c, err, nil)
u, status := h.userService.Create(createData)
if status != e.Success {
e.Pong(c, status, nil)
return
}
version, err := h.userService.IncrVersion(u.ID)
if err != e.Success {
e.Pong(c, err, nil)
version, status := h.userService.IncrVersion(u.ID)
if status != e.Success {
e.Pong(c, status, nil)
return
}
claim := &global.Claim{
UID: u.ID,
Version: version,
}
token, err := h.jwtService.SignClaim(claim)
e.Pong(c, err, token)
token, status := h.jwtService.SignClaim(claim)
e.Pong(c, status, token)
}

View File

@ -34,22 +34,22 @@ func (h *handler) Login(c *gin.Context) {
UserName: req.Username,
Password: []byte(req.Password),
}
user, err := h.userService.Login(userData)
if err != e.Success {
e.Pong(c, err, nil)
user, status := h.userService.Login(userData)
if status != e.Success {
e.Pong(c, status, nil)
return
}
// sign and return token
version, err := h.userService.IncrVersion(user.ID)
if err != e.Success {
e.Pong(c, err, nil)
version, status := h.userService.IncrVersion(user.ID)
if status != e.Success {
e.Pong(c, status, nil)
return
}
claim := &global.Claim{
UID: user.ID,
Version: version,
}
token, err := h.jwtService.SignClaim(claim)
e.Pong(c, err, token)
token, status := h.jwtService.SignClaim(claim)
e.Pong(c, status, token)
}

View File

@ -21,6 +21,6 @@ func (h *handler) Logout(c *gin.Context) {
return
}
_, err := h.userService.IncrVersion(claim.(*global.Claim).UID)
e.Pong(c, err, nil)
_, status := h.userService.IncrVersion(claim.(*global.Claim).UID)
e.Pong(c, status, nil)
}

View File

@ -0,0 +1 @@
package user

View File

@ -1,31 +1,31 @@
package e
const (
Success Err = 0
Unknown Err = 1
Success Status = 0
Unknown Status = 1
InternalError Err = 100
InvalidParameter Err = 101
NotFound Err = 102
DatabaseError Err = 103
InternalError Status = 100
InvalidParameter Status = 101
NotFound Status = 102
DatabaseError Status = 103
TokenUnknown Err = 200
TokenEmpty Err = 201
TokenMalformed Err = 202
TokenTimeError Err = 203
TokenInvalid Err = 204
TokenSignError Err = 205
TokenRevoked Err = 206
TokenUnknown Status = 200
TokenEmpty Status = 201
TokenMalformed Status = 202
TokenTimeError Status = 203
TokenInvalid Status = 204
TokenSignError Status = 205
TokenRevoked Status = 206
UserNotFound Err = 300
UserWrongPassword Err = 301
UserDuplicated Err = 302
UserUnauthenticated Err = 303
UserNotFound Status = 300
UserWrongPassword Status = 301
UserDuplicated Status = 302
UserUnauthenticated Status = 303
RedisError Err = 400
RedisError Status = 400
)
var msgText = map[Err]string{
var msgText = map[Status]string{
Success: "Success",
Unknown: "Unknown error",

View File

@ -1,8 +1,8 @@
package e
type Err int
type Status int
func (code Err) String() string {
func (code Status) String() string {
msg, ok := msgText[code]
if ok {
return msg

View File

@ -12,14 +12,14 @@ type Response struct {
Body interface{} `json:"body"`
}
func Wrap(err Err, body interface{}) interface{} {
func Wrap(status Status, body interface{}) interface{} {
return Response{
Code: int(err),
Msg: err.String(),
Body: utils.If(err == Success, body, nil),
Code: int(status),
Msg: status.String(),
Body: utils.If(status == Success, body, nil),
}
}
func Pong(c *gin.Context, err Err, body interface{}) {
c.JSON(http.StatusOK, Wrap(err, body))
func Pong(c *gin.Context, status Status, body interface{}) {
c.JSON(http.StatusOK, Wrap(status, body))
}

View File

@ -13,8 +13,8 @@ type Claim struct {
}
type JwtService interface {
ParseToken(tokenText string) (*Claim, e.Err)
SignClaim(claim *Claim) (string, e.Err)
ParseToken(tokenText string) (*Claim, e.Status)
SignClaim(claim *Claim) (string, e.Status)
Validate(claim *Claim) bool
Handler() gin.HandlerFunc

View File

@ -13,7 +13,7 @@ func ToString(obj interface{}) string {
return strconv.FormatBool(t)
case []byte:
return string(t)
case e.Err:
case e.Status:
return t.String()
case error:
return t.Error()

View File

@ -30,7 +30,7 @@ func (m *Metrics) Handler() gin.HandlerFunc {
status := c.Writer.Status()
success := !c.IsAborted() && (status == http.StatusOK)
errCode, _ := c.Get("err")
err, ok := errCode.(e.Err)
err, ok := errCode.(e.Status)
if !ok {
success = false
err = e.Unknown

View File

@ -44,7 +44,7 @@ func (m *Metrics) Setup(namespace string, subsystem string) {
prometheus.MustRegister(m.counter, m.hist)
}
func (m *Metrics) Record(method, url string, success bool, httpCode int, errCode e.Err, elapsed float64) {
func (m *Metrics) Record(method, url string, success bool, httpCode int, errCode e.Status, elapsed float64) {
m.counter.With(prometheus.Labels{
"method": method,
"url": url,

View File

@ -17,9 +17,9 @@ func (s *service) Handler() gin.HandlerFunc {
}
token := tokenHeader[len(tokenPrefix):]
claim, err := s.ParseToken(token)
if err != e.Success {
e.Pong(c, err, nil)
claim, status := s.ParseToken(token)
if status != e.Success {
e.Pong(c, status, nil)
c.Abort()
return
}

View File

@ -11,7 +11,7 @@ import (
"time"
)
func (s *service) ParseToken(tokenText string) (*global.Claim, e.Err) {
func (s *service) ParseToken(tokenText string) (*global.Claim, e.Status) {
if tokenText == "" {
return nil, e.TokenEmpty
}
@ -48,7 +48,7 @@ func (s *service) ParseToken(tokenText string) (*global.Claim, e.Err) {
return nil, e.TokenInvalid
}
func (s *service) SignClaim(claim *global.Claim) (string, e.Err) {
func (s *service) SignClaim(claim *global.Claim) (string, e.Status) {
now := time.Now()
claim.IssuedAt = jwt.NewNumericDate(now)

View File

@ -14,7 +14,7 @@ type CreateData struct {
Password string
}
func (s *service) Create(data *CreateData) (*model.User, e.Err) {
func (s *service) Create(data *CreateData) (*model.User, e.Status) {
hashed, err := bcrypt.GenerateFromPassword([]byte(data.Password), bcrypt.DefaultCost)
if err != nil {
s.log.Debug("bcrypt error", zap.Error(err), zap.String("password", data.Password))

View File

@ -8,7 +8,7 @@ import (
"gorm.io/gorm"
)
func (s *service) Login(data *model.User) (*model.User, e.Err) {
func (s *service) Login(data *model.User) (*model.User, e.Status) {
user := &model.User{UserName: data.UserName}
err := s.db.Where(user).First(&user).Error

View File

@ -12,9 +12,9 @@ import (
var _ Service = (*service)(nil)
type Service interface {
Create(data *CreateData) (*model.User, e.Err)
Login(data *model.User) (*model.User, e.Err)
IncrVersion(id uint) (int64, e.Err)
Create(data *CreateData) (*model.User, e.Status)
Login(data *model.User) (*model.User, e.Status)
IncrVersion(id uint) (int64, e.Status)
}
type service struct {

View File

@ -7,7 +7,7 @@ import (
"go.uber.org/zap"
)
func (s *service) IncrVersion(id uint) (int64, e.Err) {
func (s *service) IncrVersion(id uint) (int64, e.Status) {
version, err := s.redis.Incr(context.Background(), fmt.Sprintf("Version:%d", id)).Result()
if err != nil {
s.log.Debug("redis.Incr error", zap.Error(err))