Files
crm.stream.graff.tech/server/scripts/migrate-builds-to-company-build.ts
T

68 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
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.
/**
* Миграция: создание связей CompanyBuild из старых Build с companyId
*
* Запуск: npx ts-node --esm scripts/migrate-builds-to-company-build.ts
* (из папки server, с загруженным .env)
*/
import "dotenv/config";
import mongoose from "mongoose";
import Build from "../src/models/Build.js";
import CompanyBuild from "../src/models/CompanyBuild.js";
async function migrate() {
await mongoose.connect(process.env.MONGO_URI!, { dbName: "crm_stream" });
console.log("MongoDB connected");
const db = mongoose.connection.db;
if (!db) throw new Error("No database connection");
const buildsCollection = db.collection("builds");
const buildsWithCompany = await buildsCollection
.find({ companyId: { $exists: true, $ne: null } })
.toArray();
console.log(`Найдено ${buildsWithCompany.length} сборок с companyId`);
let created = 0;
let skipped = 0;
for (const build of buildsWithCompany) {
const companyId = build.companyId;
const buildId = build._id;
const existing = await CompanyBuild.findOne({
companyId,
buildId,
});
if (existing) {
skipped++;
continue;
}
await CompanyBuild.create({
companyId: new mongoose.Types.ObjectId(companyId.toString()),
buildId: new mongoose.Types.ObjectId(buildId.toString()),
});
created++;
console.log(` Создана связь: company ${companyId} -> build ${buildId}`);
}
console.log(`\nГотово. Создано: ${created}, пропущено (уже есть): ${skipped}`);
// Удаляем companyId из документов Build (опционально, для консистентности)
const unsetResult = await buildsCollection.updateMany(
{ companyId: { $exists: true } },
{ $unset: { companyId: "" } }
);
console.log(`Удалено поле companyId из ${unsetResult.modifiedCount} документов Build`);
await mongoose.disconnect();
process.exit(0);
}
migrate().catch((err) => {
console.error(err);
process.exit(1);
});