get reportees api aggregation pipe line implimented

parent ae46ad53
const express = require('express') const express = require("express");
const { connectToDb, getDb } = require("./db") const { connectToDb, getDb } = require("./db");
const cors = require("cors") const cors = require("cors");
const app = express(); const app = express();
app.use(express.json()) app.use(express.json());
app.use(cors()) app.use(cors());
connectToDb((err) => { connectToDb((err) => {
if (!err) { if (!err) {
app.listen(4000, () => { app.listen(4000, () => {
console.log('app listening on port 4000') console.log("app listening on port 4000");
}) });
db = getDb() db = getDb();
} }
}) });
//to get all the employees data //to get all the employees data
app.get('/employees', (req, res) => { app.get("/employees", (req, res) => {
db.collection('employees').find().toArray() db.collection("employees")
.then(result => { res.send(result) }) .find()
.catch(error => res.status(401).send(error)) .toArray()
}) .then((result) => {
res.send(result);
})
.catch((error) => res.status(401).send(error));
});
//to get only individual employee data //to get only individual employee data
app.get('/employee/:id', (req, res) => { app.get("/employee/:id", (req, res) => {
let Id = parseInt(req.params.id); let Id = parseInt(req.params.id);
db.collection('employees').findOne({empId:Id},{projection:{_id:false}}) db.collection("employees")
.then(result => { res.send(result) }) .findOne({ empId: Id }, { projection: { _id: false } })
.catch(error => res.status(401).send(error)) .then((result) => {
}) res.send(result);
})
.catch((error) => res.status(401).send(error));
});
//to get activities to display //to get activities to display
app.get('/activities', (req, res) => { app.get("/activities", (req, res) => {
db.collection('activities_master').find().toArray() db.collection("activities_master")
.then(result => { res.send(result) }) .find()
.catch(error => res.status(401).send(error)) .toArray()
}) .then((result) => {
res.send(result);
})
.catch((error) => res.status(401).send(error));
});
/* /*
Example of post Data Example of post Data
...@@ -47,44 +56,48 @@ Example of post Data ...@@ -47,44 +56,48 @@ Example of post Data
,"page":1,"perPage":10, ,"page":1,"perPage":10,
"searchText":"eng" "searchText":"eng"
}*/ }*/
app.post('/getreportees', (req, res) => { app.post("/getreportees", (req, res) => {
let reporteesArray = req.body.reportees || []; let reporteesArray = req.body.reportees || [];
let sortBy=req.body.sort?req.body.sort.type || "_id" :"_id" let sortBy = req.body.sort ? req.body.sort.type || "_id" : "_id";
let sortByOrder=req.body.sort?parseInt(req.body.sort.order)|| 1: 1; let sortByOrder = req.body.sort ? parseInt(req.body.sort.order) || 1 : 1;
let page = req.body.page?parseInt(req.body.page) || 1 : 1; let page = req.body.page ? parseInt(req.body.page) || 1 : 1;
let limit = req.body.perPage?parseInt(req.body.perPage) || 10: 10; let limit = req.body.perPage ? parseInt(req.body.perPage) || 10 : 10;
let skip = (page - 1) * limit || 0; let skip = (page - 1) * limit || 0;
let query = { empId: { $in: reporteesArray } }; let query = { empId: { $in: reporteesArray } };
if(req.body.searchText){ let aggre = [{ $match: { empId: { $in: reporteesArray } } }];
let searchText = req.body.searchText.trim();
let searchStr = new RegExp(searchText, 'ig'); if (req.body.searchText) {
query = Object.assign(query, { let searchText = req.body.searchText.trim();
"$or": [ let searchStr = new RegExp(searchText, "ig");
{ 'empId': searchStr }, let orCondation = {
{ 'empName': searchStr }, $or: [
{"designation":searchStr} { empId: searchStr },
] { empName: searchStr },
}); { designation: searchStr },
} ],
db.collection('employees').find(query, { projection: { _id: false } }) };
.skip(skip) aggre.push({ $match: orCondation });
.sort({[sortBy]:sortByOrder})
.limit(limit) query = Object.assign(query);
.toArray() }
.then(result => { aggre.push({ $sort: { [sortBy]: sortByOrder } });
// Get the total count of data let facet = {
db.collection('employees').countDocuments(query) data: [{ $skip: skip }, { $limit: limit }],
.then(totalCount => { totalCount: [{ $count: "count" }],
res.send({ };
totalcount: totalCount, aggre.push({ $facet: facet });
currentPage: page, aggre.push({ $unwind: { path: "$totalCount" } });
totalPages: Math.ceil(totalCount / limit), db.collection("employees")
data: result, .aggregate(aggre)
}); .toArray()
}) .then((result) => {
.catch(error => res.status(401).send(error)); if (result && result.length) {
}) res.json({ ...result[0] });
.catch(error => res.status(401).send(error)); } else {
res.json({ data: [], totalCount: { count: 0 } });
}
})
.catch((error) => res.status(401).send(error));
}); });
//Example of post Data //Example of post Data
...@@ -101,74 +114,79 @@ app.post('/getreportees', (req, res) => { ...@@ -101,74 +114,79 @@ app.post('/getreportees', (req, res) => {
} }
} }
*/ */
app.post('/createActivity',(req,res)=>{ app.post("/createActivity", (req, res) => {
const empId = req.body.empId || null; const empId = req.body.empId || null;
if(!empId){ if (!empId) {
res.status(401).json({"message":"Employee id is missing"}); res.status(401).json({ message: "Employee id is missing" });
return return;
}else{ } else {
let {data} = req.body; let { data } = req.body;
data = {...data, "recorded_date": new Date(data['recorded_date']) }; data = { ...data, recorded_date: new Date(data["recorded_date"]) };
let query = {empId:empId }; let query = { empId: empId };
db.collection('performance_master').findOne(query).then( (result)=>{ db.collection("performance_master")
if(result){ .findOne(query)
db.collection('performance_master').updateOne(query,{ $push: { "activities":data } }) .then((result) => {
.then(async (updateRes)=>{ if (result) {
await calculateAverage(query); db.collection("performance_master")
res.json({"reuslt":updateRes}); .updateOne(query, { $push: { activities: data } })
.then(async (updateRes) => {
}) await calculateAverage(query);
.catch((error)=>{ res.json({ reuslt: updateRes });
res.json({"error":error}); })
}); .catch((error) => {
}else{ res.json({ error: error });
let insertData = { empId:empId, activities:[]}; });
insertData.activities.push(data); } else {
db.collection('performance_master').insertOne(insertData).then(async (result)=>{ let insertData = { empId: empId, activities: [] };
await calculateAverage(query); insertData.activities.push(data);
res.json({"result":result}); db.collection("performance_master")
.insertOne(insertData)
}).catch((error)=>{ .then(async (result) => {
res.json({"message":error}) await calculateAverage(query);
res.json({ result: result });
}) })
} .catch((error) => {
}).catch((error)=>{ res.json({ message: error });
console.log(error) });
res.send(query) }
}) })
.catch((error) => {
console.log(error);
} res.send(query);
});
}
}) });
//calculating average score and updating into employees data //calculating average score and updating into employees data
const calculateAverage= (query)=>{ const calculateAverage = (query) => {
return new Promise((res,rej)=>{ return new Promise((res, rej) => {
db.collection('performance_master').findOne(query).then((result)=>{ db.collection("performance_master")
let activitiesList=result.activities; .findOne(query)
let activitiesLength=activitiesList.length; .then((result) => {
let score=activitiesList.reduce((acc,curr)=>{ let activitiesList = result.activities;
return (acc) + (curr.score) let activitiesLength = activitiesList.length;
},0) let score = activitiesList.reduce((acc, curr) => {
let averageScore=0 return acc + curr.score;
score<0?averageScore=0:(averageScore=(score/activitiesLength)) }, 0);
db.collection("employees").updateOne(query,{$set:{score:averageScore}}) let averageScore = 0;
.then((result)=>{ score < 0
res(result) ? (averageScore = 0)
}) : (averageScore = score / activitiesLength);
.catch((error)=>rej(error)) db.collection("employees")
}) .updateOne(query, { $set: { score: averageScore } })
.catch((error)=>{ .then((result) => {
rej(error) res(result);
}) })
}); .catch((error) => rej(error));
} })
.catch((error) => {
rej(error);
});
});
};
//sending filtered activities data //sending filtered activities data
const moment = require('moment'); const moment = require("moment");
/*Example post data /*Example post data
{ {
...@@ -178,27 +196,35 @@ const moment = require('moment'); ...@@ -178,27 +196,35 @@ const moment = require('moment');
} }
*/ */
app.post("/getActivities", (req, res) => { app.post("/getActivities", (req, res) => {
let { empId, fromDate, toDate, today } = req.body; let { empId, fromDate, toDate, today } = req.body;
if (!empId) { if (!empId) {
res.status(401).json({ "message": "Employee id is missing" }); res.status(401).json({ message: "Employee id is missing" });
return; return;
} else {
let query = {
empId: empId,
};
if (fromDate && toDate) {
query["activities.recorded_date"] = {
$gte: new Date(fromDate),
$lte: new Date(toDate),
};
} else { } else {
let query = { // If fromDate and toDate are not provided, fetch data for the last 90 days
"empId": empId query["activities.recorded_date"] = {
}; $gte: moment().subtract(90, "days").toDate(),
if (fromDate && toDate) { $lte: moment().toDate(),
query['activities.recorded_date'] = { $gte: new Date(fromDate), $lte: new Date(toDate) }; };
} 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() };
}
db.collection('performance_master').find(query).toArray().then((results) => {
res.json(results);
}).catch((error) => {
console.error("Error fetching data:", error);
res.status(500).json({ "message": "Error fetching data" });
});
} }
db.collection("performance_master")
.find(query)
.toArray()
.then((results) => {
res.json(results);
})
.catch((error) => {
console.error("Error fetching data:", error);
res.status(500).json({ message: "Error fetching data" });
});
}
}); });
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