使用 Parse 为电子商务设置推荐系统
Setting up referral system for e-commerce using Parse
我正在尝试为每个在我的 Parse 平台上注册的用户生成一个唯一的代码。将此视为推荐代码。在研究了 Uber、Ola、Flipkart 等应用程序生成的代码后,我决定这样做 -
1)取用户的名字并将其与姓氏的第一个字母连接起来。
2) 然后将其用作基本推荐代码,并附加一个从 000 开始的数字。如果存在这样的代码,则数字会递增。考虑使用 3 位十六进制数以实现灵活性。
3)生成唯一代码后,它会存储在我的解析数据库中。
4) 用户 class 有一列存储其各自的推荐代码,并且还有另一个推荐代码 class 具有作为生成的每个唯一推荐代码的输入。这是我目前正在考虑的结构。
到目前为止我做了什么 -
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 位六位数字,使其唯一并且比已经存在的最后一个(最大)数字多一个。
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!");
}
});
});
好的,我使用的系统如下
- 用户的个人资料被分割成两个词
- 一个'base code'取名字和第二个名字的第一个字母生成
- 具有相同开头的现有代码从查询中计算。该数字递增并附加到 'base code' 并最终存储在解析数据库中
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 --> [varun, agarwal] --> varunaga --> varunaga + 'number'
第一个推荐代码将是 varunaga0,然后是 varunaga1 直到 varunagaf,然后它变成 varunaga10。
我正在尝试为每个在我的 Parse 平台上注册的用户生成一个唯一的代码。将此视为推荐代码。在研究了 Uber、Ola、Flipkart 等应用程序生成的代码后,我决定这样做 -
1)取用户的名字并将其与姓氏的第一个字母连接起来。
2) 然后将其用作基本推荐代码,并附加一个从 000 开始的数字。如果存在这样的代码,则数字会递增。考虑使用 3 位十六进制数以实现灵活性。
3)生成唯一代码后,它会存储在我的解析数据库中。
4) 用户 class 有一列存储其各自的推荐代码,并且还有另一个推荐代码 class 具有作为生成的每个唯一推荐代码的输入。这是我目前正在考虑的结构。
到目前为止我做了什么 -
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 位六位数字,使其唯一并且比已经存在的最后一个(最大)数字多一个。
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!");
}
});
});
好的,我使用的系统如下
- 用户的个人资料被分割成两个词
- 一个'base code'取名字和第二个名字的第一个字母生成
- 具有相同开头的现有代码从查询中计算。该数字递增并附加到 'base code' 并最终存储在解析数据库中
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 --> [varun, agarwal] --> varunaga --> varunaga + 'number'
第一个推荐代码将是 varunaga0,然后是 varunaga1 直到 varunagaf,然后它变成 varunaga10。