1
0
mirror of https://github.com/moparisthebest/mail synced 2024-11-12 04:05:13 -05:00
mail/src/js/dao/invitation-dao.js

109 lines
3.5 KiB
JavaScript
Raw Normal View History

define(function() {
'use strict';
2013-11-20 06:17:21 -05:00
/**
* The InvitationDAO is a high level Data Access Object that access the invitation service REST endpoint.
* @param {Object} restDao The REST Data Access Object abstraction
*/
var InvitationDAO = function(restDao) {
this._restDao = restDao;
};
2013-11-20 06:17:21 -05:00
//
// Constants
//
InvitationDAO.INVITE_MISSING = 1;
InvitationDAO.INVITE_PENDING = 2;
InvitationDAO.INVITE_SUCCESS = 4;
//
// API
//
/**
* Notes an invite for the recipient by the sender in the invitation web service
* @param {String} options.recipient User ID of the recipient
* @param {String} options.sender User ID of the sender
2013-11-20 06:17:21 -05:00
* @param {Function} callback(error, status) Returns information if the invitation worked (INVITE_SUCCESS), if an invitation is already pendin (INVITE_PENDING), or information if an error occurred.
*/
InvitationDAO.prototype.invite = function(options, callback) {
if (typeof options !== 'object' || typeof options.recipient !== 'string' || typeof options.recipient !== 'string') {
callback({
errMsg: 'erroneous usage of api: incorrect parameters!'
});
return;
}
this._restDao.put({}, uri(options.recipient, options.sender), completed);
2013-11-20 06:17:21 -05:00
function completed(error, res, status) {
if (error) {
callback(error);
return;
}
if (status === 201) {
callback(null, InvitationDAO.INVITE_SUCCESS);
return;
} else if (status === 304) {
callback(null, InvitationDAO.INVITE_PENDING);
return;
}
callback({
errMsg: 'unexpected invitation state'
});
}
};
/**
* Checks if an invitation for the recipient by the sender is present in the invitation web service
* @param {String} options.recipient User ID of the recipient
* @param {String} options.sender User ID of the sender
2013-11-20 06:17:21 -05:00
* @param {Function} callback(error, status) Returns information about the invitation status, either an invitation is already on place (INVITE_PENDING), or not (INVITE_MISSING), or information if an error occurred.
*/
InvitationDAO.prototype.check = function(options, callback) {
if (typeof options !== 'object' || typeof options.recipient !== 'string' || typeof options.recipient !== 'string') {
callback({
errMsg: 'erroneous usage of api: incorrect parameters!'
});
return;
}
this._restDao.get({
uri: uri(options.recipient, options.sender),
type: 'text'
}, completed);
2013-11-20 06:17:21 -05:00
function completed(error, res, status) {
// 404 is a meaningful return value from the web service
if (error && error.code !== 404) {
callback(error);
return;
}
if (error && error.code === 404) {
callback(null, InvitationDAO.INVITE_MISSING);
return;
} else if (status === 200) {
callback(null, InvitationDAO.INVITE_PENDING);
return;
}
callback({
errMsg: 'unexpected invitation state'
});
}
};
//
// Helper functions
//
function uri(a, b) {
return '/invitation/recipient/' + a + '/sender/' + b;
}
return InvitationDAO;
});