refactor(system): changes to keep everything more tidy and less drilling
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
import { setupRoutes } from "@/src/routes/routeHandler.route.js";
|
import { setupRoutes } from "./src/routeHandler.route.js";
|
||||||
|
|
||||||
const port = Number(process.env.PORT);
|
const port = Number(process.env.PORT);
|
||||||
|
export const baseUrl = "";
|
||||||
const startApp = async () => {
|
const startApp = async () => {
|
||||||
const app = express();
|
const app = express();
|
||||||
const baseUrl = "";
|
|
||||||
setupRoutes(baseUrl, app);
|
setupRoutes(baseUrl, app);
|
||||||
|
|
||||||
app.listen(port, () => {
|
app.listen(port, () => {
|
||||||
|
|||||||
@@ -8,7 +8,9 @@ import type { Express } from "express";
|
|||||||
import { apiReference } from "@scalar/express-api-reference";
|
import { apiReference } from "@scalar/express-api-reference";
|
||||||
// const port = 3000;
|
// const port = 3000;
|
||||||
import type { OpenAPIV3_1 } from "openapi-types";
|
import type { OpenAPIV3_1 } from "openapi-types";
|
||||||
import { healthSpec } from "./specs/health.spec.js";
|
|
||||||
|
// all the specs
|
||||||
|
import { statusSpec } from "../scaler/stats.spec.js";
|
||||||
|
|
||||||
export const openApiBase: OpenAPIV3_1.Document = {
|
export const openApiBase: OpenAPIV3_1.Document = {
|
||||||
openapi: "3.1.0",
|
openapi: "3.1.0",
|
||||||
@@ -54,7 +56,7 @@ export const setupApiDocsRoutes = (baseUrl: string, app: Express) => {
|
|||||||
const fullSpec = {
|
const fullSpec = {
|
||||||
...openApiBase,
|
...openApiBase,
|
||||||
paths: {
|
paths: {
|
||||||
...healthSpec,
|
...statusSpec,
|
||||||
|
|
||||||
// Add more specs here as you build features
|
// Add more specs here as you build features
|
||||||
},
|
},
|
||||||
11
backend/src/routeHandler.route.ts
Normal file
11
backend/src/routeHandler.route.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import type { Express } from "express";
|
||||||
|
|
||||||
|
// import the routes and route setups
|
||||||
|
import { setupApiDocsRoutes } from "./configs/scaler.config.js";
|
||||||
|
import stats from "./routes/stats.route.js";
|
||||||
|
|
||||||
|
export const setupRoutes = (baseUrl: string, app: Express) => {
|
||||||
|
//setup all the routes
|
||||||
|
setupApiDocsRoutes(baseUrl, app);
|
||||||
|
app.use(`${baseUrl}/api/stats`, stats);
|
||||||
|
};
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
import type { Express, Response } from "express";
|
|
||||||
import { setupApiDocsRoutes } from "../scaler/config.js";
|
|
||||||
|
|
||||||
export const setupRoutes = (baseUrl: string, app: Express) => {
|
|
||||||
//setup all the routes
|
|
||||||
setupApiDocsRoutes(baseUrl, app);
|
|
||||||
app.get(`${baseUrl}/`, (_, res: Response) => {
|
|
||||||
res.status(200).json({
|
|
||||||
success: true,
|
|
||||||
message: "This is just an example of this working",
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
16
backend/src/routes/stats.route.ts
Normal file
16
backend/src/routes/stats.route.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { Router } from "express";
|
||||||
|
|
||||||
|
const router = Router();
|
||||||
|
|
||||||
|
router.get("/", async (_, res) => {
|
||||||
|
const used = process.memoryUsage();
|
||||||
|
res.status(200).json({
|
||||||
|
status: "ok",
|
||||||
|
uptime: process.uptime(),
|
||||||
|
memoryUsage: `Heap: ${(used.heapUsed / 1024 / 1024).toFixed(2)} MB / RSS: ${(
|
||||||
|
used.rss / 1024 / 1024
|
||||||
|
).toFixed(2)} MB`,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
import type { OpenAPIV3_1 } from "openapi-types";
|
|
||||||
|
|
||||||
export const healthSpec: OpenAPIV3_1.PathsObject = {
|
|
||||||
"/": {
|
|
||||||
get: {
|
|
||||||
summary: "Health check",
|
|
||||||
description: "Check if the API is running",
|
|
||||||
//tags: ["Health"],
|
|
||||||
responses: {
|
|
||||||
"200": {
|
|
||||||
description: "API is healthy",
|
|
||||||
content: {
|
|
||||||
"application/json": {
|
|
||||||
schema: {
|
|
||||||
type: "object",
|
|
||||||
properties: {
|
|
||||||
success: {
|
|
||||||
type: "boolean",
|
|
||||||
example: true,
|
|
||||||
},
|
|
||||||
message: {
|
|
||||||
type: "string",
|
|
||||||
example: "LST v3 is running",
|
|
||||||
},
|
|
||||||
timestamp: {
|
|
||||||
type: "string",
|
|
||||||
format: "date-time",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
39
backend/src/scaler/stats.spec.ts
Normal file
39
backend/src/scaler/stats.spec.ts
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
import type { OpenAPIV3_1 } from "openapi-types";
|
||||||
|
|
||||||
|
export const statusSpec: OpenAPIV3_1.PathsObject = {
|
||||||
|
"/api/stats": {
|
||||||
|
get: {
|
||||||
|
summary: "Server Status",
|
||||||
|
description: "Checks the status of the server.",
|
||||||
|
tags: ["System"],
|
||||||
|
responses: {
|
||||||
|
"200": {
|
||||||
|
description: "Stats from the server",
|
||||||
|
content: {
|
||||||
|
"application/json": {
|
||||||
|
schema: {
|
||||||
|
type: "object",
|
||||||
|
properties: {
|
||||||
|
status: {
|
||||||
|
type: "string",
|
||||||
|
format: "ok",
|
||||||
|
example: "ok",
|
||||||
|
},
|
||||||
|
uptime: {
|
||||||
|
type: "number",
|
||||||
|
format: "3454.34",
|
||||||
|
example: 3454.34,
|
||||||
|
},
|
||||||
|
memoryUsage: {
|
||||||
|
type: "string",
|
||||||
|
format: "Heap: 11.62 MB / RSS: 86.31 MB",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
760
package-lock.json
generated
760
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -31,6 +31,7 @@
|
|||||||
"@commitlint/cli": "^18.4.0",
|
"@commitlint/cli": "^18.4.0",
|
||||||
"@commitlint/config-conventional": "^18.4.0",
|
"@commitlint/config-conventional": "^18.4.0",
|
||||||
"@types/express": "^5.0.6",
|
"@types/express": "^5.0.6",
|
||||||
|
"@types/mssql": "^9.1.8",
|
||||||
"@types/node": "^24.10.1",
|
"@types/node": "^24.10.1",
|
||||||
"@types/swagger-jsdoc": "^6.0.4",
|
"@types/swagger-jsdoc": "^6.0.4",
|
||||||
"@types/swagger-ui-express": "^4.1.8",
|
"@types/swagger-ui-express": "^4.1.8",
|
||||||
@@ -49,6 +50,7 @@
|
|||||||
"axios": "^1.13.2",
|
"axios": "^1.13.2",
|
||||||
"better-auth": "^1.4.6",
|
"better-auth": "^1.4.6",
|
||||||
"express": "^5.2.1",
|
"express": "^5.2.1",
|
||||||
|
"mssql": "^12.2.0",
|
||||||
"npm-check-updates": "^19.1.2"
|
"npm-check-updates": "^19.1.2"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
|
|||||||
Reference in New Issue
Block a user