383 lines
15 KiB
JavaScript
383 lines
15 KiB
JavaScript
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();
|
||
|