JEISA-WEBAPP/setup-users.js

105 lines
3.1 KiB
JavaScript
Raw Normal View History

2025-09-24 22:15:35 +00:00
import PocketBase from 'pocketbase';
const pb = new PocketBase(process.env.VITE_PB_URL || 'http://127.0.0.1:8090');
// Never let the SDK auto-cancel a request (see src/lib/pocketbase.ts).
pb.autoCancellation(false);
2025-09-24 22:15:35 +00:00
async function ensureUsersCollection() {
try {
// If it exists, this will succeed
await pb.collections.getOne('users');
console.log('ℹ️ Users collection already exists');
return;
} catch (_) {
// Try create if not exists
try {
const usersCollection = await pb.collections.create({
name: 'users',
type: 'auth',
schema: [
{ name: 'name', type: 'text', required: false, options: { max: 100 } },
{ name: 'role', type: 'select', required: false, options: { maxSelect: 1, values: ['admin', 'manager', 'employee'] } },
{ name: 'active', type: 'bool', required: false },
],
// keep open for setup; tighten later in UI
listRule: null,
viewRule: null,
createRule: null,
updateRule: null,
deleteRule: null,
});
console.log('✅ Users collection created:', usersCollection.name);
} catch (err) {
console.error('❌ Error creating users collection:', err?.message || err);
}
}
}
async function ensureUser(email, data) {
try {
const existing = await pb.collection('users').getFirstListItem(`email = "${email}"`);
if (existing) {
console.log(`ℹ️ User already exists: ${email}`);
return existing;
}
} catch (_) {
// not found -> proceed to create
}
try {
const record = await pb.collection('users').create(data);
console.log(`✅ Created user: ${email}`);
return record;
} catch (err) {
// Double-check if created despite error
try {
const created = await pb.collection('users').getFirstListItem(`email = "${email}"`);
if (created) {
console.log(`✅ User is present after error (treated as success): ${email}`);
return created;
}
} catch (_) {}
console.error(`❌ Error creating user ${email}:`, err?.message || err);
throw err;
}
}
async function setupDemoUser() {
try {
console.log('🔐 Setting up demo user...');
// First authenticate as admin
await pb.admins.authWithPassword('david@wfsales.co.za', '1234567890');
console.log('✅ Admin authenticated');
await ensureUsersCollection();
await ensureUser('admin@jei.com', {
email: 'admin@jei.com',
password: 'password123',
passwordConfirm: 'password123',
name: 'Admin User',
role: 'admin',
active: true,
});
await ensureUser('manager@jei.com', {
email: 'manager@jei.com',
password: 'password123',
passwordConfirm: 'password123',
name: 'Manager User',
role: 'manager',
active: true,
});
console.log('\n🎉 Setup complete! You can now login with:');
console.log('Admin: admin@jei.com / password123');
console.log('Manager: manager@jei.com / password123');
} catch (error) {
console.error('❌ Setup failed:', error.message);
}
}
setupDemoUser();