diff --git a/internal/api/oauth/callback.go b/internal/api/oauth/callback.go index 4a9db74..d9e2513 100644 --- a/internal/api/oauth/callback.go +++ b/internal/api/oauth/callback.go @@ -68,7 +68,6 @@ func (h *handler) CallbackHandler() gin.HandlerFunc { // Extract custom claims // TODO: extract role from claims - // TODO: currently username = email, add Email in User model var claims struct { Email string `json:"email"` EmailVerified bool `json:"email_verified"` @@ -85,7 +84,7 @@ func (h *handler) CallbackHandler() gin.HandlerFunc { } // Check user existence - u, status := h.user.ProfileOrCreate(&user.CreateData{UserName: claims.Email, NickName: claims.Nickname}) + u, status := h.user.ProfileOrCreate(&user.CreateData{Email: claims.Email, NickName: claims.Nickname}) if status != e.Success { e.Pong[any](c, status, nil) return diff --git a/internal/api/user/create.go b/internal/api/user/create.go index 1d1843a..d915463 100644 --- a/internal/api/user/create.go +++ b/internal/api/user/create.go @@ -8,7 +8,7 @@ import ( ) type createRequest struct { - UserName string `form:"username" json:"username" binding:"required"` + Email string `form:"email" json:"email" binding:"required"` NickName string `form:"nickname" json:"nickname" binding:"required"` Password string `form:"password" json:"password" binding:"required"` } @@ -19,7 +19,7 @@ type createRequest struct { // @Tags user // @Accept application/x-www-form-urlencoded // @Produce json -// @Param username formData string true "username" +// @Param email formData string true "email" // @Param nickname formData string true "nickname" // @Param password formData string true "password" // @Response 200 {object} e.Response[string] "jwt token" @@ -33,7 +33,7 @@ func (h *handler) Create(c *gin.Context) { // create user createData := &user.CreateData{ - UserName: req.UserName, + Email: req.Email, NickName: req.NickName, Password: req.Password, } diff --git a/internal/api/user/login.go b/internal/api/user/login.go index e9b515e..2fa8276 100644 --- a/internal/api/user/login.go +++ b/internal/api/user/login.go @@ -8,7 +8,7 @@ import ( ) type loginRequest struct { - UserName string `form:"username" json:"username" binding:"required"` + Email string `form:"email" json:"email" binding:"required"` Password string `form:"password" json:"password" binding:"required"` } @@ -23,7 +23,7 @@ type LoginResponse struct { // @Tags user // @Accept application/x-www-form-urlencoded // @Produce json -// @Param username formData string true "username" +// @Param email formData string true "email" // @Param password formData string true "password" // @Response 200 {object} e.Response[LoginResponse] "jwt token and user's nickname" // @Router /v1/user/login [post] @@ -36,7 +36,7 @@ func (h *handler) Login(c *gin.Context) { // check password loginData := &user.LoginData{ - UserName: req.UserName, + Email: req.Email, Password: req.Password, } u, status := h.userService.Login(loginData) diff --git a/internal/model/User.go b/internal/model/User.go index 532d149..eebefd8 100644 --- a/internal/model/User.go +++ b/internal/model/User.go @@ -6,8 +6,8 @@ import ( type User struct { gorm.Model `json:"meta"` - UserName string `json:"user_name" gorm:"not null;uniqueIndex"` - NickName string `json:"nick_name" gorm:"not null"` + Email string `json:"email" gorm:"not null;uniqueIndex"` + NickName string `json:"nick_name" gorm:"not null;uniqueIndex"` Role Role `json:"role" gorm:"not null"` Password []byte `json:"-"` IsEnabled bool `json:"is_enabled" gorm:"not null;index"` diff --git a/internal/service/user/create.go b/internal/service/user/create.go index c537fb2..a847bca 100644 --- a/internal/service/user/create.go +++ b/internal/service/user/create.go @@ -9,7 +9,7 @@ import ( ) type CreateData struct { - UserName string + Email string NickName string Password string } @@ -22,7 +22,7 @@ func (s *service) Create(data *CreateData) (*model.User, e.Status) { } user := &model.User{ - UserName: data.UserName, + Email: data.Email, NickName: data.NickName, Password: hashed, Role: model.RoleGeneral, diff --git a/internal/service/user/login.go b/internal/service/user/login.go index 7f99841..24ec8aa 100644 --- a/internal/service/user/login.go +++ b/internal/service/user/login.go @@ -10,12 +10,12 @@ import ( ) type LoginData struct { - UserName string + Email string Password string } func (s *service) Login(data *LoginData) (*model.User, e.Status) { - user := &model.User{UserName: data.UserName} + user := &model.User{Email: data.Email} err := s.db.Get().Where(user).First(&user).Error if errors.Is(err, gorm.ErrRecordNotFound) { diff --git a/internal/service/user/profile.go b/internal/service/user/profile.go index 4c84e64..1ea5154 100644 --- a/internal/service/user/profile.go +++ b/internal/service/user/profile.go @@ -25,7 +25,7 @@ func (s *service) Profile(uid uint) (*model.User, e.Status) { func (s *service) ProfileOrCreate(data *CreateData) (*model.User, e.Status) { user := &model.User{ - UserName: data.UserName, + Email: data.Email, NickName: data.NickName, Role: model.RoleGeneral, IsEnabled: true, @@ -33,7 +33,7 @@ func (s *service) ProfileOrCreate(data *CreateData) (*model.User, e.Status) { // Notice: FirstOrCreate will not update the record if it exists, and also we should not update the record // Notice: OAuth2 created user will not have password - err := s.db.Get().Where(model.User{UserName: data.UserName}).FirstOrCreate(&user, data).Error + err := s.db.Get().Where(model.User{Email: data.Email}).FirstOrCreate(&user, data).Error if err != nil { s.log.Warn("DatabaseError", zap.Error(err), zap.Any("user", user)) return nil, e.DatabaseError