Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Created by keht on 14.02.14.
- */
- var responder = require('responder');
- var User = require('models/user').User;
- var UserString = require('models/userString').UserString;
- var log = require('logger')(module);
- var errCodes = require("helpers/errorCodes");
- var security = require('helpers/security');
- var revalidator = require('revalidator');
- var MAX_KEY_LENGHT = 64;
- var MAX_VALUE_LENGHT = 8192;
- // UserString model:
- /*
- var userStringSchema = new Schema({
- UID : { type: String, required: true}, // UserID
- VAL : { type: String, required: true}, // Value
- K : { type: String, required: true}, // Key
- V : { type: Number, required: true} // Device ID
- },
- { versionKey: false },
- { autoIndex: false}
- );
- */
- function sendResult(response, params) {
- /* responder.sendResult looks like:
- var sendResult = function(response, message, code) {
- setHeaders(response);
- var out = JSON.stringify({result : {code : code || 0, message : message }});
- response.send(200, out);
- };
- */
- return responder.sendResult(response, params);
- }
- var validationScheme = {
- properties: {
- UserId: {
- type: 'string',
- minLength: 1,
- required: true
- },
- AccessToken: {
- type: 'string',
- minLength: 1,
- required: true
- },
- Key: {
- type: 'string',
- minLength: 1,
- maxLength: MAX_KEY_LENGHT,
- required: true
- },
- Value: {
- type: 'string',
- maxLength: MAX_VALUE_LENGHT,
- required: true
- },
- Version: {
- type: 'integer',
- minimum: 0,
- required: true
- },
- ClientVersion: {
- type: 'integer',
- minimum: 1,
- required: true
- }
- }
- };
- exports.post = function (request, response) {
- var validationResult = revalidator.validate(request.body, validationScheme);
- if (!validationResult.valid) {
- return responder.sendWrongParametersError(response, 20101, validationResult);
- }
- var userId = request.body.UserId;
- var accessToken = request.body.AccessToken;
- var key = request.body.Key;
- var value = request.body.Value;
- var version = request.body.Version;
- if (value.length > MAX_VALUE_LENGHT) {
- return responder.sendError(response, "Can't save string! Value lenght (" + value.length + ") > MAX_VALUE_LENGHT (" + MAX_VALUE_LENGHT + ")", 20103);
- }
- if (key.length > MAX_KEY_LENGHT) {
- return responder.sendError(response, "Can't save string! Key lenght (" + key.length + ") > MAX_KEY_LENGHT (" + MAX_KEY_LENGHT + ")", 20104);
- }
- var isTokenOk = security.validateAccessTokenFast(userId, accessToken);
- if (!isTokenOk) {
- return responder.sendGeneralError(response, errCodes.ACCESS_TOKEN_WRONG);
- }
- UserString.findOne(
- {
- "UID": userId,
- "K": key
- }, function(error, userString) {
- if (userString) {
- if (userString["V"] != version) {
- var params = {
- "Status" : "ok need merge",
- "Value" : userString["VAL"],
- "Key" : key,
- "Version" : userString["V"]
- };
- return sendResult(response, params);
- } else {
- userString["VAL"] = value;
- userString["V"] += 1;
- userString.save(
- function (error) {
- if (error) {
- return responder.sendError(response, "Save error: " + error, 20102);
- } else {
- var params = {
- "Status" : "ok updated",
- "Key" : key,
- "Version" : userString["V"]
- };
- return sendResult(response, params);
- }
- }
- );
- }
- } else {
- var newUserString = new UserString({
- "UID": userId,
- "K": key,
- "VAL" : value,
- "V" : 1
- });
- newUserString.save(
- function(error) {
- if (error) {
- return responder.sendError(response, "Save error: " + error, 20105);
- } else {
- var params = {
- "Status" : "ok created",
- "Key" : key,
- "Version" : 1
- };
- return sendResult(response, params);
- }
- }
- );
- }
- }
- );
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement