const mongoose = require('../../../utils/mongoose'); require('dotenv').config(); // Импорт моделей const User = require('../models/User'); const Company = require('../models/Company'); const Request = require('../models/Request'); // Подключение к MongoDB происходит через server/utils/mongoose.ts // Проверяем, подключено ли уже const ensureConnection = async () => { if (mongoose.connection.readyState === 1) { console.log('✅ MongoDB уже подключено'); return; } console.log('⏳ Ожидание подключения к MongoDB...'); await new Promise((resolve) => { if (mongoose.connection.readyState === 1) { resolve(); } else { mongoose.connection.once('connected', resolve); } }); console.log('✅ Подключено к MongoDB'); }; const recreateTestUser = async () => { try { await ensureConnection(); const presetCompanyId = new mongoose.Types.ObjectId('68fe2ccda3526c303ca06796'); const presetUserEmail = 'admin@test-company.ru'; const presetCompanyId2 = new mongoose.Types.ObjectId('68fe2ccda3526c303ca06797'); const presetUserEmail2 = 'manager@partner-company.ru'; // Удалить старых тестовых пользователей console.log('🗑️ Удаление старых тестовых пользователей...'); const testEmails = [presetUserEmail, presetUserEmail2]; for (const email of testEmails) { const oldUser = await User.findOne({ email }); if (oldUser) { // Удалить связанную компанию if (oldUser.companyId) { await Company.findByIdAndDelete(oldUser.companyId); console.log(` ✓ Старая компания для ${email} удалена`); } await User.findByIdAndDelete(oldUser._id); console.log(` ✓ Старый пользователь ${email} удален`); } else { console.log(` ℹ️ Пользователь ${email} не найден`); } } // Создать новую компанию с правильной кодировкой UTF-8 console.log('\n🏢 Создание тестовой компании...'); const company = await Company.create({ _id: presetCompanyId, fullName: 'ООО "Тестовая Компания"', shortName: 'Тестовая Компания', inn: '1234567890', ogrn: '1234567890123', legalForm: 'ООО', industry: 'IT', companySize: '51-250', website: 'https://test-company.ru', phone: '+7 (999) 123-45-67', email: 'info@test-company.ru', description: 'Тестовая компания для разработки', legalAddress: 'г. Москва, ул. Тестовая, д. 1', actualAddress: 'г. Москва, ул. Тестовая, д. 1', foundedYear: 2015, employeeCount: '51-250', revenue: 'До 120 млн ₽', rating: 4.5, reviews: 10, verified: true, partnerGeography: ['moscow', 'russia_all'], slogan: 'Ваш надежный партнер в IT', }); console.log(' ✓ Компания создана:', company.fullName); // Создать первого пользователя с правильной кодировкой UTF-8 console.log('\n👤 Создание первого тестового пользователя...'); const user = await User.create({ email: presetUserEmail, password: 'SecurePass123!', firstName: 'Иван', lastName: 'Иванов', position: 'Директор', phone: '+7 (999) 123-45-67', companyId: company._id, }); console.log(' ✓ Пользователь создан:', user.firstName, user.lastName); // Создать вторую компанию console.log('\n🏢 Создание второй тестовой компании...'); const company2 = await Company.create({ _id: presetCompanyId2, fullName: 'ООО "Партнер"', shortName: 'Партнер', inn: '9876543210', ogrn: '1089876543210', legalForm: 'ООО', industry: 'Торговля', companySize: '11-50', website: 'https://partner-company.ru', phone: '+7 (495) 987-65-43', email: 'info@partner-company.ru', description: 'Надежный партнер для бизнеса', legalAddress: 'г. Санкт-Петербург, пр. Невский, д. 100', actualAddress: 'г. Санкт-Петербург, пр. Невский, д. 100', foundedYear: 2018, employeeCount: '11-50', revenue: 'До 60 млн ₽', rating: 4.3, reviews: 5, verified: true, partnerGeography: ['spb', 'russia_all'], slogan: 'Качество и надежность', }); console.log(' ✓ Компания создана:', company2.fullName); // Создать второго пользователя console.log('\n👤 Создание второго тестового пользователя...'); const user2 = await User.create({ email: presetUserEmail2, password: 'SecurePass123!', firstName: 'Петр', lastName: 'Петров', position: 'Менеджер', phone: '+7 (495) 987-65-43', companyId: company2._id, }); console.log(' ✓ Пользователь создан:', user2.firstName, user2.lastName); // Проверка что данные сохранены правильно console.log('\n✅ Проверка данных:'); console.log('\n Пользователь 1:'); console.log(' Email:', user.email); console.log(' Имя:', user.firstName); console.log(' Фамилия:', user.lastName); console.log(' Компания:', company.fullName); console.log(' Должность:', user.position); console.log('\n Пользователь 2:'); console.log(' Email:', user2.email); console.log(' Имя:', user2.firstName); console.log(' Фамилия:', user2.lastName); console.log(' Компания:', company2.fullName); console.log(' Должность:', user2.position); console.log('\n✅ ГОТОВО! Тестовые пользователи созданы с правильной кодировкой UTF-8'); console.log('\n📋 Данные для входа:'); console.log('\n Пользователь 1:'); console.log(' Email: admin@test-company.ru'); console.log(' Пароль: SecurePass123!'); console.log('\n Пользователь 2:'); console.log(' Email: manager@partner-company.ru'); console.log(' Пароль: SecurePass123!'); console.log(''); // Создать дополнительные тестовые компании для поиска console.log('\n🏢 Создание дополнительных тестовых компаний...'); const testCompanies = [ { fullName: 'ООО "ТехноСтрой"', shortName: 'ТехноСтрой', inn: '7707083894', ogrn: '1077707083894', legalForm: 'ООО', industry: 'Строительство', companySize: '51-250', website: 'https://technostroy.ru', phone: '+7 (495) 111-22-33', email: 'info@technostroy.ru', description: 'Строительство промышленных объектов', foundedYear: 2010, employeeCount: '51-250', revenue: 'До 2 млрд ₽', rating: 4.2, reviews: 15, verified: true, partnerGeography: ['moscow', 'russia_all'], slogan: 'Строим будущее вместе', }, { fullName: 'АО "ФинансГрупп"', shortName: 'ФинансГрупп', inn: '7707083895', ogrn: '1077707083895', legalForm: 'АО', industry: 'Финансы', companySize: '500+', website: 'https://finansgrupp.ru', phone: '+7 (495) 222-33-44', email: 'contact@finansgrupp.ru', description: 'Финансовые услуги для бизнеса', foundedYear: 2005, employeeCount: '500+', revenue: 'Более 2 млрд ₽', rating: 4.8, reviews: 50, verified: true, partnerGeography: ['moscow', 'russia_all', 'international'], slogan: 'Финансовая стабильность', }, { fullName: 'ООО "ИТ Решения"', shortName: 'ИТ Решения', inn: '7707083896', ogrn: '1077707083896', legalForm: 'ООО', industry: 'IT', companySize: '11-50', website: 'https://it-solutions.ru', phone: '+7 (495) 333-44-55', email: 'hello@it-solutions.ru', description: 'Разработка программного обеспечения', foundedYear: 2018, employeeCount: '11-50', revenue: 'До 60 млн ₽', rating: 4.5, reviews: 8, verified: true, partnerGeography: ['moscow', 'spb', 'russia_all'], slogan: 'Инновации для вашего бизнеса', }, { fullName: 'ООО "ЛогистикПро"', shortName: 'ЛогистикПро', inn: '7707083897', ogrn: '1077707083897', legalForm: 'ООО', industry: 'Логистика', companySize: '51-250', website: 'https://logistikpro.ru', phone: '+7 (495) 444-55-66', email: 'info@logistikpro.ru', description: 'Транспортные и логистические услуги', foundedYear: 2012, employeeCount: '51-250', revenue: 'До 120 млн ₽', rating: 4.3, reviews: 20, verified: true, partnerGeography: ['russia_all', 'cis'], slogan: 'Доставим в срок', }, { fullName: 'ООО "ПродуктТрейд"', shortName: 'ПродуктТрейд', inn: '7707083898', ogrn: '1077707083898', legalForm: 'ООО', industry: 'Оптовая торговля', companySize: '251-500', website: 'https://produkttrade.ru', phone: '+7 (495) 555-66-77', email: 'sales@produkttrade.ru', description: 'Оптовая торговля продуктами питания', foundedYear: 2008, employeeCount: '251-500', revenue: 'До 2 млрд ₽', rating: 4.1, reviews: 30, verified: true, partnerGeography: ['moscow', 'russia_all'], slogan: 'Качество и надежность', }, { fullName: 'ООО "МедСервис"', shortName: 'МедСервис', inn: '7707083899', ogrn: '1077707083899', legalForm: 'ООО', industry: 'Здравоохранение', companySize: '11-50', website: 'https://medservice.ru', phone: '+7 (495) 666-77-88', email: 'info@medservice.ru', description: 'Медицинские услуги и оборудование', foundedYear: 2016, employeeCount: '11-50', revenue: 'До 60 млн ₽', rating: 4.6, reviews: 12, verified: true, partnerGeography: ['moscow', 'central'], slogan: 'Забота о вашем здоровье', }, ]; for (const companyData of testCompanies) { await Company.updateOne( { inn: companyData.inn }, { $set: companyData }, { upsert: true } ); console.log(` ✓ Компания создана/обновлена: ${companyData.shortName}`); } // Создать тестовые запросы console.log('\n📨 Создание тестовых запросов...'); await Request.deleteMany({}); const companies = await Company.find().limit(10).exec(); const testCompanyId = company._id.toString(); const requests = []; const now = new Date(); // Создаем отправленные запросы (от тестовой компании) for (let i = 0; i < 5; i++) { const recipientCompany = companies[i % companies.length]; if (recipientCompany._id.toString() === testCompanyId) { continue; } const createdAt = new Date(now.getTime() - i * 24 * 60 * 60 * 1000); requests.push({ senderCompanyId: testCompanyId, recipientCompanyId: recipientCompany._id.toString(), subject: `Запрос на поставку ${i + 1}`, text: `Здравствуйте! Интересует поставка товаров/услуг. Запрос ${i + 1}. Прошу предоставить коммерческое предложение.`, files: [], responseFiles: [], status: i % 3 === 0 ? 'accepted' : i % 3 === 1 ? 'rejected' : 'pending', response: i % 3 === 0 ? 'Благодарим за запрос! Готовы предоставить услуги. Отправили КП на почту.' : i % 3 === 1 ? 'К сожалению, в данный момент не можем предоставить эти услуги.' : null, respondedAt: i % 3 !== 2 ? new Date(createdAt.getTime() + 2 * 60 * 60 * 1000) : null, createdAt, updatedAt: i % 3 !== 2 ? new Date(createdAt.getTime() + 2 * 60 * 60 * 1000) : createdAt, }); } // Создаем полученные запросы (к тестовой компании) for (let i = 0; i < 3; i++) { const senderCompany = companies[(i + 2) % companies.length]; if (senderCompany._id.toString() === testCompanyId) { continue; } const createdAt = new Date(now.getTime() - (i + 1) * 12 * 60 * 60 * 1000); requests.push({ senderCompanyId: senderCompany._id.toString(), recipientCompanyId: testCompanyId, subject: `Предложение о сотрудничестве ${i + 1}`, text: `Добрый день! Предлагаем сотрудничество. Запрос ${i + 1}. Заинтересованы в вашей продукции.`, files: [], responseFiles: [], status: 'pending', response: null, respondedAt: null, createdAt, updatedAt: createdAt, }); } if (requests.length > 0) { await Request.insertMany(requests); console.log(` ✓ Создано ${requests.length} тестовых запросов`); } await mongoose.connection.close(); process.exit(0); } catch (error) { console.error('\n❌ Ошибка:', error.message); console.error(error); process.exit(1); } }; // Запуск recreateTestUser();