/*const { CloudQuery, CloudObject } = require("../lib/ncloud"); const { QuestionnaireResultList, QuestionnaireList, QuestionList, OptionList, UserInterestProfileList } = require("./data"); importData(); let DataMap = { QuestionnaireResult: {}, Questionnaire: {}, Question: {}, Option: {}, UserInterestProfile: {} } async function importData() { // 导入问卷结果数据 let questionnaireResultList = QuestionnaireResultList; for (let index = 0; index < questionnaireResultList.length; index++) { let result = questionnaireResultList[index]; result = await importObject("QuestionnaireResult", result); } // 导入问卷数据 let questionnaireList = QuestionnaireList; for (let index = 0; index < questionnaireList.length; index++) { let questionnaire = questionnaireList[index]; questionnaire = await importObject("Questionnaire", questionnaire); } // 导入问题数据 let questionList = QuestionList; for (let index = 0; index < questionList.length; index++) { let question = questionList[index]; question = await importObject("Question", question); } // 导入选项数据 let optionList = OptionList; for (let index = 0; index < optionList.length; index++) { let option = optionList[index]; option = await importObject("Option", option); } // 导入用户兴趣画像数据 let userInterestProfileList = UserInterestProfileList; for (let index = 0; index < userInterestProfileList.length; index++) { let profile = userInterestProfileList[index]; profile = await importObject("UserInterestProfile", profile); } // console.log(DataMap) } async function importObject(className, data) { // 获取类名对应的 ID 字段名称(如 OptionId, QuestionnaireId 等) let idField = `${className}Id`; let srcId = data[idField]; // 使用 classnameId 作为 srcId 的值 // 查重:查找是否已经存在相同 srcId 的数据 let query = new CloudQuery(className); query.equalTo("srcId", srcId); let importObj = await query.first(); console.log(importObj); // 导入前批量处理 Pointer 类型数据,进行重定向 Object.keys(data)?.forEach(key => { let field = data[key]; let fieldSrcId = field?.objectId || field?.OptionId || field?.QuestionId || field?.UserInterestProfileId; if (fieldSrcId) { // 是 Pointer 类型 if (key === "userId" || key === "questionnaireId" || key === "questionId") { // 确保插入的是一个 Pointer 对象,而不是直接的 id data[key] = { "__type": "Pointer", "className": key.replace("Id", ""), "objectId": DataMap?.[key.replace("Id", "")]?.[fieldSrcId]?.id || fieldSrcId }; } else if (Array.isArray(field)) { data[key] = field.map(item => { return { "__type": "Pointer", "className": item.className, "objectId": DataMap?.[item.className]?.[item.objectId]?.id || item.objectId }; }); } } }); // 若未添加,则创建新对象并保存 if (!importObj?.id) { importObj = new CloudObject(className); } // 保存或更新数据 data.srcId = srcId; // 将 srcId 设置为与 classnameId 相同的值 importObj.set(data); importObj = await importObj.save(); // 更新 DataMap,确保 srcId 和 classnameId 保持一致 DataMap[className][srcId] = importObj; } // 展示当前问卷内的问题及其选项 async function displayQuestionnaireDetails(questionnaireId) { // 查询问卷 let questionnaireQuery = new CloudQuery("Questionnaire"); questionnaireQuery.equalTo("objectId", questionnaireId); let questionnaire = await questionnaireQuery.first(); // 检查问卷是否存在 if (!questionnaire) { console.log("问卷未找到,无法展示问题和选项。"); return; } console.log(`问卷标题: ${questionnaire.title}`); console.log(`问卷状态: ${questionnaire.status}`); console.log("问题列表:"); // 查询问题 let questionQuery = new CloudQuery("Question"); questionQuery.equalTo("questionnaireId", { "__type": "Pointer", "className": "Questionnaire", "objectId": questionnaireId }); let questions = await questionQuery.find(); // 检查是否有问题 if (questions.length === 0) { console.log("当前问卷没有问题。"); return; } // 遍历问题并查询选项 for (let question of questions) { // 检查问题是否存在 if (!question) { console.log("问题未找到,无法展示选项。"); continue; // 跳过当前循环,继续下一个问题 } console.log(` 问题: ${question.questionText}`); // 查询选项 let optionQuery = new CloudQuery("Option"); optionQuery.equalTo("questionId", { "__type": "Pointer", "className": "Question", "objectId": question.objectId }); let options = await optionQuery.find(); // 输出选项 console.log(" 选项:"); if (options.length === 0) { console.log(" - 此问题没有选项。"); } else { for (let option of options) { console.log(` - ${option.optionText} (已选: ${option.isSelected})`); } } console.log(""); // 添加空行以便于阅读 } } // 示例调用 displayQuestionnaireDetails("jbg6EYXk3G"); */ const { CloudQuery, CloudObject } = require("../lib/ncloud"); const { QuestionnaireResultList, QuestionnaireList, QuestionList, OptionList, UserInterestProfileList, WorkList, CommentList } = require("./data"); importData(); let DataMap = { QuestionnaireResult: {}, Questionnaire: {}, Question: {}, Option: {}, UserInterestProfile: {}, Work: {}, Comment: {} }; async function importData() { // 确保 UserInterestProfileList 已经加载 if (!UserInterestProfileList || UserInterestProfileList.length === 0) { console.log("UserInterestProfileList 数据为空或未定义!"); return; } /* // 导入问卷结果数据 let questionnaireResultList = QuestionnaireResultList; for (let index = 0; index < questionnaireResultList.length; index++) { let result = questionnaireResultList[index]; result = await importObject("QuestionnaireResult", result); } // 导入问卷数据 let questionnaireList = QuestionnaireList; for (let index = 0; index < questionnaireList.length; index++) { let questionnaire = questionnaireList[index]; questionnaire = await importObject("Questionnaire", questionnaire); } // 导入问题数据 let questionList = QuestionList; for (let index = 0; index < questionList.length; index++) { let question = questionList[index]; question = await importObject("Question", question); } // 导入选项数据 let optionList = OptionList; for (let index = 0; index < optionList.length; index++) { let option = optionList[index]; option = await importObject("Option", option); } // 导入用户兴趣画像数据 let userInterestProfileList = UserInterestProfileList; for (let index = 0; index < userInterestProfileList.length; index++) { let profile = userInterestProfileList[index]; profile = await importObject("UserInterestProfile", profile); }*/ // 导入Work数据 let workList = WorkList; // 假设 WorkList 是包含工作数据的数组 for (let index = 0; index < workList.length; index++) { let work = workList[index]; work = await importObject("Work", work); } /* // 导入Comment数据 let commentList = CommentList; // 假设 CommentList 是包含评论数据的数组 for (let index = 0; index < commentList.length; index++) { let comment = commentList[index]; comment = await importObject("Comment", comment); }*/ // console.log(DataMap); } async function importObject(className, data) { // 获取类名对应的 ID 字段名称(如 OptionId, QuestionnaireId 等) let idField = `${className}Id`; let srcId = data[idField]; // 使用 classnameId 作为 srcId 的值 // 查重:查找是否已经存在相同 srcId 的数据 let query = new CloudQuery(className); query.equalTo("srcId", srcId); let importObj = await query.first(); console.log(importObj); // 导入前批量处理 Array 类型数据,进行重定向 Object.keys(data)?.forEach(key => { let field = data[key]; let fieldSrcId = field?.objectId || field?.OptionId || field?.QuestionId || field?.UserInterestProfileId || field?.workId || field?.commentId;; if (fieldSrcId) { // 是 Pointer 类型的字段 if (key === "userIds" || key === "questionnaireIds" || key === "questionIds") { // 确保插入的是一个数组而不是 Pointer 对象 data[key] = Array.isArray(field) ? field.map(item => { return { className: item.className, srcId: DataMap?.[item.className]?.[item.srcId]?.id || item.srcId }; }) : [{ className: key.replace("Ids", ""), srcId: DataMap?.[key.replace("Ids", "")]?.[fieldSrcId]?.id || fieldSrcId }]; } else if (Array.isArray(field)) { data[key] = field.map(item => { return { className: item.className, srcId: DataMap?.[item.className]?.[item.srcId]?.id || item.srcId }; }); } } }); // 若未添加,则创建新对象并保存 if (!importObj?.id) { importObj = new CloudObject(className); } // 保存或更新数据 data.srcId = srcId; // 将 srcId 设置为与 classnameId 相同的值 importObj.set(data); importObj = await importObj.save(); // 更新 DataMap,确保 srcId 和 classnameId 保持一致 DataMap[className][srcId] = importObj; } // 展示当前问卷内的问题及其选项 async function displayQuestionnaireDetails(questionnaireId) { // 查询问卷 let questionnaireQuery = new CloudQuery("Questionnaire"); questionnaireQuery.equalTo("QuestionnaireId", questionnaireId); // 使用 QuestionnaireId 查询 let questionnaire = await questionnaireQuery.first(); // 检查问卷是否存在 if (!questionnaire) { console.log("问卷未找到,无法展示问题和选项。"); return; } console.log(`问卷标题: ${questionnaire.get('title')}`); console.log(`问卷状态: ${questionnaire.get('status')}`); console.log("问题列表:"); // 获取问题 IDs(数组字段) let questionIds = questionnaire.get('questions'); // 查询所有相关问题 let questionQuery = new CloudQuery("Question"); questionQuery.containedIn("QuestionId", questionIds); // 查询 QuestionId 在问题 ID 列表中的问题 let questions = await questionQuery.find(); // 检查是否有问题 if (questions.length === 0) { console.log("当前问卷没有问题。"); return; } // 遍历问题并查询选项 for (let question of questions) { // 检查问题是否存在 if (!question) { console.log("问题未找到,无法展示选项。"); continue; // 跳过当前循环,继续下一个问题 } console.log(` 问题: ${question.questionText}`); // 获取问题中的选项 IDs(数组字段) let optionIds = question.options; // 查询所有相关选项 let optionQuery = new CloudQuery("Option"); optionQuery.containedIn("OptionId", optionIds); // 查询 OptionId 在选项 ID 列表中的选项 let options = await optionQuery.find(); // 输出选项 console.log(" 选项:"); if (options.length === 0) { console.log(" - 此问题没有选项。"); } else { for (let option of options) { console.log(` - ${option.optionText} (已选: ${option.isSelected ? "是" : "否"})`); } } console.log(""); // 添加空行以便于阅读 } } // 展示帖子以及其评论的函数 async function displayWorkDetails(workId) { // 查询帖子数据 let workQuery = new CloudQuery("Work"); workQuery.equalTo("WorkId", workId); // 使用 WorkId 查询 let work = await workQuery.first(); // 检查帖子是否存在 if (!work) { console.log("帖子未找到,无法展示详情。"); return; } console.log(`帖子标题: ${work.get('title')}`); console.log(`帖子描述: ${work.get('description')}`); console.log(`点赞数: ${work.get('likesCount')}`); console.log(`评论数: ${work.get('commentsCount')}`); console.log("评论列表:"); // 获取评论 IDs(数组字段) let commentIds = work.get('comments'); // 查询所有相关评论 let commentQuery = new CloudQuery("Comment"); commentQuery.containedIn("CommentId", commentIds); // 查询 CommentId 在评论 ID 列表中的评论 let comments = await commentQuery.find(); // 检查是否有评论 if (comments.length === 0) { console.log("当前帖子没有评论。"); return; } // 输出评论 for (let comment of comments) { // 打印评论对象,检查结构 console.log(comment); // 打印出完整的评论对象 // 如果是 CloudObject,使用 get 方法 if (comment instanceof CloudObject) { console.log(` 评论人: ${comment.get('userName')}`); console.log(` 评论内容: ${comment.get('description')}`); console.log(` 评论点赞数: ${comment.get('likesCount')}`); console.log(` 评论时间: ${comment.get('createdAt')}`); } else { // 否则,直接使用属性 console.log(` 评论人: ${comment.userName}`); console.log(` 评论内容: ${comment.description}`); console.log(` 评论点赞数: ${comment.likesCount}`); console.log(` 评论时间: ${comment.createdAt}`); } console.log(""); // 添加空行以便于阅读 } } // 示例调用 //displayQuestionnaireDetails("q1"); // 示例调用 displayWorkDetails("w4");