Files
filezzy-staging/backend/delete-test-user.ts
2026-02-04 14:16:04 +01:00

93 lines
2.6 KiB
TypeScript

import { prisma } from './src/config/database';
import { keycloakClient } from './src/clients/keycloak.client';
async function main() {
const email = 'abdelaziz.azouhri@gmail.com';
console.log(`\n=== Deleting user: ${email} ===`);
// Find user
const user = await prisma.user.findUnique({
where: { email },
});
if (!user) {
console.log('❌ User not found in database');
return;
}
console.log('✅ User found in database:', user.id);
console.log(' Keycloak ID:', user.keycloakId);
console.log('Deleting user from Keycloak and database...\n');
// FIRST: Delete from Keycloak
if (user.keycloakId) {
try {
await keycloakClient.deleteUser(user.keycloakId);
console.log('✅ Deleted user from Keycloak');
} catch (error: any) {
console.log('⚠️ Failed to delete from Keycloak:', error.message);
console.log(' Continuing with database deletion...');
}
} else {
console.log('⚠️ No Keycloak ID found, skipping Keycloak deletion');
}
console.log('\nDeleting user data from database...');
// Delete in order to respect foreign key constraints
// 1. Delete email tokens
const emailTokens = await prisma.emailToken.deleteMany({
where: { userId: user.id },
});
console.log(`✅ Deleted ${emailTokens.count} email tokens`);
// 2. Delete email logs
const emailLogs = await prisma.emailLog.deleteMany({
where: { userId: user.id },
});
console.log(`✅ Deleted ${emailLogs.count} email logs`);
// 3. Delete sessions
const sessions = await prisma.session.deleteMany({
where: { userId: user.id },
});
console.log(`✅ Deleted ${sessions.count} sessions`);
// 4. Delete auth events
const authEvents = await prisma.authEvent.deleteMany({
where: { userId: user.id },
});
console.log(`✅ Deleted ${authEvents.count} auth events`);
// 5. Delete jobs
const jobs = await prisma.job.deleteMany({
where: { userId: user.id },
});
console.log(`✅ Deleted ${jobs.count} jobs`);
// 6. Delete subscriptions
const subscriptions = await prisma.subscription.deleteMany({
where: { userId: user.id },
});
console.log(`✅ Deleted ${subscriptions.count} subscriptions`);
// 7. Finally, delete the user
await prisma.user.delete({
where: { id: user.id },
});
console.log(`✅ Deleted user: ${email}`);
console.log('\n🎉 User and all related data deleted successfully!');
}
main()
.catch((e) => {
console.error('❌ Error:', e);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});