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 { connectToDb, getDb } = require("./db")
const cors = require("cors")
const express = require("express");
const { connectToDb, getDb } = require("./db");
const cors = require("cors");
const app = express();
app.use(express.json())
app.use(cors())
app.use(express.json());
app.use(cors());
connectToDb((err) => {
if (!err) {
app.listen(4000, () => {
console.log('app listening on port 4000')
})
db = getDb()
console.log("app listening on port 4000");
});
db = getDb();
}
})
});
//to get all the employees data
app.get('/employees', (req, res) => {
db.collection('employees').find().toArray()
.then(result => { res.send(result) })
.catch(error => res.status(401).send(error))
})
app.get("/employees", (req, res) => {
db.collection("employees")
.find()
.toArray()
.then((result) => {
res.send(result);
})
.catch((error) => res.status(401).send(error));
});
//to get only individual employee data
app.get('/employee/:id', (req, res) => {
app.get("/employee/:id", (req, res) => {
let Id = parseInt(req.params.id);
db.collection('employees').findOne({empId:Id},{projection:{_id:false}})
.then(result => { res.send(result) })
.catch(error => res.status(401).send(error))
})
db.collection("employees")
.findOne({ empId: Id }, { projection: { _id: false } })
.then((result) => {
res.send(result);
})
.catch((error) => res.status(401).send(error));
});
//to get activities to display
app.get('/activities', (req, res) => {
db.collection('activities_master').find().toArray()
.then(result => { res.send(result) })
.catch(error => res.status(401).send(error))
})
app.get("/activities", (req, res) => {
db.collection("activities_master")
.find()
.toArray()
.then((result) => {
res.send(result);
})
.catch((error) => res.status(401).send(error));
});
/*
Example of post Data
......@@ -47,44 +56,48 @@ Example of post Data
,"page":1,"perPage":10,
"searchText":"eng"
}*/
app.post('/getreportees', (req, res) => {
app.post("/getreportees", (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;
let page = req.body.page?parseInt(req.body.page) || 1 : 1;
let limit = req.body.perPage?parseInt(req.body.perPage) || 10: 10;
let sortBy = req.body.sort ? req.body.sort.type || "_id" : "_id";
let sortByOrder = req.body.sort ? parseInt(req.body.sort.order) || 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 skip = (page - 1) * limit || 0;
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 searchStr = new RegExp(searchText, 'ig');
query = Object.assign(query, {
"$or": [
{ 'empId': searchStr },
{ 'empName': searchStr },
{"designation":searchStr}
]
});
let searchStr = new RegExp(searchText, "ig");
let orCondation = {
$or: [
{ empId: searchStr },
{ empName: searchStr },
{ designation: searchStr },
],
};
aggre.push({ $match: orCondation });
query = Object.assign(query);
}
db.collection('employees').find(query, { projection: { _id: false } })
.skip(skip)
.sort({[sortBy]:sortByOrder})
.limit(limit)
aggre.push({ $sort: { [sortBy]: sortByOrder } });
let facet = {
data: [{ $skip: skip }, { $limit: limit }],
totalCount: [{ $count: "count" }],
};
aggre.push({ $facet: facet });
aggre.push({ $unwind: { path: "$totalCount" } });
db.collection("employees")
.aggregate(aggre)
.toArray()
.then(result => {
// Get the total count of data
db.collection('employees').countDocuments(query)
.then(totalCount => {
res.send({
totalcount: totalCount,
currentPage: page,
totalPages: Math.ceil(totalCount / limit),
data: result,
});
})
.catch(error => res.status(401).send(error));
.then((result) => {
if (result && result.length) {
res.json({ ...result[0] });
} else {
res.json({ data: [], totalCount: { count: 0 } });
}
})
.catch(error => res.status(401).send(error));
.catch((error) => res.status(401).send(error));
});
//Example of post Data
......@@ -144,30 +157,35 @@ app.post('/createActivity',(req,res)=>{
})
//calculating average score and updating into employees data
const calculateAverage= (query)=>{
return new Promise((res,rej)=>{
db.collection('performance_master').findOne(query).then((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))
db.collection("employees").updateOne(query,{$set:{score:averageScore}})
.then((result)=>{
res(result)
const calculateAverage = (query) => {
return new Promise((res, rej) => {
db.collection("performance_master")
.findOne(query)
.then((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);
db.collection("employees")
.updateOne(query, { $set: { score: averageScore } })
.then((result) => {
res(result);
})
.catch((error)=>rej(error))
.catch((error) => rej(error));
})
.catch((error)=>{
rej(error)
})
});
}
.catch((error) => {
rej(error);
});
});
};
//sending filtered activities data
const moment = require('moment');
const moment = require("moment");
/*Example post data
{
......@@ -179,25 +197,33 @@ const moment = require('moment');
app.post("/getActivities", (req, res) => {
let { empId, fromDate, toDate, today } = req.body;
if (!empId) {
res.status(401).json({ "message": "Employee id is missing" });
res.status(401).json({ message: "Employee id is missing" });
return;
} else {
let query = {
"empId": empId
empId: empId,
};
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 {
// 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);
}).catch((error) => {
})
.catch((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