From af0685b189aa031eddd80f4620c349bb0f73343e Mon Sep 17 00:00:00 2001 From: Alisson Pereira Date: Sat, 23 Aug 2025 13:25:49 -0300 Subject: [PATCH] feat: create migrator model and refactor migrations --- models/migrator.js | 52 ++++++++++++++++++++++++++++++++ pages/api/v1/migrations/index.js | 49 +++++------------------------- 2 files changed, 60 insertions(+), 41 deletions(-) create mode 100644 models/migrator.js diff --git a/models/migrator.js b/models/migrator.js new file mode 100644 index 0000000..ad0ca82 --- /dev/null +++ b/models/migrator.js @@ -0,0 +1,52 @@ +import migrationRunner from "node-pg-migrate"; +import { resolve } from "node:path"; +import database from "infra/database.js"; + +const defaultMigrationOptions = { + 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({ + ...defaultMigrationOptions, + dbClient, + }); + return pendingMigrations; + } finally { + await dbClient?.end(); + } +} + +async function runPendingMigrations() { + let dbClient; + + try { + dbClient = await database.getNewClient(); + + const migratedMigrations = await migrationRunner({ + ...defaultMigrationOptions, + dbClient, + dryRun: false, + }); + + return migratedMigrations; + } finally { + await dbClient?.end(); + } +} + +const migrator = { + listPendingMigrations, + runPendingMigrations, +}; + +export default migrator; diff --git a/pages/api/v1/migrations/index.js b/pages/api/v1/migrations/index.js index cb7312c..a988063 100644 --- a/pages/api/v1/migrations/index.js +++ b/pages/api/v1/migrations/index.js @@ -1,8 +1,6 @@ import { createRouter } from "next-connect"; -import migrationRunner from "node-pg-migrate"; -import { resolve } from "node:path"; -import database from "infra/database.js"; import controller from "infra/controller.js"; +import migrator from "models/migrator.js"; const router = createRouter(); @@ -11,48 +9,17 @@ router.post(postHandler); export default router.handler(controller.errorHandlers); -const defaultMigrationOptions = { - dryRun: true, - dir: resolve("infra", "migrations"), - direction: "up", - verbose: true, - migrationsTable: "pgmigrations", -}; - async function getHandler(request, response) { - let dbClient; - - try { - dbClient = await database.getNewClient(); - - const pendingMigrations = await migrationRunner({ - ...defaultMigrationOptions, - dbClient, - }); - return response.status(200).json(pendingMigrations); - } finally { - await dbClient.end(); - } + const pendingMigrations = await migrator.listPendingMigrations(); + return response.status(200).json(pendingMigrations); } async function postHandler(request, response) { - let dbClient; + const migratedMigrations = await migrator.runPendingMigrations(); - try { - dbClient = await database.getNewClient(); - - const migratedMigrations = await migrationRunner({ - ...defaultMigrationOptions, - dbClient, - dryRun: false, - }); - - if (migratedMigrations.length > 0) { - return response.status(201).json(migratedMigrations); - } - - return response.status(200).json(migratedMigrations); - } finally { - await dbClient.end(); + if (migratedMigrations.length > 0) { + return response.status(201).json(migratedMigrations); } + + return response.status(200).json(migratedMigrations); }