feat: add promote admin script to manage user roles

This commit is contained in:
2026-03-01 23:38:39 +01:00
parent bbce1ff136
commit 7157e8c5a6
2 changed files with 56 additions and 0 deletions

View File

@@ -18,6 +18,7 @@
"db:studio": "drizzle-kit studio", "db:studio": "drizzle-kit studio",
"db:import": "npx tsx scripts/import-json.ts", "db:import": "npx tsx scripts/import-json.ts",
"db:set-daily-mode": "npx tsx scripts/set-daily-mode.ts", "db:set-daily-mode": "npx tsx scripts/set-daily-mode.ts",
"user:promote-admin": "npx tsx scripts/promote-admin.ts",
"auth:schema": "npx @better-auth/cli generate --config src/lib/server/auth.ts --output src/lib/server/db/auth.schema.ts --yes", "auth:schema": "npx @better-auth/cli generate --config src/lib/server/auth.ts --output src/lib/server/db/auth.schema.ts --yes",
"scrape": "npx tsx scripts/scrape-onepiece.ts" "scrape": "npx tsx scripts/scrape-onepiece.ts"
}, },

55
scripts/promote-admin.ts Normal file
View File

@@ -0,0 +1,55 @@
import { createClient } from '@libsql/client';
import { drizzle } from 'drizzle-orm/libsql';
import { eq } from 'drizzle-orm';
import { user } from '../src/lib/server/db/auth.schema';
const DATABASE_URL = process.env.DATABASE_URL || 'file:local.db';
function getErrorMessage(error: unknown): string {
return error instanceof Error ? error.message : String(error);
}
async function promoteAdmin(): Promise<void> {
const email = process.argv[2]?.trim();
if (!email) {
console.error('❌ Missing email argument');
console.error('Usage: npm run user:promote-admin -- <email>');
process.exit(1);
}
const client = createClient({ url: DATABASE_URL });
const db = drizzle(client);
try {
const existingUsers = await db.select().from(user).where(eq(user.email, email)).limit(1);
const targetUser = existingUsers[0];
if (!targetUser) {
console.error(`❌ User not found for email: ${email}`);
process.exit(1);
}
if (targetUser.isAdmin) {
console.log(` User is already admin: ${targetUser.email}`);
return;
}
await db
.update(user)
.set({ isAdmin: true })
.where(eq(user.id, targetUser.id));
console.log(`✅ Admin granted to: ${targetUser.email}`);
} catch (error) {
console.error(`❌ Failed to promote admin: ${getErrorMessage(error)}`);
process.exit(1);
} finally {
client.close();
}
}
promoteAdmin().catch((error) => {
console.error(getErrorMessage(error));
process.exit(1);
});