Skip to content

Commit 02c2ec4

Browse files
committed
refactor: create migrator model and use it for the migrations endpoint
1 parent 8b8053d commit 02c2ec4

2 files changed

Lines changed: 62 additions & 43 deletions

File tree

models/migrator.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { resolve } from "node:path";
2+
import database from "infra/database.js";
3+
import { runner as migrationRunner } from "node-pg-migrate";
4+
5+
export const defaultMigrationOptions = {
6+
dryRun: true,
7+
dir: resolve("infra", "migrations"),
8+
direction: "up",
9+
verbose: true,
10+
migrationsTable: "pgmigrations",
11+
};
12+
13+
export async function listPendingMigrations() {
14+
let dbClient;
15+
16+
try {
17+
dbClient = await database.getNewClient();
18+
19+
const pendingMigrations = await migrationRunner({
20+
...defaultMigrationOptions,
21+
dbClient,
22+
});
23+
24+
return pendingMigrations;
25+
} finally {
26+
await dbClient?.end();
27+
}
28+
}
29+
30+
async function runPendingMigrations() {
31+
let dbClient;
32+
33+
try {
34+
dbClient = await database.getNewClient();
35+
36+
const migratedMigrations = await migrationRunner({
37+
...defaultMigrationOptions,
38+
dbClient,
39+
dryRun: false,
40+
});
41+
42+
return migratedMigrations;
43+
} finally {
44+
await dbClient?.end();
45+
}
46+
}
47+
48+
const migrator = {
49+
listPendingMigrations,
50+
runPendingMigrations,
51+
};
52+
53+
export default migrator;

pages/api/v1/migrations/index.js

Lines changed: 9 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { createRouter } from "next-connect";
2-
import { runner as migrationRunner } from "node-pg-migrate";
3-
import { join } from "node:path";
4-
import database from "infra/database.js";
5-
import controller from "infra/controller";
2+
import controller from "infra/controller.js";
3+
import migrator from "models/migrator.js";
64

75
const router = createRouter();
86

@@ -11,49 +9,17 @@ router.post(postHandler);
119

1210
export default router.handler(controller.errorHandlers);
1311

14-
const defaultMigrationOptions = {
15-
dryRun: true,
16-
dir: join("infra", "migrations"),
17-
direction: "up",
18-
verbose: true,
19-
migrationsTable: "pgmigrations",
20-
};
21-
2212
async function getHandler(request, response) {
23-
let dbClient;
24-
25-
try {
26-
dbClient = await database.getNewClient();
27-
28-
const pendingMigrations = await migrationRunner({
29-
...defaultMigrationOptions,
30-
dbClient,
31-
});
32-
33-
return response.status(200).json(pendingMigrations);
34-
} finally {
35-
await dbClient?.end();
36-
}
13+
const pendingMigrations = await migrator.listPendingMigrations();
14+
return response.status(200).json(pendingMigrations);
3715
}
3816

3917
async function postHandler(request, response) {
40-
let dbClient;
18+
const migratedMigrations = await migrator.runPendingMigrations();
4119

42-
try {
43-
dbClient = await database.getNewClient();
44-
45-
const migratedMigrations = await migrationRunner({
46-
...defaultMigrationOptions,
47-
dbClient,
48-
dryRun: false,
49-
});
50-
51-
if (migratedMigrations.length > 0) {
52-
return response.status(201).json(migratedMigrations);
53-
}
54-
55-
return response.status(200).json(migratedMigrations);
56-
} finally {
57-
await dbClient?.end();
20+
if (migratedMigrations.length > 0) {
21+
return response.status(201).json(migratedMigrations);
5822
}
23+
24+
return response.status(200).json(migratedMigrations);
5925
}

0 commit comments

Comments
 (0)