Advertisement
Guest User

Untitled

a guest
Feb 5th, 2015
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Created by keht on 14.02.14.
  3.  */
  4.  
  5. var responder = require('responder');
  6. var User = require('models/user').User;
  7. var UserString = require('models/userString').UserString;
  8. var log = require('logger')(module);
  9. var errCodes = require("helpers/errorCodes");
  10. var security = require('helpers/security');
  11. var revalidator = require('revalidator');
  12.  
  13. var MAX_KEY_LENGHT = 64;
  14. var MAX_VALUE_LENGHT = 8192;
  15.  
  16. // UserString model:
  17. /*
  18.     var userStringSchema = new Schema({
  19.             UID   : { type: String, required: true},       // UserID
  20.             VAL   : { type: String, required: true},       // Value
  21.             K     : { type: String, required: true},       // Key
  22.             V     : { type: Number, required: true}        // Device ID
  23.         },
  24.         { versionKey: false },
  25.         { autoIndex: false}
  26.     );
  27. */
  28. function sendResult(response, params) {
  29.  
  30.     /*  responder.sendResult looks like:
  31.         var sendResult = function(response, message, code) {
  32.             setHeaders(response);
  33.             var out = JSON.stringify({result : {code : code || 0, message : message }});
  34.             response.send(200, out);
  35.         };
  36.     */
  37.     return responder.sendResult(response, params);
  38. }
  39.  
  40. var validationScheme = {
  41.     properties: {
  42.         UserId: {
  43.             type: 'string',
  44.             minLength: 1,
  45.             required: true
  46.         },
  47.         AccessToken: {
  48.             type: 'string',
  49.             minLength: 1,
  50.             required: true
  51.         },
  52.         Key: {
  53.             type: 'string',
  54.             minLength: 1,
  55.             maxLength: MAX_KEY_LENGHT,
  56.             required: true
  57.         },
  58.         Value: {
  59.             type: 'string',
  60.             maxLength: MAX_VALUE_LENGHT,
  61.             required: true
  62.         },
  63.         Version: {
  64.             type: 'integer',
  65.             minimum: 0,
  66.             required: true
  67.         },
  68.         ClientVersion: {
  69.             type: 'integer',
  70.             minimum: 1,
  71.             required: true
  72.         }
  73.     }
  74. };
  75.  
  76. exports.post = function (request, response) {
  77.     var validationResult = revalidator.validate(request.body, validationScheme);
  78.     if (!validationResult.valid) {
  79.         return responder.sendWrongParametersError(response, 20101, validationResult);
  80.     }
  81.  
  82.     var userId = request.body.UserId;
  83.     var accessToken = request.body.AccessToken;
  84.  
  85.     var key = request.body.Key;
  86.     var value = request.body.Value;
  87.     var version = request.body.Version;
  88.  
  89.     if (value.length > MAX_VALUE_LENGHT) {
  90.         return responder.sendError(response, "Can't save string! Value lenght (" + value.length + ") > MAX_VALUE_LENGHT (" + MAX_VALUE_LENGHT + ")", 20103);
  91.     }
  92.     if (key.length > MAX_KEY_LENGHT) {
  93.         return responder.sendError(response, "Can't save string! Key lenght (" + key.length + ") > MAX_KEY_LENGHT (" + MAX_KEY_LENGHT + ")", 20104);
  94.     }
  95.  
  96.     var isTokenOk = security.validateAccessTokenFast(userId, accessToken);
  97.     if (!isTokenOk) {
  98.         return responder.sendGeneralError(response, errCodes.ACCESS_TOKEN_WRONG);
  99.     }
  100.  
  101.     UserString.findOne(
  102.         {
  103.             "UID": userId,
  104.             "K": key
  105.         }, function(error, userString) {
  106.             if (userString) {
  107.                 if (userString["V"] != version) {
  108.                     var params = {
  109.                         "Status" : "ok need merge",
  110.                         "Value" : userString["VAL"],
  111.                         "Key" : key,
  112.                         "Version" : userString["V"]
  113.                     };
  114.                     return sendResult(response, params);
  115.                 } else {
  116.                     userString["VAL"] = value;
  117.                     userString["V"] += 1;
  118.  
  119.                     userString.save(
  120.                         function (error) {
  121.                             if (error) {
  122.                                 return responder.sendError(response, "Save error: " + error, 20102);
  123.                             } else {
  124.                                 var params = {
  125.                                     "Status" : "ok updated",
  126.                                     "Key" : key,
  127.                                     "Version" : userString["V"]
  128.                                 };
  129.                                 return sendResult(response, params);
  130.                             }
  131.                         }
  132.                     );
  133.                 }
  134.             } else {
  135.                 var newUserString = new UserString({
  136.                     "UID": userId,
  137.                     "K": key,
  138.                     "VAL" : value,
  139.                     "V" : 1
  140.                 });
  141.                 newUserString.save(
  142.                     function(error) {
  143.                         if (error) {
  144.                             return responder.sendError(response, "Save error: " + error, 20105);
  145.                         } else {
  146.                             var params = {
  147.                                 "Status" : "ok created",
  148.                                 "Key" : key,
  149.                                 "Version" : 1
  150.                             };
  151.                             return sendResult(response, params);
  152.                         }
  153.                     }
  154.                 );
  155.             }
  156.         }
  157.     );
  158. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement