i-am-online/server/controllers/status.js

116 lines
3.2 KiB
JavaScript

const keys = require("../config/keys");
const UserStatus = require("../models/userStatus");
const {
format
} = require("date-format-parse")
const {
customAlphabet
} = require("nanoid");
const nanoid = customAlphabet("1234567890abcdefghijklmnopqrstuvwxyz", 10);
// Not used
// module.exports.getUserStatus = async (req, res, next) => {
// const userStatus = await UserStatus.findOne({
// username: req.params.username
// });
// res.json({
// userStatus
// });
// }
module.exports.checkStatus = async (req, res, next) => {
const userStatus = await UserStatus.findOne({
username: req.params.username
});
var lastPingTs = (format(userStatus?.lastSeen, "x"));
var currentTs = (format(new Date(), "x"));
// var diff = currentTs - lastPingTs;
// console.log(diff/60000);
if (currentTs - lastPingTs > 240000) {
const updateUserStatusUpdt = await UserStatus.findOneAndUpdate({
username: req.params.username
}, {
amIOnline: false,
status: {
type: "offline",
updatedBy: "i-am-online-server",
via: "web",
heartbeat: {
key: null
}
},
lastSeen: userStatus.lastSeen
});
res.json({
updateUserStatusUpdt
});
} else {
const updateUserStatusUpdt = await UserStatus.findOneAndUpdate({
username: req.params.username
}, {
amIOnline: true,
status: {
type: "online",
updatedBy: "i-am-online-client",
via: "desktop",
heartbeat: {
key: "self"
}
},
lastSeen: userStatus.lastSeen
});
res.json({
updateUserStatusUpdt
});
}
}
module.exports.reportUserStatus = async (req, res, next) => {
if(req.query.auth != keys.pingAuthKey){
return res.json({
error: "Invalid auth key"
});
}
const checkIfUserExists = await UserStatus.findOne({
username: req.params.username
});
if (checkIfUserExists) {
const updateUserStatus = await UserStatus.findOneAndUpdate({
username: req.params.username
}, {
status: {
type: "online",
updatedBy: "i-am-online-client",
via: "desktop",
heartbeat: {
key: nanoid(),
},
},
amIOnline: true,
lastSeen: new Date()
}, {
new: true
});
res.json({
updateUserStatus
});
} else {
const userStatus = new UserStatus({
username: req.params.username,
status: {
type: "online",
via: "desktop",
updatedBy: "i-am-online-client",
heartbeat: {
key: nanoid(),
},
amIOnline: true,
lastSeen: new Date()
},
});
await userStatus.save();
res.json({
userStatus
});
}
};