diff --git a/Makefile b/Makefile index a139c2e..2e82bd5 100644 --- a/Makefile +++ b/Makefile @@ -7,8 +7,9 @@ LDFLAGS += -X main.Version=$(shell cat VERSION)+$(shell git rev-parse HEAD) LDFLAGS += -s -w GOBUILD := $(GO) build -o $(PROJECT) -ldflags '$(LDFLAGS)' ./cmd/app +GOBIN := $(shell go env GOPATH)/bin -.PHONY: all build clean run dep swagger +.PHONY: all build clean run dep swagger fmt default: all @@ -28,4 +29,7 @@ dep: swagger: go install github.com/swaggo/swag/cmd/swag@latest - swag init -g internal/router/api.go -o internal/router/docs + $(GOBIN)/swag init -g internal/router/api.go -o internal/router/docs + +fmt: + go fmt ./... diff --git a/internal/api/debug/random.go b/internal/api/debug/random.go index 96dd6a5..25b839f 100644 --- a/internal/api/debug/random.go +++ b/internal/api/debug/random.go @@ -7,7 +7,7 @@ import ( "go.uber.org/zap" ) -// randomString godoc +// randomString // @Summary random string // @Description generate random string with length = 32 // @Tags debug diff --git a/internal/api/user/create.go b/internal/api/user/create.go index 72406a8..7be87a3 100644 --- a/internal/api/user/create.go +++ b/internal/api/user/create.go @@ -4,8 +4,6 @@ import ( "github.com/WHUPRJ/woj-server/internal/e" "github.com/WHUPRJ/woj-server/internal/service/user" "github.com/gin-gonic/gin" - "go.uber.org/zap" - "golang.org/x/crypto/bcrypt" ) type createRequest struct { @@ -14,7 +12,7 @@ type createRequest struct { Password string `form:"password" binding:"required"` } -// Create godoc +// Create // @Summary create a new user // @Description create a new user // @Accept application/x-www-form-urlencoded @@ -32,18 +30,12 @@ func (h *handler) Create(c *gin.Context) { return } - hashed, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost) - if err != nil { - h.log.Debug("bcrypt error", zap.Error(err), zap.String("password", req.Password)) - e.Pong(c, e.InternalError, err.Error()) - return + createData := &user.CreateData{ + Username: req.Username, + Nickname: req.Nickname, + Password: req.Password, } - createData := new(user.CreateData) - createData.Nickname = req.Nickname - createData.Username = req.Username - createData.Password = hashed - id, err := h.service.Create(createData) if err != nil { e.Pong(c, e.DatabaseError, err.Error()) diff --git a/internal/e/code.go b/internal/e/code.go index 66bd331..55d37ba 100644 --- a/internal/e/code.go +++ b/internal/e/code.go @@ -1,8 +1,8 @@ package e const ( - Fallback Err = 0 - Success Err = 1 + Success Err = 0 + Unknown Err = 1 InternalError Err = 100 InvalidParameter Err = 101 NotFound Err = 102 @@ -11,6 +11,7 @@ const ( var msgText = map[Err]string{ Success: "Success", + Unknown: "Unknown error", InternalError: "Internal Error", InvalidParameter: "Invalid Parameter", NotFound: "Not Found", diff --git a/internal/pkg/metrics/middleware.go b/internal/pkg/metrics/middleware.go index 32cc4d0..255f17b 100644 --- a/internal/pkg/metrics/middleware.go +++ b/internal/pkg/metrics/middleware.go @@ -33,7 +33,7 @@ func (m *Metrics) Handler() gin.HandlerFunc { err, ok := errCode.(e.Err) if !ok { success = false - err = e.Fallback + err = e.Unknown } m.Record(method, url, success, status, err, elapsed) diff --git a/internal/repo/postgresql/User.go b/internal/repo/model/User.go similarity index 94% rename from internal/repo/postgresql/User.go rename to internal/repo/model/User.go index f919b90..07cc4f0 100644 --- a/internal/repo/postgresql/User.go +++ b/internal/repo/model/User.go @@ -1,4 +1,4 @@ -package postgresql +package model import ( "gorm.io/gorm" diff --git a/internal/repo/postgresql/postgresql.go b/internal/repo/postgresql/postgresql.go index c5f4066..311e971 100644 --- a/internal/repo/postgresql/postgresql.go +++ b/internal/repo/postgresql/postgresql.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "github.com/WHUPRJ/woj-server/internal/global" + "github.com/WHUPRJ/woj-server/internal/repo/model" "go.uber.org/zap" "gorm.io/driver/postgres" "gorm.io/gorm" @@ -80,9 +81,10 @@ func (r *PgRepo) Setup(g *global.Global) { func (r *PgRepo) migrateDatabase() { r.log.Info("Auto Migrating database...") - _ = r.db.AutoMigrate(&User{}) + _ = r.db.AutoMigrate(&model.User{}) } +// checkAlive deprecated func (r *PgRepo) checkAlive(retry int) (*sql.DB, error) { if retry <= 0 { return nil, errors.New("all retries are used up. failed to connect to database") diff --git a/internal/service/user/create.go b/internal/service/user/create.go index dd51e1e..5fac43a 100644 --- a/internal/service/user/create.go +++ b/internal/service/user/create.go @@ -1,28 +1,35 @@ package user import ( - "github.com/WHUPRJ/woj-server/internal/repo/postgresql" + "github.com/WHUPRJ/woj-server/internal/repo/model" "github.com/pkg/errors" "go.uber.org/zap" + "golang.org/x/crypto/bcrypt" ) type CreateData struct { Username string Nickname string - Password []byte + Password string } func (s *service) Create(data *CreateData) (id uint, err error) { - model := &postgresql.User{ + 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)) + return 0, errors.Wrap(err, "bcrypt error") + } + + user := &model.User{ UserName: data.Username, - Password: data.Password, + Password: hashed, NickName: data.Nickname, IsEnabled: true, } - if err = s.db.Get().Create(model).Error; err != nil { + if err := s.db.Get().Create(user).Error; err != nil { s.log.Debug("create user error", zap.Error(err), zap.Any("data", data)) return 0, errors.Wrap(err, "create error") } - return model.ID, nil + return user.ID, nil }