Commit 9a93cfdc authored by Venkaiah Naidu Singamchetty's avatar Venkaiah Naidu Singamchetty

Merge branch 'Prashanth' into 'master'

get reportees api aggregation pipe line implimented

See merge request !13
parents 5d09fcc4 7ce62c78
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
...@@ -144,30 +157,35 @@ app.post('/createActivity',(req,res)=>{ ...@@ -144,30 +157,35 @@ app.post('/createActivity',(req,res)=>{
}) })
//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
{ {
...@@ -179,25 +197,33 @@ const moment = require('moment'); ...@@ -179,25 +197,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