left to add restart button, view user button, fix the UI and fix the way dates are generated in the db

This commit is contained in:
QkoSad
2024-11-20 22:52:11 +02:00
commit 06f91a264d
988 changed files with 576669 additions and 0 deletions
+135
View File
@@ -0,0 +1,135 @@
import express from "express";
import mysql from "mysql2/promise";
import { getTopTen } from "./db.js";
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 \
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);
});
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}`));