getActivities api sort added

parent befa6ee0
{
"siteId": "8f075393-d25d-4311-b131-52d4744be01d"
"siteId": "88710c90-4ca9-4277-ad9d-0cf4d14584a1"
}
\ No newline at end of file
......@@ -17,12 +17,12 @@ app.use(express.urlencoded({ extended: true }));
app.use(express.json());
// Create a reusable MongoClient instance for connection pooling
const client = new MongoClient(connectionString,{
const client = new MongoClient(connectionString, {
useNewUrlParser: true,
useUnifiedTopology: true,
connectTimeoutMS: 30000, // Connection timeout in milliseconds
});
client.connect()
client.connect()
.then(() => {
console.log("Connected to MongoDB");
......@@ -31,11 +31,11 @@ const client = new MongoClient(connectionString,{
console.error("Error connecting to MongoDB:", err);
});
let db=client.db(dbName);
let db = client.db(dbName);
//to get all the employees data
router.get("/employees", async(req, res) => {
router.get("/employees", async (req, res) => {
await db.collection("employees")
.find()
.toArray()
......@@ -46,7 +46,7 @@ router.get("/employees", async(req, res) => {
});
//to get only individual employee data
router.get("/employee/:id", async(req, res) => {
router.get("/employee/:id", async (req, res) => {
let Id = parseInt(req.params.id);
await db.collection("employees")
.findOne({ empId: Id }, { projection: { _id: false } })
......@@ -80,7 +80,7 @@ router.post('/login', async (req, res) => {
//to get activities to display
router.get("/activities", async(req, res) => {
router.get("/activities", async (req, res) => {
await db.collection("activities_master")
.find()
.toArray()
......@@ -98,7 +98,7 @@ Example of post Data
,"page":1,"perPage":10,
"searchText":"eng"
}*/
router.post("/getreportees",async (req, res) => {
router.post("/getreportees", async (req, res) => {
let reporteesArray = req.body.reportees || [];
let sortBy = req.body.sort ? req.body.sort.type || "_id" : "_id";
let sortByOrder = req.body.sort ? parseInt(req.body.sort.order) || 1 : 1;
......@@ -108,18 +108,25 @@ router.post("/getreportees",async (req, res) => {
let query = { empId: { $in: reporteesArray } };
let aggre = [{ $match: { empId: { $in: reporteesArray } } }];
aggre.push({
$addFields: {
empIdString: { $toString: "$empId" }
}
})
if (req.body.searchText) {
let searchText = req.body.searchText.trim();
let searchStr = new RegExp(searchText, "ig");
let orCondation = {
$or: [
{ empId: searchStr },
{ empIdString: searchStr },
{ empName: searchStr },
{ designation: searchStr },
{ techStack: searchStr }
],
};
aggre.push({ $match: orCondation });
aggre.push({ $unset: "empIdString" });
query = Object.assign(query);
}
aggre.push({ $sort: { [sortBy]: sortByOrder } });
......@@ -136,7 +143,7 @@ router.post("/getreportees",async (req, res) => {
if (result && result.length) {
res.status(201).json({ ...result[0] });
} else {
res.status(404).json({ data: [], totalCount: { count: 0 } });
res.status(201).json({ data: [], totalCount: { count: 0 } });
}
})
.catch((error) => res.status(401).send(error));
......@@ -151,12 +158,13 @@ router.post("/getreportees",async (req, res) => {
"aName":"Approval of timesheet",
"aId":"D001",
"type":"default",
"ratedBy":"Name",
"score":3,
"comments":""
}
}
*/
router.post('/createActivity',async (req, res) => {
router.post('/createActivity', async (req, res) => {
const empId = req.body.empId;
if (!empId) {
res.status(401).json({ "message": "Employee id is missing" });
......@@ -165,7 +173,7 @@ router.post('/createActivity',async (req, res) => {
let { data } = req.body;
//data validation
if (!_.get(data, "aName", "") || !_.get(data, "aId", "") || !_.get(data, "type", "") || !_.get(data, "score", "")) {
if (!_.get(data, "aName", "") || !_.get(data, "aId", "") || !_.get(data, "type", "") || !_.get(data, "score", "") || !_.get(data, "comments", "") || !_.get(data, "ratedBy", "")) {
res.status(401).json({ "error": "Invalid Activity data" });
return;
}
......@@ -174,16 +182,16 @@ router.post('/createActivity',async (req, res) => {
res.status(401).json({ "message": "Score Should be between 1 to 5 or -1 to -5 only" });
return
}
if(data["comments"]===undefined){
res.status(401).json({ "message": "need comments field" });
return
}
// if(data["comments"]===undefined){
// res.status(401).json({ "message": "need comments field" });
// return
// }
data = { ...data, "recorded_date": new Date() };
data = Object.assign(data, { "_id": new ObjectId() })
let query = { empId: empId };
await db.collection('performance_master').findOne(query).then(async(result) => {
await db.collection('performance_master').findOne(query).then(async (result) => {
if (result) {
await db.collection('performance_master').updateOne(query, { $push: { "activities": data } })
.then(async (updateRes) => {
......@@ -217,22 +225,22 @@ router.post('/createActivity',async (req, res) => {
})
//calculating average score and updating into employees data
const calculateAverage = async(query) => {
return await new Promise(async(res, rej) => {
const calculateAverage = async (query) => {
return await new Promise(async (res, rej) => {
await db.collection("performance_master")
.findOne(query)
.then(async(result) => {
.then(async (result) => {
let activitiesList = result.activities;
let activitiesLength = activitiesList.length;
let score = activitiesList.reduce((acc, curr) => { return acc + curr.score }, 0);
let averageScore = 0;
score < 0
? (averageScore = 0)
: (averageScore = score / activitiesLength);
if (averageScore % 1 !== 0) {
averageScore = averageScore.toFixed(1);
}
let score = activitiesList.reduce((acc, curr) => { return acc + Number(curr.score) }, 0);
let averageScore = score / activitiesLength;
// score < 0
// ? (averageScore = 0)
// : (averageScore = score / activitiesLength);
// if (averageScore % 1 !== 0) {
averageScore = Number(averageScore).toFixed(1);
// }
await db.collection("employees")
.updateOne(query, { $set: { score: Number(averageScore) } })
......@@ -252,49 +260,74 @@ const calculateAverage = async(query) => {
{
"empId":41689,
"fromDate":"2024-03-10",
"toDate":"2024-03-14"
"toDate":"2024-03-14",
page:0
perPage:10,
}
*/
router.post("/getActivities", async(req, res) => {
let { empId, fromDate, toDate, today } = req.body;
router.post("/getActivities", async (req, res) => {
let { empId, today } = req.body;
if (!empId || typeof empId == "string") {
res.status(401).json({ message: "Employee id is missing / EmpId should be string only" });
return;
} else {
let query = {
empId: empId,
};
if (fromDate && toDate) {
fromDate = new Date(fromDate)
toDate = new Date(toDate);
let page = req.body.page ? parseInt(req.body.page) || 1 : 1;
let limit = req.body.perPage ? parseInt(req.body.perPage) || 10 : 10;
let skip = (page - 1) * limit || 0;
//let query = { empId: empId};
let aggreGate = [{ $match: { empId: empId } }];
let fromDate = moment().subtract(90, "days").toDate();
let toDate = moment().toDate()
if (req.body.fromDate && req.body.toDate) {
fromDate = new Date(req.body.fromDate);
toDate = new Date(req.body.toDate);
}
toDate.setHours(23);
toDate.setMinutes(59);
toDate.setSeconds(59);
query["activities.recorded_date"] = {
$gte: new Date(fromDate),
$lte: new Date(toDate),
// query["activities.recorded_date"] = {$gte: new Date(fromDate),$lte: new Date(toDate) };
aggreGate.push({ $match: { "activities.recorded_date": { $gte: new Date(fromDate), $lte: new Date(toDate) } } });
aggreGate.push({ $unwind: "$activities" });
aggreGate.push({ $sort: { "activities.recorded_date": -1 } });
let facet = {
data: [{ $skip: skip }, { $limit: limit }],
totalCount: [{ $count: "count" }],
};
aggreGate.push({ $facet: facet });
aggreGate.push({ $unwind: { path: "$totalCount" } });
db.collection("performance_master")
.aggregate(aggreGate)
.toArray()
.then((result) => {
if (result && result.length) {
let resData = { activities: [], totalCount: result[0].totalCount, "empId": empId };
if (result[0].data?.length) {
result[0].data.forEach((item) => {
resData["activities"].push(item.activities);
});
}
res.status(201).json(resData);
} else {
// If fromDate and toDate are not provided, fetch data for the last 90 days
query["activities.recorded_date"] = {
$gte: moment().subtract(90, "days").toDate(),
$lte: moment().toDate(),
};
res.status(201).json({ activities: [], totalCount: { count: 0 } });
}
await db.collection("performance_master")
.findOne(query)
.then((results) => {
res.status(201).json(results);
})
.catch((error) => {
res.status(401).json({ message: "Error fetching data" }, error);
});
.catch((error) => res.status(401).send(error));
}
});
app.use('/.netlify/functions/api', router);
// app.listen(5000,()=>{console.log("running")})
module.exports.handler=serverless(app)
module.exports.handler = serverless(app)
......@@ -4,7 +4,8 @@
"description": "",
"main": "server.js",
"scripts": {
"build": "netlify deploy --prod"
"build": "netlify deploy --prod",
"server":"node --watch ./functions/api.js"
},
"dependencies": {
"cors": "^2.8.5",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment