2025-10-12 00:40:02 +07:00

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;