package user import ( "errors" "git.0x7f.app/WOJ/woj-server/internal/e" "git.0x7f.app/WOJ/woj-server/internal/model" "go.uber.org/zap" "gorm.io/gorm" ) func (s *service) Profile(uid uint) (*model.User, e.Status) { user := new(model.User) err := s.db.Get().First(&user, uid).Error if errors.Is(err, gorm.ErrRecordNotFound) { return nil, e.UserNotFound } if err != nil { s.log.Warn("DatabaseError", zap.Error(err), zap.Any("uid", uid)) return nil, e.DatabaseError } return user, e.Success } func (s *service) ProfileOrCreate(data *CreateData) (*model.User, e.Status) { user := &model.User{ UID: data.UID, NickName: data.NickName, Role: model.RoleGeneral, IsEnabled: true, } // Notice: FirstOrCreate will not update the record if it exists err := s.db.Get().Where(model.User{UID: data.UID}).FirstOrCreate(&user, data).Error if err != nil { s.log.Warn("DatabaseError", zap.Error(err), zap.Any("user", user)) return nil, e.DatabaseError } if user.NickName != data.NickName { err = s.db.Get().Model(&user).Update("nick_name", data.NickName).Error if err != nil { s.log.Warn("DatabaseError", zap.Error(err), zap.Any("user", user)) return nil, e.DatabaseError } } return user, e.Success }