Skip to content

Commit 765e3b3

Browse files
committed
Merge pull request #36 from Kasper24/backend-improvements
Backend improvements
2 parents b96a988 + cb515ef commit 765e3b3

5 files changed

Lines changed: 181 additions & 52 deletions

File tree

apps/backend/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { createServer } from "@repo/backend/server";
22
import envValidate from "@repo/backend/config";
33
import { dbPush, dbReset, dbSeed, dbWaitForConnection } from "@repo/database";
44

5-
await envValidate();
5+
envValidate();
66
await dbWaitForConnection();
77

88
if (process.env.NODE_ENV === "development" && process.env.RESET_DB === true) {

apps/backend/src/jest.setup.ts

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
import { jest, afterEach, beforeAll } from "@jest/globals";
1+
import { NextFunction } from "express";
22
import { drizzle } from "drizzle-orm/pglite";
3-
import { pushSchema } from "drizzle-kit/api";
3+
import { jest, afterEach, beforeAll, afterAll } from "@jest/globals";
44
import * as schema from "@repo/database/schema";
5-
import { db } from "@repo/database";
5+
import { db, dbPush, dbReset } from "@repo/database";
6+
import redis from "@repo/backend/redis";
67

78
jest.mock("@repo/database", () => {
89
const originalModule =
@@ -17,27 +18,32 @@ jest.mock("@repo/database", () => {
1718
};
1819
});
1920

21+
jest.mock("@repo/backend/middlewares/rate-limit", () => {
22+
const originalModule = jest.requireActual<
23+
typeof import("@repo/backend/middlewares/rate-limit")
24+
>("@repo/backend/middlewares/rate-limit");
25+
26+
const rateLimitHandler = jest
27+
.fn()
28+
.mockReturnValue((_: Request, __: Response, next: NextFunction) => {
29+
next();
30+
});
31+
32+
return {
33+
...originalModule,
34+
__esModule: true,
35+
rateLimitHandler,
36+
};
37+
});
38+
2039
beforeAll(async () => {
21-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
22-
const { apply } = await pushSchema(schema, db as any);
23-
await apply();
40+
await dbPush(db);
2441
});
2542

2643
afterEach(async () => {
27-
console.log("🗑️ Emptying the entire database");
28-
29-
const tableSchema = db._.schema;
30-
if (!tableSchema) throw new Error("No table schema found");
31-
32-
const queries = Object.values(tableSchema).map((table) => {
33-
// console.log(`🧨 Preparing delete query for table: ${table.dbName}`);
34-
return table.tsName;
35-
});
36-
// console.log(queries);
37-
38-
queries.forEach(async (query) => {
39-
const schemaToDelete = schema[query];
40-
if (!schemaToDelete) throw new Error(`No schema found for ${query}`);
41-
await db.delete(schemaToDelete);
42-
});
44+
await dbReset(db);
45+
});
46+
47+
afterAll(async () => {
48+
redis.quit();
4349
});

apps/backend/src/middlewares/validation.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ const validateHandler = (schema: z.ZodSchema) => {
1111
if (error instanceof ZodError) {
1212
const errorMessages = error.errors
1313
.map(
14-
(issue: z.ZodIssue) =>
15-
`${issue.path.join(".")} is ${issue.message}`,
14+
(issue: z.ZodIssue) => `${issue.path.join(".")} is ${issue.message}`
1615
)
1716
.join(", ");
1817
throw new BadRequestError(errorMessages);

apps/backend/src/server.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,21 @@ export const createServer = (): Express => {
1111
const app = express();
1212
app
1313
.disable("x-powered-by")
14-
.use(morgan("dev"))
14+
.use(
15+
morgan(
16+
`:remote-addr - :remote-user [:date[clf]] ":method :url HTTP/:http-version" :status :res[content-length]`,
17+
{ immediate: true },
18+
),
19+
)
1520
.use(express.urlencoded({ extended: true }))
1621
.use(express.json())
1722
.use(cookieParser())
18-
.use(cors())
23+
.use(cors({ origin: "http://localhost:3002", credentials: true }))
1924
.use(
2025
rateLimitHandler({
2126
timeSpan: process.env.WINDOW_SIZE_IN_MINUTES,
2227
limit: process.env.MAX_NUMBER_OF_REQUESTS_PER_WINDOW_SIZE,
23-
})
28+
}),
2429
)
2530
.get("/healthcheck", (_req, res) => {
2631
res.json({

0 commit comments

Comments
 (0)