chore: rename Err to Status
This commit is contained in:
parent
ec660e706e
commit
8603315a5d
@ -10,6 +10,7 @@ import (
|
|||||||
func main() {
|
func main() {
|
||||||
a := &cli.App{
|
a := &cli.App{
|
||||||
Name: "OJ",
|
Name: "OJ",
|
||||||
|
Usage: "woj-server",
|
||||||
Compiled: getBuildTime(),
|
Compiled: getBuildTime(),
|
||||||
Version: Version,
|
Version: Version,
|
||||||
EnableBashCompletion: true,
|
EnableBashCompletion: true,
|
||||||
|
@ -37,21 +37,21 @@ func (h *handler) Create(c *gin.Context) {
|
|||||||
Password: req.Password,
|
Password: req.Password,
|
||||||
}
|
}
|
||||||
|
|
||||||
u, err := h.userService.Create(createData)
|
u, status := h.userService.Create(createData)
|
||||||
if err != e.Success {
|
if status != e.Success {
|
||||||
e.Pong(c, err, nil)
|
e.Pong(c, status, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
version, err := h.userService.IncrVersion(u.ID)
|
version, status := h.userService.IncrVersion(u.ID)
|
||||||
if err != e.Success {
|
if status != e.Success {
|
||||||
e.Pong(c, err, nil)
|
e.Pong(c, status, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
claim := &global.Claim{
|
claim := &global.Claim{
|
||||||
UID: u.ID,
|
UID: u.ID,
|
||||||
Version: version,
|
Version: version,
|
||||||
}
|
}
|
||||||
token, err := h.jwtService.SignClaim(claim)
|
token, status := h.jwtService.SignClaim(claim)
|
||||||
e.Pong(c, err, token)
|
e.Pong(c, status, token)
|
||||||
}
|
}
|
||||||
|
@ -34,22 +34,22 @@ func (h *handler) Login(c *gin.Context) {
|
|||||||
UserName: req.Username,
|
UserName: req.Username,
|
||||||
Password: []byte(req.Password),
|
Password: []byte(req.Password),
|
||||||
}
|
}
|
||||||
user, err := h.userService.Login(userData)
|
user, status := h.userService.Login(userData)
|
||||||
if err != e.Success {
|
if status != e.Success {
|
||||||
e.Pong(c, err, nil)
|
e.Pong(c, status, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// sign and return token
|
// sign and return token
|
||||||
version, err := h.userService.IncrVersion(user.ID)
|
version, status := h.userService.IncrVersion(user.ID)
|
||||||
if err != e.Success {
|
if status != e.Success {
|
||||||
e.Pong(c, err, nil)
|
e.Pong(c, status, nil)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
claim := &global.Claim{
|
claim := &global.Claim{
|
||||||
UID: user.ID,
|
UID: user.ID,
|
||||||
Version: version,
|
Version: version,
|
||||||
}
|
}
|
||||||
token, err := h.jwtService.SignClaim(claim)
|
token, status := h.jwtService.SignClaim(claim)
|
||||||
e.Pong(c, err, token)
|
e.Pong(c, status, token)
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,6 @@ func (h *handler) Logout(c *gin.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := h.userService.IncrVersion(claim.(*global.Claim).UID)
|
_, status := h.userService.IncrVersion(claim.(*global.Claim).UID)
|
||||||
e.Pong(c, err, nil)
|
e.Pong(c, status, nil)
|
||||||
}
|
}
|
||||||
|
1
internal/api/user/profile.go
Normal file
1
internal/api/user/profile.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package user
|
@ -1,31 +1,31 @@
|
|||||||
package e
|
package e
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Success Err = 0
|
Success Status = 0
|
||||||
Unknown Err = 1
|
Unknown Status = 1
|
||||||
|
|
||||||
InternalError Err = 100
|
InternalError Status = 100
|
||||||
InvalidParameter Err = 101
|
InvalidParameter Status = 101
|
||||||
NotFound Err = 102
|
NotFound Status = 102
|
||||||
DatabaseError Err = 103
|
DatabaseError Status = 103
|
||||||
|
|
||||||
TokenUnknown Err = 200
|
TokenUnknown Status = 200
|
||||||
TokenEmpty Err = 201
|
TokenEmpty Status = 201
|
||||||
TokenMalformed Err = 202
|
TokenMalformed Status = 202
|
||||||
TokenTimeError Err = 203
|
TokenTimeError Status = 203
|
||||||
TokenInvalid Err = 204
|
TokenInvalid Status = 204
|
||||||
TokenSignError Err = 205
|
TokenSignError Status = 205
|
||||||
TokenRevoked Err = 206
|
TokenRevoked Status = 206
|
||||||
|
|
||||||
UserNotFound Err = 300
|
UserNotFound Status = 300
|
||||||
UserWrongPassword Err = 301
|
UserWrongPassword Status = 301
|
||||||
UserDuplicated Err = 302
|
UserDuplicated Status = 302
|
||||||
UserUnauthenticated Err = 303
|
UserUnauthenticated Status = 303
|
||||||
|
|
||||||
RedisError Err = 400
|
RedisError Status = 400
|
||||||
)
|
)
|
||||||
|
|
||||||
var msgText = map[Err]string{
|
var msgText = map[Status]string{
|
||||||
Success: "Success",
|
Success: "Success",
|
||||||
Unknown: "Unknown error",
|
Unknown: "Unknown error",
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package e
|
package e
|
||||||
|
|
||||||
type Err int
|
type Status int
|
||||||
|
|
||||||
func (code Err) String() string {
|
func (code Status) String() string {
|
||||||
msg, ok := msgText[code]
|
msg, ok := msgText[code]
|
||||||
if ok {
|
if ok {
|
||||||
return msg
|
return msg
|
||||||
|
@ -12,14 +12,14 @@ type Response struct {
|
|||||||
Body interface{} `json:"body"`
|
Body interface{} `json:"body"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func Wrap(err Err, body interface{}) interface{} {
|
func Wrap(status Status, body interface{}) interface{} {
|
||||||
return Response{
|
return Response{
|
||||||
Code: int(err),
|
Code: int(status),
|
||||||
Msg: err.String(),
|
Msg: status.String(),
|
||||||
Body: utils.If(err == Success, body, nil),
|
Body: utils.If(status == Success, body, nil),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Pong(c *gin.Context, err Err, body interface{}) {
|
func Pong(c *gin.Context, status Status, body interface{}) {
|
||||||
c.JSON(http.StatusOK, Wrap(err, body))
|
c.JSON(http.StatusOK, Wrap(status, body))
|
||||||
}
|
}
|
||||||
|
@ -13,8 +13,8 @@ type Claim struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type JwtService interface {
|
type JwtService interface {
|
||||||
ParseToken(tokenText string) (*Claim, e.Err)
|
ParseToken(tokenText string) (*Claim, e.Status)
|
||||||
SignClaim(claim *Claim) (string, e.Err)
|
SignClaim(claim *Claim) (string, e.Status)
|
||||||
Validate(claim *Claim) bool
|
Validate(claim *Claim) bool
|
||||||
|
|
||||||
Handler() gin.HandlerFunc
|
Handler() gin.HandlerFunc
|
||||||
|
@ -13,7 +13,7 @@ func ToString(obj interface{}) string {
|
|||||||
return strconv.FormatBool(t)
|
return strconv.FormatBool(t)
|
||||||
case []byte:
|
case []byte:
|
||||||
return string(t)
|
return string(t)
|
||||||
case e.Err:
|
case e.Status:
|
||||||
return t.String()
|
return t.String()
|
||||||
case error:
|
case error:
|
||||||
return t.Error()
|
return t.Error()
|
||||||
|
@ -30,7 +30,7 @@ func (m *Metrics) Handler() gin.HandlerFunc {
|
|||||||
status := c.Writer.Status()
|
status := c.Writer.Status()
|
||||||
success := !c.IsAborted() && (status == http.StatusOK)
|
success := !c.IsAborted() && (status == http.StatusOK)
|
||||||
errCode, _ := c.Get("err")
|
errCode, _ := c.Get("err")
|
||||||
err, ok := errCode.(e.Err)
|
err, ok := errCode.(e.Status)
|
||||||
if !ok {
|
if !ok {
|
||||||
success = false
|
success = false
|
||||||
err = e.Unknown
|
err = e.Unknown
|
||||||
|
@ -44,7 +44,7 @@ func (m *Metrics) Setup(namespace string, subsystem string) {
|
|||||||
prometheus.MustRegister(m.counter, m.hist)
|
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{
|
m.counter.With(prometheus.Labels{
|
||||||
"method": method,
|
"method": method,
|
||||||
"url": url,
|
"url": url,
|
||||||
|
@ -17,9 +17,9 @@ func (s *service) Handler() gin.HandlerFunc {
|
|||||||
}
|
}
|
||||||
token := tokenHeader[len(tokenPrefix):]
|
token := tokenHeader[len(tokenPrefix):]
|
||||||
|
|
||||||
claim, err := s.ParseToken(token)
|
claim, status := s.ParseToken(token)
|
||||||
if err != e.Success {
|
if status != e.Success {
|
||||||
e.Pong(c, err, nil)
|
e.Pong(c, status, nil)
|
||||||
c.Abort()
|
c.Abort()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *service) ParseToken(tokenText string) (*global.Claim, e.Err) {
|
func (s *service) ParseToken(tokenText string) (*global.Claim, e.Status) {
|
||||||
if tokenText == "" {
|
if tokenText == "" {
|
||||||
return nil, e.TokenEmpty
|
return nil, e.TokenEmpty
|
||||||
}
|
}
|
||||||
@ -48,7 +48,7 @@ func (s *service) ParseToken(tokenText string) (*global.Claim, e.Err) {
|
|||||||
return nil, e.TokenInvalid
|
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()
|
now := time.Now()
|
||||||
|
|
||||||
claim.IssuedAt = jwt.NewNumericDate(now)
|
claim.IssuedAt = jwt.NewNumericDate(now)
|
||||||
|
@ -14,7 +14,7 @@ type CreateData struct {
|
|||||||
Password string
|
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)
|
hashed, err := bcrypt.GenerateFromPassword([]byte(data.Password), bcrypt.DefaultCost)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Debug("bcrypt error", zap.Error(err), zap.String("password", data.Password))
|
s.log.Debug("bcrypt error", zap.Error(err), zap.String("password", data.Password))
|
||||||
|
@ -8,7 +8,7 @@ import (
|
|||||||
"gorm.io/gorm"
|
"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}
|
user := &model.User{UserName: data.UserName}
|
||||||
|
|
||||||
err := s.db.Where(user).First(&user).Error
|
err := s.db.Where(user).First(&user).Error
|
||||||
|
@ -12,9 +12,9 @@ import (
|
|||||||
var _ Service = (*service)(nil)
|
var _ Service = (*service)(nil)
|
||||||
|
|
||||||
type Service interface {
|
type Service interface {
|
||||||
Create(data *CreateData) (*model.User, e.Err)
|
Create(data *CreateData) (*model.User, e.Status)
|
||||||
Login(data *model.User) (*model.User, e.Err)
|
Login(data *model.User) (*model.User, e.Status)
|
||||||
IncrVersion(id uint) (int64, e.Err)
|
IncrVersion(id uint) (int64, e.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
type service struct {
|
type service struct {
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
"go.uber.org/zap"
|
"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()
|
version, err := s.redis.Incr(context.Background(), fmt.Sprintf("Version:%d", id)).Result()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Debug("redis.Incr error", zap.Error(err))
|
s.log.Debug("redis.Incr error", zap.Error(err))
|
||||||
|
Loading…
Reference in New Issue
Block a user