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")); // 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}`); });