nuxt-users
Version:
A comprehensive user management module for Nuxt 3 and Nuxt 4 applications with authentication, authorization, database support, and CLI tools
64 lines (63 loc) • 2.38 kB
JavaScript
import { useDb } from "./db.js";
import { createUsersTable } from "./create-users-table.js";
import { createPersonalAccessTokensTable } from "./create-personal-access-tokens-table.js";
import { createPasswordResetTokensTable } from "./create-password-reset-tokens-table.js";
import { createMigrationsTable } from "./create-migrations-table.js";
const migrations = [
{
name: "create_migrations_table",
run: createMigrationsTable
},
{
name: "create_users_table",
run: createUsersTable
},
{
name: "create_personal_access_tokens_table",
run: createPersonalAccessTokensTable
},
{
name: "create_password_reset_tokens_table",
run: createPasswordResetTokensTable
}
];
export const getAppliedMigrations = async (options) => {
const db = await useDb(options);
try {
const result = await db.sql`SELECT name FROM migrations ORDER BY id`;
return result.rows.map((row) => row.name);
} catch {
return [];
}
};
export const markMigrationAsApplied = async (options, migrationName) => {
const db = await useDb(options);
await db.sql`INSERT INTO migrations (name) VALUES (${migrationName})`;
};
export const runMigrations = async (options) => {
console.log("[Nuxt Users] Starting migration system...");
await createMigrationsTable(options);
const appliedMigrations = await getAppliedMigrations(options);
console.log(`[Nuxt Users] Applied migrations: ${appliedMigrations.join(", ")}`);
const pendingMigrations = migrations.filter((migration) => !appliedMigrations.includes(migration.name));
if (pendingMigrations.length === 0) {
console.log("[Nuxt Users] No pending migrations to run.");
return;
}
console.log(`[Nuxt Users] Found ${pendingMigrations.length} pending migrations:`);
pendingMigrations.forEach((migration) => {
console.log(`[Nuxt Users] - ${migration.name}`);
});
for (const migration of pendingMigrations) {
console.log(`[Nuxt Users] Running migration: ${migration.name}`);
try {
await migration.run(options);
await markMigrationAsApplied(options, migration.name);
console.log(`[Nuxt Users] \u2713 Migration ${migration.name} successfull \u2705`);
} catch (error) {
console.error(`[Nuxt Users] \u2717 Migration ${migration.name} failed:`, error);
throw error;
}
}
console.log("[Nuxt Users] All migrations successfull \u2705");
};