96 lines
2.9 KiB
TypeScript
96 lines
2.9 KiB
TypeScript
import { NextFunction, Request, Response } from "express";
|
|
import path from "node:path";
|
|
import cookieParser from "cookie-parser";
|
|
import createHttpError from "http-errors";
|
|
// import { ServerErrorsObject, ServerResponse } from "./core/types";
|
|
// import { secureApp } from "./config/secure-app";
|
|
// import mainRouter from "./core/router/main.router";
|
|
import dotenv from "dotenv";
|
|
import { secureApp } from "./core/config/secure-app";
|
|
import initDB from "./core/config/db-connection";
|
|
import { ServerErrorsObject, ServerResponse } from "./core/types";
|
|
import { seedRBAC } from "../seeders/rbac.seed";
|
|
import mainRouter from "./core/router/main.router";
|
|
|
|
// import { seedDepartments } from "./seeders/department.seed";
|
|
// import { seedUsers } from "./seeders/user.seed";
|
|
// import { seedRoles } from "./seeders/role.seed";
|
|
const express = require("express") as typeof import("express");
|
|
dotenv.config();
|
|
|
|
export default class ServerApplication {
|
|
#PORT = 5000;
|
|
#APP = express();
|
|
constructor() {
|
|
this.serverConfiguration();
|
|
this.StartApplication();
|
|
this.InitClientSession();
|
|
this.RoutesConfiguration();
|
|
this.ErrorHandlingConfiguration();
|
|
}
|
|
|
|
async serverConfiguration() {
|
|
this.#APP.use(secureApp);
|
|
this.#APP.use(express.json());
|
|
this.#APP.use(express.urlencoded({ extended: true }));
|
|
this.#APP.set("json spaces", 2);
|
|
this.#APP.use(
|
|
"/media/images",
|
|
express.static(path.join(__dirname, "..", "media", "images")),
|
|
);
|
|
this.#APP.use(
|
|
"/media/videos",
|
|
express.static(path.join(__dirname, "..", "media", "videos")),
|
|
);
|
|
}
|
|
async StartApplication() {
|
|
await initDB();
|
|
// await seedRBAC();
|
|
|
|
this.#APP.listen(this.#PORT, () => {
|
|
console.log(
|
|
`Server Running on PORT ${this.#PORT} url : ${"http://localhost:"}${
|
|
this.#PORT
|
|
}`,
|
|
);
|
|
});
|
|
}
|
|
InitClientSession() {
|
|
this.#APP.use(cookieParser(process.env.COOKIE_PARSER_SECRET_KEY));
|
|
}
|
|
RoutesConfiguration() {
|
|
// this.#APP.get("/", (req, res) => res.send(""));
|
|
|
|
this.#APP.use("/api/v1", mainRouter);
|
|
}
|
|
ErrorHandlingConfiguration() {
|
|
this.#APP.use((req: any, res: Response, next: NextFunction) => {
|
|
console.log("dasdadasd");
|
|
|
|
next(createHttpError.NotFound("این آدرس یافت نشddد"));
|
|
});
|
|
this.#APP.use(
|
|
async (error: any, req: any, res: ServerResponse, next: NextFunction) => {
|
|
// await ErrorLog.create({
|
|
// message: error.message,
|
|
// stack: error.stack,
|
|
// severity: "HIGH",
|
|
// });
|
|
// console.log(error);
|
|
const serverError = createHttpError.InternalServerError();
|
|
const statusCode = error.status || serverError.status;
|
|
const message: string = error.message || serverError.message;
|
|
|
|
const errorObject: ServerErrorsObject = {
|
|
status: statusCode,
|
|
error: {
|
|
message,
|
|
},
|
|
};
|
|
|
|
return res.status(statusCode).json(errorObject);
|
|
},
|
|
);
|
|
}
|
|
}
|