From 5d2eb170ad8b01c68e5d385f912e8e844ca170e2 Mon Sep 17 00:00:00 2001 From: Anthony Cruz Date: Sat, 1 Mar 2025 16:44:09 -0300 Subject: [PATCH] =?UTF-8?q?refactor:=20cria=C3=A7=C3=A3o=20do=20model=20`m?= =?UTF-8?q?igrator`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- models/migrator.js | 52 ++++++++++++++++++++++++++++++++ pages/api/v1/migrations/index.js | 27 ++--------------- 2 files changed, 55 insertions(+), 24 deletions(-) create mode 100644 models/migrator.js diff --git a/models/migrator.js b/models/migrator.js new file mode 100644 index 0000000..4c6e952 --- /dev/null +++ b/models/migrator.js @@ -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; diff --git a/pages/api/v1/migrations/index.js b/pages/api/v1/migrations/index.js index 9be29bb..4adaae0 100644 --- a/pages/api/v1/migrations/index.js +++ b/pages/api/v1/migrations/index.js @@ -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);