使用Parse设置电子商务的推荐系统

时间:2015-09-15 15:54:09

标签: javascript parse-platform cloud-code

我正在尝试为在Parse平台上注册的每个用户生成一个唯一代码。将此视为推荐代码。在研究了Uber,Ola,Flipkart等应用程序生成的代码后,我决定这样做 -

1)获取用户的名字并与其姓氏的第一个字母连接。

2)然后将其用作基本引用代码,附加一个从000开始的数字。如果存在这样的代码,则数字会递增。考虑使用3位十六进制数来实现灵活性。

3)一旦生成了唯一代码,它就会存储在我的解析数据库中。

4)用户类有一个存储其各自引用代码的列,还有另一个引用代码类,它在每个唯一引用代码生成时都有输入。这是我正在考虑的结构。

到目前为止我做了什么 -

Parse.Cloud.define("generateReferralCode", function(request, response){
var objectId=request.params.data;
var query = new Parse.Query(Parse.User);
Parse.Cloud.useMasterKey();
query.equalTo("objectId", objectId);
query.first({
  success: function(user) {
    response.success(" Received user info ");
    var name=user.getUsermame;
    var lowerCaseName= name.toLowerCase();
    var words = lowerCaseName.split(" ");
    var baseCode= words[0] + words[1].charAt(0);           

  },error: function() {
      response.error("Something went horribly wrong!");
    }
});
})

我要做的是添加一个3位数的六进制数字,使其唯一且比最后一个(最大)数字还要多一个。

1 个答案:

答案 0 :(得分:0)

Parse.Cloud.define("generateReferralCode", function(request, response){
var objectId=request.params.data;
var query = new Parse.Query(Parse.User);
Parse.Cloud.useMasterKey();
query.equalTo("objectId", objectId);
query.first({
  success: function(user) {
    var name=user.get("ProfileName");
    var lowerCaseName= name.toLowerCase();
    var words = lowerCaseName.split(" ");
    var baseCode= words[0] + words[1].charAt(0)+ words[1].charAt(1)+ words[1].charAt(2);
   // Can take only words[1].chatAt(0) and ignore the others.
  var referral= Parse.Object.extend("ReferralCode");
   var queryR = new Parse.Query(referral);
   queryR.startsWith("referralCodeColumn", baseCode);
   queryR.find({
  success: function(results) {
    var number= results.length;
    var hexaString = (number).toString(16);
    var referralCode = baseCode+hexaString;
    response.success(referralCode);

  },
  error: function(error) {
    response.error("Error: " + error.code + " " + error.message);
  }});

  },error: function() {
      response.error("Something went horribly wrong!");
    }
});
});

好的,我使用的系统如下

  • 用户的个人资料被分成两个单词
  • A'基本代码'是通过取名字和名字的第一个字母
  • 生成的
  • 从查询中计算具有相同起点的现有代码。该数字递增并附加到基本代码'最后存储在解析数据库中

android端的代码是

            user.signUpInBackground(new SignUpCallback() {
                @Override
                public void done(ParseException e) {
                    if (e == null) {

                        HashMap atMap = new HashMap<>();
                        String objectId = ParseUser.getCurrentUser().getObjectId();
                        atMap.put("data", objectId);
                        ParseCloud.callFunctionInBackground("generateReferralCode", atMap, new FunctionCallback<String>() {
                            @Override
                            public void done(String value, ParseException e) {
                                if (e == null) {
                                    Log.d("Referral code is", value);
                                }
                            }
                        });
                    } else
                        Toast.makeText(RegisterActivity.this, "Error: failed to sign up " + e.getMessage(), Toast.LENGTH_LONG).show();
                }
            });

如果具有相同名称的两个用户一起注册,则他们可能都被赋予相同的推荐代码,这违反了目的。为了解决这个问题,我将使用一个afterSave触发器,我将在稍后阶段加入。因此,为了使这种情况更加不可能,我使用姓氏和姓氏的前3个字母,减少了这个问题发生的可能性,这不是理想的方式!

相同代码 Varun Agarwal - &gt; [varun,agarwal] - &gt; varunaga - &gt; varunaga +&#39;数字&#39;

第一个推荐代码是varunaga0,然后是varunaga1直到varunagaf然后变成varunaga10。