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 } } }];
if (req.body.searchText) {
let searchText = req.body.searchText.trim(); let searchText = req.body.searchText.trim();
let searchStr = new RegExp(searchText, 'ig'); let searchStr = new RegExp(searchText, "ig");
query = Object.assign(query, { let orCondation = {
"$or": [ $or: [
{ 'empId': searchStr }, { empId: searchStr },
{ 'empName': searchStr }, { empName: searchStr },
{"designation":searchStr} { designation: searchStr },
] ],
}); };
aggre.push({ $match: orCondation });
query = Object.assign(query);
} }
db.collection('employees').find(query, { projection: { _id: false } }) aggre.push({ $sort: { [sortBy]: sortByOrder } });
.skip(skip) let facet = {
.sort({[sortBy]:sortByOrder}) data: [{ $skip: skip }, { $limit: limit }],
.limit(limit) totalCount: [{ $count: "count" }],
};
aggre.push({ $facet: facet });
aggre.push({ $unwind: { path: "$totalCount" } });
db.collection("employees")
.aggregate(aggre)
.toArray() .toArray()
.then(result => { .then((result) => {
// Get the total count of data if (result && result.length) {
db.collection('employees').countDocuments(query) res.json({ ...result[0] });
.then(totalCount => { } else {
res.send({ res.json({ data: [], totalCount: { count: 0 } });
totalcount: totalCount, }
currentPage: page,
totalPages: Math.ceil(totalCount / limit),
data: result,
});
})
.catch(error => res.status(401).send(error));
}) })
.catch(error => res.status(401).send(error)); .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) {
db.collection("performance_master")
.updateOne(query, { $push: { activities: data } })
.then(async (updateRes) => {
await calculateAverage(query); await calculateAverage(query);
res.json({"reuslt":updateRes}); res.json({ reuslt: updateRes });
}) })
.catch((error)=>{ .catch((error) => {
res.json({"error":error}); res.json({ error: error });
}); });
}else{ } else {
let insertData = { empId:empId, activities:[]}; let insertData = { empId: empId, activities: [] };
insertData.activities.push(data); insertData.activities.push(data);
db.collection('performance_master').insertOne(insertData).then(async (result)=>{ db.collection("performance_master")
.insertOne(insertData)
.then(async (result) => {
await calculateAverage(query); await calculateAverage(query);
res.json({"result":result}); res.json({ result: result });
}).catch((error)=>{
res.json({"message":error})
}) })
.catch((error) => {
res.json({ message: error });
});
} }
}).catch((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);
db.collection("employees")
.updateOne(query, { $set: { score: averageScore } })
.then((result) => {
res(result);
}) })
.catch((error)=>rej(error)) .catch((error) => rej(error));
}) })
.catch((error)=>{ .catch((error) => {
rej(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
{ {
...@@ -180,25 +198,33 @@ const moment = require('moment'); ...@@ -180,25 +198,33 @@ 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 { } else {
let query = { let query = {
"empId": empId empId: empId,
}; };
if (fromDate && toDate) { if (fromDate && toDate) {
query['activities.recorded_date'] = { $gte: new Date(fromDate), $lte: new Date(toDate) }; query["activities.recorded_date"] = {
$gte: new Date(fromDate),
$lte: new Date(toDate),
};
} else { } else {
// If fromDate and toDate are not provided, fetch data for the last 90 days // 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() }; query["activities.recorded_date"] = {
$gte: moment().subtract(90, "days").toDate(),
$lte: moment().toDate(),
};
} }
db.collection('performance_master').find(query).toArray().then((results) => { db.collection("performance_master")
.find(query)
.toArray()
.then((results) => {
res.json(results); res.json(results);
}).catch((error) => { })
.catch((error) => {
console.error("Error fetching data:", error); console.error("Error fetching data:", error);
res.status(500).json({ "message": "Error fetching data" }); 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