bot-api/src/app.ts

56 lines
1.5 KiB
TypeScript

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";
import cors from "cors";
export const app = express();
app.use(express.json());
app.use(compression());
app.use(cors());
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;