import express from "express"; import cors from "cors"; import path from "path"; import { fileURLToPath } from "url"; import healthRouter from "./routes/health.js"; import authRouter from "./routes/auth.js"; import vendorsRouter from "./routes/vendors.js"; import usersRouter from "./routes/users.js"; import categoriesRouter from "./routes/categories.js"; import taxesRouter from "./routes/taxes.js"; import productsRouter from "./routes/products.js"; import catalogRouter from "./routes/catalog.js"; import transactionsRouter from "./routes/transactions.js"; import { errorHandler } from "./middleware/errorHandler.js"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); export function createApp() { const app = express(); app.use( cors({ origin: process.env.CORS_ORIGIN ?? "*", credentials: true, }) ); app.use(express.json()); app.use(express.urlencoded({ extended: true })); // API routes app.use("/api/v1", healthRouter); app.use("/api/v1/auth", authRouter); app.use("/api/v1/vendors", vendorsRouter); app.use("/api/v1/users", usersRouter); app.use("/api/v1/categories", categoriesRouter); app.use("/api/v1/taxes", taxesRouter); app.use("/api/v1/products", productsRouter); app.use("/api/v1/catalog", catalogRouter); app.use("/api/v1/transactions", transactionsRouter); // Serve React admin UI static assets in production if (process.env.NODE_ENV === "production") { const clientDist = path.join(__dirname, "../../client/dist"); app.use(express.static(clientDist)); app.get(/^(?!\/api).*/, (_req, res) => { res.sendFile(path.join(clientDist, "index.html")); }); } app.use(errorHandler); return app; }