comty/packages/server/services/main/fixments/migrate_posts_likes.js
2024-03-06 19:43:09 +00:00

96 lines
2.5 KiB
JavaScript
Executable File

require("dotenv").config()
import fs from "fs"
import path from "path"
import { Post, PostLike } from "@db_models"
import { performance } from "perf_hooks"
import DBManager from "../classes/DbManager"
const logBuffer = []
function log(...args) {
console.log(...args)
logBuffer.push(`[${new Date().toISOString()}] | ${args.join(" ")}`)
}
process.on("unhandledRejection", (reason, promise) => {
log("🆘 Unhandled Rejection at:", promise, "reason:", reason)
writeLog()
process.exit(1)
})
process.on("uncaughtException", (err) => {
log("🆘 Uncaught Exception at:", err)
writeLog()
process.exit(1)
})
function writeLog() {
fs.writeFileSync(path.resolve(process.cwd(), `migrate_posts_likes.${new Date().getTime()}.log`), logBuffer.join("\n"))
}
async function main() {
const dbManager = new DBManager()
await dbManager.connect()
log(`Starting migration...`)
const posts = await Post.find({}).catch(() => false)
log(`✅ Found ${posts.length} posts`)
for await (let post of posts) {
let postData = post
log(`➡️ Migrating post likes of [${post._id}]...`)
const postMigrationStartTime = performance.now()
if (postData["likes"]) {
// create a PostLike for each like
for await (let like of postData["likes"]) {
try {
// check if the PostLike already exists
let likeObj = await PostLike.findOne({
post_id: post._id,
user_id: like,
}).catch(() => false)
if (likeObj) {
log(`🔗 PostLike for [${like}] already exists, skipping...`)
continue
}
log(`🔗 Creating PostLike for [${like}]...`)
likeObj = new PostLike({
post_id: post._id,
user_id: like,
})
await likeObj.save()
log(`🔗✅ Created PostLike for [${like}]`)
} catch (error) {
log(`🔗❌ Error while creating PostLike for [${like}]:`, error)
}
}
}
const postMigrationEndTime = performance.now()
log(`⏱️ Post likes migration of [${post._id}] took ${postMigrationEndTime - postMigrationStartTime}ms`)
}
log(`✅ Migrated ${posts.length} posts`)
writeLog()
}
main()