From f02a0868a4133ced7d29e9aee9fc507ac573c0a9 Mon Sep 17 00:00:00 2001 From: Seazn Date: Sun, 15 Mar 2026 01:11:29 +0100 Subject: [PATCH] feat: implement createGuestUser function for guest user management --- scripts/createGuestUser.js | 98 ++++++++++++++++++++++++++++++++++++++ server.js | 4 ++ 2 files changed, 102 insertions(+) create mode 100644 scripts/createGuestUser.js diff --git a/scripts/createGuestUser.js b/scripts/createGuestUser.js new file mode 100644 index 0000000..f25d0de --- /dev/null +++ b/scripts/createGuestUser.js @@ -0,0 +1,98 @@ +const UnitOfWork = require('../database/UnitOfWork'); +const argon2 = require('argon2'); + +async function createGuestUser() { + + // Edit these values directly in code (no env vars) + const guestEmail = 'dummy-guest@profitplanet.local'; + const guestPassword = 'dummyPass!1234'; + const firstName = 'Guest'; + const lastName = 'User'; + + const uow = new UnitOfWork(); + await uow.start(); + try { + const [existing] = await uow.connection.query( + `SELECT id FROM users WHERE email = ? LIMIT 1`, + [guestEmail] + ); + + const hashed = await argon2.hash(guestPassword); + let userId; + + if (existing.length) { + userId = existing[0].id; + await uow.connection.query( + `UPDATE users SET password = ?, user_type = 'personal', role = 'guest' WHERE id = ?`, + [hashed, userId] + ); + // Ensure personal_profile exists + const [profileExists] = await uow.connection.query( + `SELECT 1 FROM personal_profiles WHERE user_id = ? LIMIT 1`, [userId] + ); + if (!profileExists.length) { + await uow.connection.query( + `INSERT INTO personal_profiles (user_id, first_name, last_name) VALUES (?, ?, ?)`, + [userId, firstName, lastName] + ); + } + // Fix status: active, admin verified, email NOT verified (must verify on first login) + await uow.connection.query( + `UPDATE user_status SET status = 'active', is_admin_verified = 1, email_verified = 0, + profile_completed = 1, documents_uploaded = 1, contract_signed = 1, registration_completed = 1 + WHERE user_id = ?`, + [userId] + ); + console.log('✅ Guest user updated (password, role, status fixed)'); + } else { + // Create base user record — user_type='personal', role='guest' + // (same pattern as GuestUserService) + const [userRes] = await uow.connection.query( + `INSERT INTO users (email, password, user_type, role, created_at) VALUES (?, ?, 'personal', 'guest', NOW())`, + [guestEmail, hashed] + ); + userId = userRes.insertId; + + // Create personal profile (required for login to return name fields) + await uow.connection.query( + `INSERT INTO personal_profiles (user_id, first_name, last_name) VALUES (?, ?, ?)`, + [userId, firstName, lastName] + ); + + // Initialize user status — active, admin verified + // email_verified = FALSE so the guest must verify email on first login + await uow.connection.query( + `INSERT INTO user_status (user_id, status, is_admin_verified, admin_verified_at, + email_verified, profile_completed, documents_uploaded, contract_signed, registration_completed) + VALUES (?, 'active', 1, NOW(), 0, 1, 1, 1, 1)`, + [userId] + ); + + // Initialize user settings + await uow.connection.query( + `INSERT INTO user_settings (user_id) VALUES (?)`, + [userId] + ); + + console.log('✅ Guest user created and initialized'); + } + + await uow.commit(); + console.log(`📧 Email: ${guestEmail}`); + console.log(`🔑 Password: ${guestPassword}`); + console.log(`🆔 User ID: ${userId}`); + return { ok: true, userId, email: guestEmail }; + } catch (error) { + await uow.rollback(error); + console.error('💥 Failed to create guest user:', error); + throw error; + } +} + +module.exports = createGuestUser; + +if (require.main === module) { + createGuestUser() + .then(() => process.exit(0)) + .catch(() => process.exit(1)); +} diff --git a/server.js b/server.js index e8bf538..2775007 100644 --- a/server.js +++ b/server.js @@ -13,6 +13,7 @@ const permissionsInit = require('./scripts/initPermissions'); const createAdminUser = require('./scripts/createAdminUser'); const createCompanyUser = require('./scripts/createCompanyUser'); const createPersonalUser = require('./scripts/createPersonalUser'); +const createGuestUser = require('./scripts/createGuestUser'); const app = express(); const PORT = process.env.PORT || 3001; @@ -183,6 +184,9 @@ async function startServer() { // Create personal user await createPersonalUser(); + // Create guest user + await createGuestUser(); + // Start the server app.listen(PORT, () => { const host = process.env.HOST || 'localhost';