96 lines
2.3 KiB
JavaScript
96 lines
2.3 KiB
JavaScript
require("dotenv").config();
|
|
const express = require("express");
|
|
const cors = require("cors");
|
|
const { Sequelize } = require("sequelize");
|
|
|
|
const app = express();
|
|
const PORT = process.env.PORT || 5000;
|
|
|
|
// Middleware
|
|
app.use(cors());
|
|
app.use(express.json());
|
|
|
|
// Database connection
|
|
const sequelize = new Sequelize(
|
|
process.env.DB_NAME,
|
|
process.env.DB_USER,
|
|
process.env.DB_PASSWORD,
|
|
{
|
|
host: process.env.DB_HOST,
|
|
port: process.env.DB_PORT,
|
|
dialect: "postgres",
|
|
}
|
|
);
|
|
|
|
// Test DB connection
|
|
sequelize
|
|
.authenticate()
|
|
.then(() => console.log("Database connected"))
|
|
.catch((err) => console.error("Database connection failed:", err));
|
|
|
|
// Import models
|
|
const db = require("./models");
|
|
const User = db.User;
|
|
const TimeEntry = db.TimeEntry;
|
|
|
|
// Sync database
|
|
sequelize
|
|
.sync({ force: false }) // Set to true for development to recreate tables
|
|
.then(() => {
|
|
console.log("Database synced");
|
|
// Create admin user if not exists
|
|
return User.findOrCreate({
|
|
where: { username: "admin" },
|
|
defaults: {
|
|
username: "admin",
|
|
password: "admin123", // In production, hash this
|
|
role: "admin",
|
|
},
|
|
});
|
|
})
|
|
.then(([user, created]) => {
|
|
if (created) {
|
|
console.log("Admin user created");
|
|
} else {
|
|
console.log("Admin user already exists");
|
|
}
|
|
|
|
// Create test time entry for admin
|
|
return TimeEntry.findOrCreate({
|
|
where: {
|
|
userId: user.id,
|
|
date: new Date("2025-10-10"),
|
|
reason: "Test entry",
|
|
},
|
|
defaults: {
|
|
userId: user.id,
|
|
date: new Date("2025-10-10"),
|
|
reason: "Test entry",
|
|
hours: 8.5,
|
|
},
|
|
});
|
|
})
|
|
.then(([entry, created]) => {
|
|
if (created) {
|
|
console.log("Test time entry created");
|
|
} else {
|
|
console.log("Test time entry already exists");
|
|
}
|
|
});
|
|
|
|
// Routes
|
|
app.use("/api/auth", require("./routes/auth"));
|
|
app.use("/api/users", require("./routes/users"));
|
|
app.use("/api/time-entries", require("./routes/timeEntries"));
|
|
const { router: activityLogsRouter } = require("./routes/activityLogs");
|
|
app.use("/api/activity-logs", activityLogsRouter);
|
|
|
|
// Health check
|
|
app.get("/health", (req, res) => res.status(200).json({ status: "OK" }));
|
|
|
|
app.get("/", (req, res) => res.send("Time Tracking API"));
|
|
|
|
app.listen(PORT, () => {
|
|
console.log(`Server running on port ${PORT}`);
|
|
});
|