(function () {
'use strict';
/**
* @ngdoc directives
* @name MensageriaService
* @module s4c.directives.mensageria.MensageriaService
*
* @description
* `MensageriaService` é o serviço de comunicação com o Backend do S4C de
* uso da Mensageira interna do sistema.
*/
function MensageriaService($http, $q, API_ENDPOINT, Base) {
var state = {
isOpen: false
};
var appElement = document.querySelector('[ng-app=s4CApp]');
var appScope = angular.element(appElement).scope();
var mainController = appScope.$$childHead;
var service = {
getPerfis: getPerfis,
getPerfisByDepartamento: getPerfisByDepartamento,
findContatos: findContatos,
findUsuarios: findUsuarios,
findUsuarioById: findUsuarioById,
getHistorico: getHistorico,
enviarMensagem: enviarMensagem,
enviarMensagemGrupo: enviarMensagemGrupo,
enviarMensagemGrupoUsuario: enviarMensagemGrupoUsuario,
findUltimasConversas: findUltimasConversas,
findGrupos: findGrupos,
getHistoricoGrupo: getHistoricoGrupo,
getHistoricoGrupoUsuario: getHistoricoGrupoUsuario,
findGruposUsuarios: findGruposUsuarios,
findParticipantes: findParticipantes,
atualizarGrupoUsuarios: atualizarGrupoUsuarios,
adicionarGruposUsuarios: adicionarGruposUsuarios,
adicionarParticipanteGrupo: adicionarParticipanteGrupo,
deleteParticipanteGrupo: deleteParticipanteGrupo,
deleteGrupo: deleteGrupo,
deletarMensagem: deletarMensagem,
state: state,
findById: findById,
abrirChat: abrirChat,
pegarUsuariosOnline: pegarUsuariosOnline,
obterMensagensDoUsuario: obterMensagensDoUsuario,
obterMensagensDoGrupoUsarios: obterMensagensDoGrupoUsarios,
findGrupoParticipantes: findGrupoParticipantes,
atualizarMensagensLidas: atualizarMensagensLidas,
atualizarMensagensLidasGrupo: atualizarMensagensLidasGrupo,
findGrupo: findGrupo,
getAttachedFile: getAttachedFile,
loadNewMessagesCount: loadNewMessagesCount
};
/**
* @method loadNewMessagesCount
*/
function loadNewMessagesCount() {
var deferred = $q.defer();
$http
.get(API_ENDPOINT + 'mensagem/novas')
.then(function (res) {
deferred.resolve(res.data);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method getAttachedFile
* @param {*} id
*/
function getAttachedFile(id) {
var deferred = $q.defer();
$http
.get(API_ENDPOINT + 'filemanager/' + id, { responseType: 'arraybuffer' })
.then(function (res) {
deferred.resolve(res.data);
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method pegarUsuariosOnline
*/
function pegarUsuariosOnline() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'usuarios/online')
.then(function (res) {
deferred.resolve(res.data);
});
return deferred.promise;
}
/**
* @method enviarMensagem
* @param {*} id
* @param {*} mensagem
*/
function enviarMensagem(id, mensagem) {
var deferred = $q.defer();
$http.put(API_ENDPOINT + 'mensagem/' + id, {
mensagem: mensagem
})
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method enviarMensagemGrupo
* @param {*} id
* @param {*} mensagem
*/
function enviarMensagemGrupo(id, mensagem) {
var deferred = $q.defer();
$http.put(API_ENDPOINT + 'mensagem/grupousuario/' + id, {
mensagem: mensagem
})
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method enviarMensagemGrupoUsuario
* @param {*} id
* @param {*} mensagem
*/
function enviarMensagemGrupoUsuario(id, mensagem) {
var deferred = $q.defer();
$http.put(API_ENDPOINT + 'mensagem/grupousuario/' + id, {
mensagem: mensagem
})
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
*
* @method getHistorico
*
* @param {integer} id do usuário do histórico solicitado.
*
* @returns {Promise} Promise que resolve com o histórico de conversas
* entre o usuário do token enviado junto ao request e o usuário
* solicitado
*/
function getHistorico(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'mensagem/' + id + '/30')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method getHistoricoGrupo
* @param {*} id
*/
function getHistoricoGrupo(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'mensagem/grupo_usuario/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method getHistoricoGrupoUsuario
* @param {*} id
*/
function getHistoricoGrupoUsuario(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'mensagem/grupousuario/' + id + '/30')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
*
*
* @method findContatos
*
* @returns {Promise} Promise que resolve com uma lista de usuários do
* sistema.
*/
var self = this;
self.contatos = undefined;
self.canLoadContatos = true;
function findContatos(reUsePromisse) {
if ((self.contatos || !self.canLoadContatos) && reUsePromisse) {
return self.deferred.promise;
}
self.deferred = $q.defer();
self.canLoadContatos = false;
$http.get(API_ENDPOINT + 'mensagem/contatos')
.then(function (res) {
if (typeof res.data === 'object') {
self.canLoadContatos = true;
self.contatos = res.data;
self.deferred.resolve(res.data);
} else {
self.deferred.reject(res);
}
}, function (err) {
self.deferred.reject(err);
});
return self.deferred.promise;
}
/**
*
*
* @method findUsuarios
*
* @returns {Promise} Promise que resolve com uma lista de usuários/conversas do
* sistema.
*/
self.p = $q.defer();
self.usuarios = undefined;
self.canLoadUsuarios = true;
function findUsuarios(reUsePromisse) {
if ((self.usuarios || !self.canLoadUsuarios) || reUsePromisse) {
return self.p.promise;
}
self.canLoadUsuarios = false;
$http.get(API_ENDPOINT + 'mensagem/usuarios')
.then(function (res) {
if (typeof res.data === 'object') {
self.canLoadUsuarios = true;
self.usuarios = res.data;
self.p.resolve(res.data);
} else {
p.reject(res);
}
}, function (err) {
self.p.reject(err);
});
return self.p.promise;
}
/**
* @method findById
* @param {*} id
*/
function findById(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'mensagem/findById/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
*
*
* @method findUsuariosByName
*
* @returns {Promise} Promise que resolve com uma lista de usuários do
* sistema.
*/
function findUsuarioById(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'usuarios/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method getPerfis
*/
function getPerfis() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'perfis')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method getPerfisByDepartamento
* @param {*} id
*/
function getPerfisByDepartamento(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'perfis/departamento/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
*
*
* @method findUltimasConversas
*
* @returns {Promise} Promise que resolve com uma lista de conversas do
* usuário do token da solicitação com a última mensagem de cada uma.
*/
function findUltimasConversas() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'mensagem/usuarios/ultimaConversa')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findGrupos
*/
function findGrupos() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupo_usuario_mensageria')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findGrupo
* @param {*} id
*/
function findGrupo(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupo_usuario_mensageria/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findGrupoParticipantes
* @param {*} id
*/
function findGrupoParticipantes(id) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupo_usuario_mensageria/' + id + '/participantes')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
function findGruposUsuarios() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupo_usuario_mensageria')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method adicionarGruposUsuarios
* @param {*} grupoUsuario
*/
function adicionarGruposUsuarios(grupoUsuario) {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'grupo_usuario_mensageria', grupoUsuario)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findUltimasConversas
*/
function findUltimasConversas() {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'mensagem/usuarios/ultimaConversa')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method atualizarMensagensLidas
* @param {*} idUsuario
* @param {*} idDestinario
*/
function atualizarMensagensLidas(idUsuario, idDestinario) {
var deferred = $q.defer();
if (idDestinario != null) {
$http.put(API_ENDPOINT + 'mensagem/usuarios/atualizarMensagensLidas/' + idUsuario + '/' + idDestinario)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
} else {
$http.put(API_ENDPOINT + 'mensagem/usuarios/atualizarMensagensLidas/' + idUsuario)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
}
return deferred.promise;
}
/**
* @method atualizarMensagensLidasGrupo
* @param {*} idUsuario
* @param {*} idGrupo
*/
function atualizarMensagensLidasGrupo(idUsuario, idGrupo) {
var deferred = $q.defer();
$http.put(API_ENDPOINT + 'mensagem/usuarios/atualizarMensagensLidasGrupo/' + idUsuario + '/' + idGrupo)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method atualizarGrupoUsuarios
* @param {*} grupoUsuario
*/
function atualizarGrupoUsuarios(grupoUsuario) {
var deferred = $q.defer();
$http.put(API_ENDPOINT + 'grupo_usuario_mensageria', grupoUsuario)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method findParticipantes
* @param {*} idGrupo
*/
function findParticipantes(idGrupo) {
var deferred = $q.defer();
$http.get(API_ENDPOINT + 'grupo_usuario_mensageria/' + idGrupo + '/participantes')
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method adicionarParticipanteGrupo
* @param {*} id
* @param {*} participante
*/
function adicionarParticipanteGrupo(id, participante) {
var deferred = $q.defer();
$http.post(API_ENDPOINT + 'grupo_usuario_mensageria/' + id, {
participante: participante
})
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method deleteParticipanteGrupo
* @param {*} id
* @param {*} participante
* @param {*} nomeParticipante
*/
function deleteParticipanteGrupo(id, participante, nomeParticipante) {
var deferred = $q.defer();
$http.delete(API_ENDPOINT + 'grupo_usuario_mensageria/' + id + '/' + participante + '/' + nomeParticipante)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method deleteGrupo
* @param {*} id
*/
function deleteGrupo(id) {
var deferred = $q.defer();
$http.delete(API_ENDPOINT + 'grupo_usuario_mensageria/' + id)
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method deletarMensagem
* @param {*} id
* @param {*} mensagem
*/
function deletarMensagem(id, mensagem) {
var deferred = $q.defer();
$http.delete(API_ENDPOINT + 'mensagem/' + id, {
mensagem: mensagem
})
.then(function (res) {
if (typeof res.data === 'object') {
deferred.resolve(res.data);
} else {
deferred.reject(res);
}
}, function (err) {
deferred.reject(err);
});
return deferred.promise;
}
/**
* @method abrirChat
* @param {*} usuario
*/
function abrirChat(usuario) {
mainController.MensageriaManager.abrir();
mainController.$directives.mensageria.abrirChat(usuario, false);
}
/**
* @method obterMensagensDoUsuario
* @param {*} id
* @param {*} page
*/
function obterMensagensDoUsuario(id, page) {
return Base.obter('mensagem/usuario/' + id + '?page=' + page);
}
/**
* @method obterMensagensDoGrupoUsarios
* @param {*} id
*/
function obterMensagensDoGrupoUsarios(id) {
return Base.obter('mensagem/grupo_usuario/' + id);
}
return service;
}
MensageriaService.$inject = ['$http', '$q', 'API_ENDPOINT', 'Base'];
angular.module('s4c.components.collaboration')
.service('MensageriaService', MensageriaService);
})();