Files
multy-stub/server/routers/procurement/scripts/recreate-test-user.js

383 lines
15 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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();