127 lines
3.4 KiB
JavaScript
127 lines
3.4 KiB
JavaScript
const express = require("express");
|
|
const { TimeEntry, User } = require("../models");
|
|
const {
|
|
authenticate,
|
|
authorizeAdmin,
|
|
authorizeManager,
|
|
} = require("../middleware/auth");
|
|
|
|
const router = express.Router();
|
|
|
|
// Get time entries for current user
|
|
router.get("/", authenticate, async (req, res) => {
|
|
try {
|
|
const entries = await TimeEntry.findAll({
|
|
where: { userId: req.user.id },
|
|
order: [["date", "DESC"]],
|
|
});
|
|
res.json(entries);
|
|
} catch (error) {
|
|
res.status(500).json({ message: "Server error" });
|
|
}
|
|
});
|
|
|
|
// Get all time entries (admin and manager)
|
|
router.get("/all", authenticate, authorizeManager, async (req, res) => {
|
|
try {
|
|
const entries = await TimeEntry.findAll({
|
|
include: [{ model: User, attributes: ["username"] }],
|
|
order: [["date", "DESC"]],
|
|
});
|
|
res.json(entries);
|
|
} catch (error) {
|
|
res.status(500).json({ message: "Server error" });
|
|
}
|
|
});
|
|
|
|
// Get time entries for specific user (admin and manager)
|
|
router.get(
|
|
"/user/:userId",
|
|
authenticate,
|
|
authorizeManager,
|
|
async (req, res) => {
|
|
try {
|
|
const { userId } = req.params;
|
|
console.log("Fetching entries for userId:", userId);
|
|
const entries = await TimeEntry.findAll({
|
|
where: { userId },
|
|
order: [["date", "DESC"]],
|
|
});
|
|
console.log("Found entries:", entries);
|
|
res.json(entries);
|
|
} catch (error) {
|
|
console.error("Error fetching user entries:", error);
|
|
res.status(500).json({ message: "Server error" });
|
|
}
|
|
}
|
|
);
|
|
|
|
// Create time entry
|
|
router.post("/", authenticate, async (req, res) => {
|
|
try {
|
|
const { date, reason, hours } = req.body;
|
|
const entry = await TimeEntry.create({
|
|
userId: req.user.id,
|
|
date,
|
|
reason,
|
|
hours: parseFloat(hours),
|
|
});
|
|
res.status(201).json(entry);
|
|
} catch (error) {
|
|
res.status(500).json({ message: "Server error" });
|
|
}
|
|
});
|
|
|
|
// Update time entry (own or admin)
|
|
router.put("/:id", authenticate, async (req, res) => {
|
|
try {
|
|
const { date, reason, hours } = req.body;
|
|
const entry = await TimeEntry.findByPk(req.params.id);
|
|
if (!entry) {
|
|
return res.status(404).json({ message: "Entry not found" });
|
|
}
|
|
if (entry.userId !== req.user.id && req.user.role !== "admin") {
|
|
return res.status(403).json({ message: "Access denied" });
|
|
}
|
|
await entry.update({
|
|
date,
|
|
reason,
|
|
hours: parseFloat(hours),
|
|
});
|
|
res.json(entry);
|
|
} catch (error) {
|
|
res.status(500).json({ message: "Server error" });
|
|
}
|
|
});
|
|
|
|
// Delete all time entries for current user
|
|
router.delete("/delete-all", authenticate, async (req, res) => {
|
|
try {
|
|
const deletedCount = await TimeEntry.destroy({
|
|
where: { userId: req.user.id },
|
|
});
|
|
res.json({ message: "All entries deleted", deletedCount });
|
|
} catch (error) {
|
|
res.status(500).json({ message: "Server error" });
|
|
}
|
|
});
|
|
|
|
// Delete time entry (own or admin)
|
|
router.delete("/:id", authenticate, async (req, res) => {
|
|
try {
|
|
const entry = await TimeEntry.findByPk(req.params.id);
|
|
if (!entry) {
|
|
return res.status(404).json({ message: "Entry not found" });
|
|
}
|
|
if (entry.userId !== req.user.id && req.user.role !== "admin") {
|
|
return res.status(403).json({ message: "Access denied" });
|
|
}
|
|
await entry.destroy();
|
|
res.json({ message: "Entry deleted" });
|
|
} catch (error) {
|
|
res.status(500).json({ message: "Server error" });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|