woj-server/internal/service/user/create.go
Paul Pan ec660e706e feat: add logout
Co-authored-by: cxy004 <cxy004@qq.com>
Co-authored-by: wzt <w.zhongtao@qq.com>
2022-09-17 18:10:06 +08:00

40 lines
943 B
Go

package user
import (
"github.com/WHUPRJ/woj-server/internal/e"
"github.com/WHUPRJ/woj-server/internal/repo/model"
"go.uber.org/zap"
"golang.org/x/crypto/bcrypt"
"strings"
)
type CreateData struct {
Username string
Nickname string
Password string
}
func (s *service) Create(data *CreateData) (*model.User, e.Err) {
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 nil, e.InternalError
}
user := &model.User{
UserName: data.Username,
Password: hashed,
NickName: data.Nickname,
IsEnabled: true,
}
if err := s.db.Create(user).Error; err != nil {
if strings.Contains(err.Error(), "duplicate key") {
return nil, e.UserDuplicated
}
s.log.Debug("create user error", zap.Error(err), zap.Any("data", data))
return nil, e.DatabaseError
}
return user, e.Success
}