Skip to content

Commit

Permalink
Merge pull request #33 from anthonyleier/create-migrator-model
Browse files Browse the repository at this point in the history
Cria model `migrator` e usa no `/api/v1/migrations`
  • Loading branch information
anthonyleier authored Mar 1, 2025
2 parents 826f462 + 5d2eb17 commit e028947
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 24 deletions.
52 changes: 52 additions & 0 deletions models/migrator.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import { resolve } from "node:path";
import migrationRunner from "node-pg-migrate";
import database from "infra/database.js";

const defaultMigrationsOptions = {
dryRun: true,
dir: resolve("infra", "migrations"),
direction: "up",
verbose: true,
migrationsTable: "pgmigrations",
};

async function listPendingMigrations() {
let dbClient;

try {
dbClient = await database.getNewClient();

const pendingMigrations = await migrationRunner({
...defaultMigrationsOptions,
dbClient,
});

return pendingMigrations;
} finally {
await dbClient?.end();
}
}

async function runPendingMigrations() {
let dbClient;

try {
dbClient = await database.getNewClient();

const migratedMigrations = await migrationRunner({
...defaultMigrationsOptions,
dbClient,
dryRun: false,
});

return migratedMigrations;
} finally {
await dbClient?.end();
}
}

const migrator = {
listPendingMigrations,
runPendingMigrations,
};
export default migrator;
27 changes: 3 additions & 24 deletions pages/api/v1/migrations/index.js
Original file line number Diff line number Diff line change
@@ -1,40 +1,19 @@
import { resolve } from "node:path";
import migrationRunner from "node-pg-migrate";
import database from "infra/database.js";
import { createRouter } from "next-connect";
import controller from "infra/controller.js";
import migrator from "models/migrator.js";

const router = createRouter();
router.get(getHandler);
router.post(postHandler);
export default router.handler(controller.errorHandlers);

const defaultMigrationsOptions = {
dryRun: true,
dir: resolve("infra", "migrations"),
direction: "up",
verbose: true,
migrationsTable: "pgmigrations",
};

async function getHandler(request, response) {
const dbClient = await database.getNewClient();
const pendingMigrations = await migrationRunner({
...defaultMigrationsOptions,
dbClient,
});
await dbClient.end();
const pendingMigrations = await migrator.listPendingMigrations();
return response.status(200).json(pendingMigrations);
}

async function postHandler(request, response) {
const dbClient = await database.getNewClient();
const migratedMigrations = await migrationRunner({
...defaultMigrationsOptions,
dbClient,
dryRun: false,
});
await dbClient.end();
const migratedMigrations = await migrator.runPendingMigrations();

if (migratedMigrations.length > 0) {
return response.status(201).json(migratedMigrations);
Expand Down

0 comments on commit e028947

Please sign in to comment.