import express from "express"; import listEndpoints from "express-list-endpoints"; import imageController from "./controllers/ImageController"; import authControler from "./controllers/AuthControler"; import mongoose from "mongoose"; import compression from "compression"; import logger from "./logger"; export const app = express(); app.use(express.json()); app.use(compression()); app.get("/", (_, res) => { const endpoints = listEndpoints(app); res.json({ endpoints }); }); app.get("/images", imageController.getAllImages); app.get("/images/:id", imageController.getImageById); app.put("/images/:id", authControler.authorize, imageController.editImage); app.post("/images", authControler.authorize, imageController.addImage); app.post("/login", authControler.login); export const startApp = async () => { const port = process.env.PORT || 8080; const mongo_uri: string = process.env.MONGODB_URI || ""; const mongo_user = process.env.MONGODB_USER; const mongo_pass = process.env.MONGODB_PASS; try { await mongoose.connect(mongo_uri, { authSource: "admin", user: mongo_user, pass: mongo_pass, }); mongoose.set("runValidators", true); const server = app.listen(port, () => logger.info(`Express server listening on port ${port}`) ); process.on("SIGTERM", () => { server.close(() => { logger.info('Server closed'); process.exit(0); }); }); } catch (error) { logger.error(error); process.exit(1); } }; export default app;