added node backend

This commit is contained in:
QkoSad
2025-07-14 10:39:01 +03:00
parent 98e689bfc5
commit ec40145c69
26 changed files with 1495 additions and 1167 deletions
+60
View File
@@ -0,0 +1,60 @@
import express from "express";
import connection from "../db.js";
const router = express.Router();
router.get("/getall", async (req, res) => {
let sql =
"SELECT u.f_name,u.l_name,u.mail,p.name,t.time,t.date,t.user \
FROM Timelog t \
INNER JOIN Project p ON p.id=t.project \
INNER JOIN User u ON u.id=t.user ";
const where = "WHERE t.date BETWEEN ? AND ? ";
const order = "ORDER BY ?? ";
const offsetSql = "LIMIT 10 OFFSET ?;";
let flag = 0;
// construct the sql statement based on incoming request
if (req.query.from || req.query.to) {
sql = sql + where;
flag += 1;
}
if (req.query.sortby) {
sql = sql + order;
flag += 2;
}
sql = sql + offsetSql;
let results;
let fields;
switch (flag) {
case 0:
[results, fields] = await connection.query(sql, [
parseInt(req.query.offset),
]);
break;
case 1:
[results, fields] = await connection.query(sql, [
req.query.from,
req.query.to,
parseInt(req.query.offset),
]);
break;
case 2:
[results, fields] = await connection.query(sql, [
req.query.sortby,
parseInt(req.query.offset),
]);
break;
case 3:
[results, fields] = await connection.query(sql, [
req.query.from,
req.query.to,
req.query.sortby,
parseInt(req.query.offset),
]);
break;
}
res.json(results);
});
export default router;
+35
View File
@@ -0,0 +1,35 @@
import express from "express";
import connection from "../db.js";
const router = express.Router();
router.get("/gettopten", async (req, res) => {
let from = "2020-01-01";
let to = "2029-01-01";
let filterBy = "user";
if (req.query.from) from = req.query.from;
if (req.query.to) to = req.query.to;
if (req.query.filterBy) filterBy = req.query.filterBy;
let results, fields;
let filterBySql = filterBy === "user" ? "t.user" : "t.project";
try {
[results, fields] = await connection.query(
"SELECT t.user,t.date,t.project,u.f_name,u.l_name,p.name,SUM(t.time) as total_time \
FROM Timelog t \
INNER JOIN Project p ON p.id=t.project \
INNER JOIN User u ON u.id=t.user \
WHERE t.date BETWEEN ? AND ? \
GROUP BY ?? \
ORDER BY total_time DESC\
LIMIT 10;",
[from, to, filterBySql],
);
} catch (err) {
console.log(err);
res.status(400).json({ message: "Error" });
}
res.json(results);
});
export default router;
+42
View File
@@ -0,0 +1,42 @@
import express from "express";
import connection from "../db.js";
const router = express.Router();
router.get("/getUser", async (req, res) => {
const userId = req.query.userid;
let results, fields;
try {
[results, fields] = await connection.query(
"SELECT p.name,t.time,t.project \
FROM Timelog t \
INNER JOIN Project p ON p.id=t.project \
INNER JOIN User u ON u.id=t.user \
WHERE USER = ? ;",
[userId],
);
} catch (err) {
console.log(err);
res.status(400).json("ERROR");
}
let projects = {};
let projectIdtoName = {};
for (let i = 0; i < results.length; i++) {
if (results[i].project in projects) {
projects[results[i].project] += results[i].time;
} else {
projects[results[i].project] = results[i].time;
projectIdtoName[results[i].project] = results[i].name;
}
}
// map projectIds to project names before sending the data
let respData = {};
for (let key in projects) {
if (projects.hasOwnProperty(key)) {
respData[projectIdtoName[key]] = projects[key];
}
}
res.json(respData);
});
export default router;
+16
View File
@@ -0,0 +1,16 @@
import express from "express";
import connection from "../db.js";
const router = express.Router();
router.get("/reset", async (req, res) => {
try {
await connection.query("CALL InitDb;", []);
} catch (err) {
console.log(err);
res.status(400).json({ message: "Error" });
}
res.status(200).json({ message: "Success" });
});
export default router;