import express from "express"; import mysql from "mysql2/promise"; import { getTopTen } from "./db.js"; import { resourceUsage } from "process"; export const connection = await mysql.createConnection({ host: "localhost", user: "monty", password: "some_pass", database: "timelog", }); connection.config.namedPlaceholders = true; 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 "; let where = "WHERE t.date BETWEEN ? AND ? "; let order = "ORDER BY ?? "; let offsetSql = "LIMIT 10 OFFSET ?;"; let flag = 0; 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; if (flag == 0) { [results, fields] = await connection.query(sql, [ parseInt(req.query.offset), ]); } else if (flag === 1) { [results, fields] = await connection.query(sql, [ req.query.from, req.query.to, parseInt(req.query.offset), ]); } else if (flag === 2) { [results, fields] = await connection.query(sql, [ req.query.sortby, parseInt(req.query.offset), ]); } else if (flag === 3) { [results, fields] = await connection.query(sql, [ req.query.from, req.query.to, req.query.sortby, parseInt(req.query.offset), ]); } res.json(results); }); router.get("/gettopten", async (req, res) => { let filteredResults; let results2; let from = "2021-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; try { const [results, fields] = await connection.query( "SELECT t.user,t.time,t.date,t.project \ FROM Timelog t\ WHERE t.date BETWEEN ? AND ? ;", [from, to], ); filteredResults = results; } catch (err) { console.log(err); } if (req.query.filterBy) filterBy = req.query.filterBy; // how much time each user has logged during that time period if (filterBy === "user") { let users = {}; for (let i = 0; i < filteredResults.length; i++) { if (filteredResults[i].user in users) { users[filteredResults[i].user] += filteredResults[i].time; } else { users[filteredResults[i].user] = filteredResults[i].time; } } // Create items array let items = Object.keys(users).map(function (key) { return [key, users[key]]; }); // Sort the array based on the second element items.sort(function (first, second) { return second[1] - first[1]; }); // Create a new array with only the first 10 items results2 = items.slice(0, 10); } else if (filterBy === "project") { let projects = {}; for (let i = 0; i < filteredResults.length; i++) { if (filteredResults[i].project in projects) { projects[filteredResults[i].project] += filteredResults[i].time; } else { projects[filteredResults[i].project] = filteredResults[i].time; } } // Create items array let items = Object.keys(projects).map(function (key) { return [key, projects[key]]; }); // Sort the array based on the second element items.sort(function (first, second) { return second[1] - first[1]; }); // Create a new array with only the first 10 items results2 = items.slice(0, 10); } res.json(results2); }); router.get("/reset", async (req, res) => { try { const [results, fields] = await connection.query("CALL InitDb;", []); } catch (err) { console.log(err); } res.status(200).json({ message: "Success" }); }); router.get("/getUser", async (req, res) => { const userId = req.query.userid; let results, fields; console.log(userId); 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); } 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); }); const app = express(); app.use(express.json()); app.use("/api", router); const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log(`Server started on port ${PORT}`));