@@ -1,4 +1,4 @@ | |||||
'use strict'; | |||||
"use strict"; | |||||
/** | /** | ||||
* Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/controllers.html#core-controllers) | * Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/controllers.html#core-controllers) | ||||
@@ -1,8 +1,32 @@ | |||||
'use strict'; | |||||
const messageModel = require("../../../model/messageModel"); | |||||
("use strict"); | |||||
/** | /** | ||||
* Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/models.html#lifecycle-hooks) | * Read the documentation (https://strapi.io/documentation/developer-docs/latest/concepts/models.html#lifecycle-hooks) | ||||
* to customize this model | * to customize this model | ||||
*/ | */ | ||||
module.exports = {}; | |||||
module.exports = { | |||||
// lifecycles: { | |||||
// async beforeCreate(data) { | |||||
// var checkData = await strapi | |||||
// .query("chats") | |||||
// .find({ | |||||
// session_key: data.session_key, | |||||
// phoneNumber: data.phoneNumber, | |||||
// }); | |||||
// if (checkData) { | |||||
// throw strapi.errors.badRequest("Chats already exist"); | |||||
// } | |||||
// var data = await messageModel | |||||
// .asyncLoadClient(data.session_key) | |||||
// .catch((message) => { | |||||
// throw strapi.errors.badRequest(`error loading clients ${message}`); | |||||
// }); | |||||
// if (data["TYPE"] == "READY") { | |||||
// } else if (data["TYPE"] == "AUTH_FAILURE") { | |||||
// throw strapi.errors.badRequest(`error loading clients ${message}`); | |||||
// } | |||||
// }, | |||||
// }, | |||||
}; |
@@ -6,15 +6,15 @@ | |||||
*/ | */ | ||||
module.exports = { | module.exports = { | ||||
distinctbyKey: async (params) => { | |||||
const results = await strapi.query("message").find(params); | |||||
let arrKeys = []; | |||||
results.forEach((i) => { | |||||
if (!arrKeys.includes(i["session_datum_key"])) | |||||
arrKeys.push(i["session_datum_key"]); | |||||
}); | |||||
return arrKeys; | |||||
}, | |||||
// distinctbyKey: async (params) => { | |||||
// const results = await strapi.query("message").find(params); | |||||
// let arrKeys = []; | |||||
// results.forEach((i) => { | |||||
// if (!arrKeys.includes(i["session_datum_key"])) | |||||
// arrKeys.push(i["session_datum_key"]); | |||||
// }); | |||||
// return arrKeys; | |||||
// }, | |||||
getQueueMessage: async (sessionId) => { | getQueueMessage: async (sessionId) => { | ||||
var chat = await strapi.api["chats"].services["chats"].find({ | var chat = await strapi.api["chats"].services["chats"].find({ | ||||
session_key: sessionId, | session_key: sessionId, | ||||
@@ -43,22 +43,22 @@ module.exports = { | |||||
await strapi.api["session-data"].services[ | await strapi.api["session-data"].services[ | ||||
"session-data" | "session-data" | ||||
].delete({ id }); | ].delete({ id }); | ||||
const messages = await strapi.api.message.services.message.find( | |||||
{ | |||||
_sort: "session_datum_key:desc", | |||||
state: "QUEUE", | |||||
session_datum_key: i["id"], | |||||
} | |||||
); | |||||
for (const message of messages) { | |||||
await strapi.api.message.services.message.update( | |||||
{ id: message.id }, | |||||
{ | |||||
state: "ERROR", | |||||
keterangan: "sessions no longer valid", | |||||
} | |||||
); | |||||
} | |||||
// const messages = await strapi.api.message.services.message.find( | |||||
// { | |||||
// _sort: "session_datum_key:desc", | |||||
// state: "QUEUE", | |||||
// session_datum_key: i["id"], | |||||
// } | |||||
// ); | |||||
// for (const message of messages) { | |||||
// await strapi.api.message.services.message.update( | |||||
// { id: message.id }, | |||||
// { | |||||
// state: "ERROR", | |||||
// keterangan: "sessions no longer valid", | |||||
// } | |||||
// ); | |||||
// } | |||||
} | } | ||||
} | } | ||||
} | } | ||||
@@ -6,11 +6,29 @@ const refreshMessage = require("./refreshMessage"); | |||||
const refreshChat = async function (client, sessionsId) { | const refreshChat = async function (client, sessionsId) { | ||||
try { | try { | ||||
if (client && sessionsId) { | if (client && sessionsId) { | ||||
var oldChats = await strapi.api["chats"].services["chats"].find({ | |||||
last_sessionId: client.info.me._serialized, | |||||
}); | |||||
oldChats = oldChats.filter( | |||||
(item) => Object.keys(item.session_key).length === 0 | |||||
); | |||||
for (var i = 0; i < oldChats.length; i++) { | |||||
var oldChatId = oldChats[i].id; | |||||
// console.log(oldChats[i]); | |||||
await strapi.query("chats").update( | |||||
{ id: oldChatId }, | |||||
{ | |||||
session_key: sessionsId, | |||||
} | |||||
); | |||||
console.log(i); | |||||
} | |||||
var chatId; | var chatId; | ||||
var result = await messageModel.getAllChats(client); | var result = await messageModel.getAllChats(client); | ||||
// console.log(result["DATA"]); | |||||
if (result["STATUS"] == 1) { | if (result["STATUS"] == 1) { | ||||
for (var i = 0; i < result["DATA"].length; i++) { | for (var i = 0; i < result["DATA"].length; i++) { | ||||
console.log("next", i); | |||||
var chatsExist = await strapi.api["chats"].services[ | var chatsExist = await strapi.api["chats"].services[ | ||||
"chats" | "chats" | ||||
].findOne({ | ].findOne({ | ||||
@@ -18,35 +36,17 @@ const refreshChat = async function (client, sessionsId) { | |||||
phoneNumber: result["DATA"][i]["id"].user, | phoneNumber: result["DATA"][i]["id"].user, | ||||
}); | }); | ||||
if (!chatsExist) { | if (!chatsExist) { | ||||
//check again with last active session | |||||
chatsExist = await strapi.api["chats"].services[ | |||||
"chats" | |||||
].findOne({ | |||||
last_sessionId: client.info.me._serialized, | |||||
chatsExist = await strapi.query("chats").create({ | |||||
session_key: sessionsId, | |||||
name: result["DATA"][i]["name"], | |||||
unreadCount: result["DATA"][i]["unreadCount"], | |||||
timestamp: moment | |||||
.unix(result["DATA"][i]["timestamp"]) | |||||
.toDate(), | |||||
chatId: result["DATA"][i]["id"], | |||||
phoneNumber: result["DATA"][i]["id"].user, | phoneNumber: result["DATA"][i]["id"].user, | ||||
last_sessionId: client.info.me._serialized, | |||||
}); | }); | ||||
if (!chatsExist) { | |||||
await strapi.query("chats").create({ | |||||
session_key: sessionsId, | |||||
name: result["DATA"][i]["name"], | |||||
unreadCount: result["DATA"][i]["unreadCount"], | |||||
timestamp: moment | |||||
.unix(result["DATA"][i]["timestamp"]) | |||||
.toDate(), | |||||
chatId: result["DATA"][i]["id"], | |||||
phoneNumber: result["DATA"][i]["id"].user, | |||||
last_sessionId: client.info.me._serialized, | |||||
}); | |||||
} else { | |||||
console.log("updating old chat"); | |||||
let id = chatsExist.id; | |||||
strapi.query("chats").update( | |||||
{ id }, | |||||
{ | |||||
session_key: sessionsId, | |||||
} | |||||
); | |||||
} | |||||
} | } | ||||
var messages = await messageModel.getMessagebyId( | var messages = await messageModel.getMessagebyId( | ||||
client, | client, | ||||
@@ -65,8 +65,6 @@ const refreshChat = async function (client, sessionsId) { | |||||
throw { message: result["DATA"] }; | throw { message: result["DATA"] }; | ||||
} | } | ||||
} | } | ||||
// console.log("done populating chats"); | |||||
} catch (e) { | } catch (e) { | ||||
console.log("error", e.message || e); | console.log("error", e.message || e); | ||||
// return { STATUS: 0, DATA: e.message || e }; | // return { STATUS: 0, DATA: e.message || e }; | ||||