yi 1 год назад
Родитель
Сommit
3a3e761968

+ 45 - 4
FilmDraw-server/lib/ncloud.js

@@ -5,7 +5,9 @@ class CloudObject{
     constructor(className){
         this.className = className
     }
-
+    toPointer(){
+        return {"__type":"Pointer","className":this.className,"objectId":this.id}
+    }
     set(json){
         Object.keys(json).forEach(key=>{
             if(["objectId","id","createdAt","updatedAt","ACL"].indexOf(key)>-1){
@@ -17,12 +19,13 @@ class CloudObject{
     get(key){
         return this.data[key] || null
     }
+    //保存(更新+创建)
     async save(){
         let method = "POST"
         let url = "http://dev.fmode.cn:1337/parse/classes/" + this.className
         // 更新
         if(this.id){
-            url = "/"+this.id
+            url += "/"+this.id+"?"
             method = "PUT"
         } 
         let body = JSON.stringify(this.data)
@@ -37,12 +40,16 @@ class CloudObject{
             "credentials": "omit"
           });
           let result = await response?.json();
+          if(result?.error){
+            console.error(result?.error)
+          };
           if(result?.objectId){this.id = result?.objectId}
           return this
     }
+    //删除 
     async destory(){
         if(!this.id) return
-        let response = await fetch("http://dev.fmode.cn:1337/parse/classes/Doctor/"+this.id, {
+        let response = await fetch("http://dev.fmode.cn:1337/parse/classes/"+this.className+"/"+this.id+"?", {
             "headers": {
               "x-parse-application-id": "dev"
             },
@@ -59,6 +66,7 @@ class CloudObject{
     }
 }
 
+//查询
 class CloudQuery{
     className
     constructor(className){
@@ -82,11 +90,14 @@ class CloudQuery{
         if(!this.whereOptions[key]) this.whereOptions[key] = {}
         this.whereOptions[key]["$lte"] = value
     }
+
     equalTo(key,value){
         this.whereOptions[key] = value
     }
 
+    //通过id查询    
     async get(id){
+        
         let url = "http://dev.fmode.cn:1337/parse/classes/"+this.className+"/"+id+"?"
 
         let response = await fetch(url, {
@@ -102,6 +113,8 @@ class CloudQuery{
         let json = await response?.json();
         return json || {}
     }
+  
+    //find查询
     async find(){
         let url = "http://dev.fmode.cn:1337/parse/classes/"+this.className+"?"
         
@@ -123,8 +136,36 @@ class CloudQuery{
         let json = await response?.json();
         return json?.results || []
     }
-    first(){
 
+    //只查询第一项
+    async first(){
+        let url = "http://dev.fmode.cn:1337/parse/classes/"+this.className+"?"
+        
+        if(Object.keys(this.whereOptions)?.length){
+            let whereStr = JSON.stringify(this.whereOptions)
+            url += `where=${whereStr}`
+        }
+
+        let response = await fetch(url, {
+            "headers": {
+            "if-none-match": "W/\"1f0-ghxH2EwTk6Blz0g89ivf2adBDKY\"",
+            "x-parse-application-id": "dev"
+            },
+            "body": null,
+            "method": "GET",
+            "mode": "cors",
+            "credentials": "omit"
+        });
+        let json = await response?.json();
+        let exists = json?.results?.[0] || null
+        if(exists){
+            let existsObject = new CloudObject(this.className)
+            existsObject.set(exists)
+            existsObject.id = exists.objectId
+            existsObject.createdAt = exists.createdAt
+            existsObject.updatedAt = exists.updatedAt
+            return existsObject
+        }
     }
 }
 

+ 37 - 1
FilmDraw-server/migration/data.js

@@ -1 +1,37 @@
- 
+module.exports.FilmUserList = [
+    {
+        "objectId": "user_001",
+        "password": "11111",
+        "age": 25,
+        "gender": "男",
+        "avatar": "https://example.com/avatars/avatar_001.png"
+    },
+    {
+        "objectId": "user_002",
+        "password": "11111",
+        "age": 30,
+        "gender": "女",
+        "avatar": "https://example.com/avatars/avatar_002.png"
+    },
+    {
+        "objectId": "user_003",
+        "password": "11111",
+        "age": 22,
+        "gender": "女",
+        "avatar": "https://example.com/avatars/avatar_003.png"
+    },
+    {
+        "objectId": "user_004",
+        "password": "11111",
+        "age": 28,
+        "gender": "男",
+        "avatar": "https://example.com/avatars/avatar_004.png"
+    },
+    {
+        "objectId": "user_005",
+        "password": "11111",
+        "age": 35,
+        "gender": "女",
+        "avatar": "https://example.com/avatars/avatar_005.png"
+    }
+]

+ 130 - 22
FilmDraw-server/migration/import-data.js

@@ -1,28 +1,136 @@
 const { CloudQuery, CloudObject } = require("../lib/ncloud");
-testCRUD()
-// testQuery()
-
-async function testQuery(){
-    let query = new CloudQuery("FilmRole")
-    // query.equalTo("gender","女")
-    // query.greaterThanAndEqualTo("age",40)
-    // query.lessThan("age",41)
-    let list = await query.find();
-    console.log(list)
+const { FilmUserList } = require("./data.js");
+inportFilmUser()
+
+DataMap = {
+   FilmUser:{}
+}
+
+async function inportFilmUser(){
+    // 导入用户数据
+    let filmuserList =FilmUserList
+    for (let index = 0; index <filmuserList.length; index++) {
+        let filmuser =filmuserList[index];
+       filmuser = await importObject("FilmUser",filmuser)
+    }
+    console.log(DataMap["FilmUser"])
+}
+
+async function importObject(className,data){
+
+    // 查重 userId 数据源列表中的objectId并非数据库生成的唯一ID,因此需要有一个userId字段进行记录,并查重
+    let query = new CloudQuery(className)
+    let userId = data.objectId
+    query.equalTo("userId",userId)
+    let importObj = await query.first()
+    console.log(importObj)
+
+    // 导入
+    // 导入前批量处理Pointer类型数据,进行重定向
+    Object.keys(data)?.forEach(key=>{
+        let field = data[key]
+        let userId = field?.objectId
+        if(userId){ // 是数组字段
+            if(key=="depart"){
+                data[key] = DataMap?.["Department"]?.[userId]?.toPointer();
+            }
+        }
+    })
+    // 若未添加,则创建新对象并保存
+    if(!importObj?.id){
+        importObj = new CloudObject(className)
+    }
+
+      // 保存或更新数据
+      data.userId = userId;
+      importObj.set(data);
+      importObj = await importObj.save();
+      DataMap[className][userId] = importObj
 }
 
-async function testCRUD(){
-    // 基本的增删查改测试
-    let query = new CloudQuery("FilmRole")
-    let FilmRoleList = await query.find();
-    console.log("FilmRolelist count",FilmRoleList?.length)
 
-    let newFilmRole = new CloudObject("FilmRole")
-    newFilmRole.set({"name":"123"})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+// 测试
+
+// const { CloudQuery, CloudObject } = require("../lib/ncloud");
+// testUser()
+// // testCRUD()
+// // testQuery()
+
+// async function testQuery(){
+//     let query = new CloudQuery("FilmRole")
+//     // query.equalTo("gender","女")
+//     // query.greaterThanAndEqualTo("age",40)
+//     // query.lessThan("age",41)
+//     let list = await query.find();
+//     console.log(list)
+// }
+
+// async function testCRUD(){
+//     // 基本的增删查改测试
+//     let query = new CloudQuery("FilmRole")
+//     let FilmRoleList = await query.find();
+//     console.log("FilmRolelist count",FilmRoleList?.length)
+
+//     let newFilmRole = new CloudObject("FilmRole")
+//     newFilmRole.set({"name":"123"})
     
-    newFilmRole = await newFilmRole.save(newFilmRole)
-    console.log("newFilmRole",newFilmRole)
+//     newFilmRole = await newFilmRole.save(newFilmRole)
+//     console.log("newFilmRole",newFilmRole)
+
+//     await newFilmRole.destory()
+//     console.log("newFilmRole 已删除",newFilmRole)
+// }
+
+// async function testUser(){
+//     //基本的增删查改测试
+//     let query = new CloudQuery("FilmUser")
+//     query.equalTo("name","qwq")
+//     let List =await query.find();
+
+//     List.forEach(obj => {
+//         let newFilmUser = new CloudObject("FilmUser")
+//         console.log(`${obj.objectId}`);
+//         newFilmUser.id=`${obj.objectId}`
+//         newFilmUser.destory()
+//         console.log("newFilmUser 已删除",newFilmUser)
+//       });
+    
+
+//     // let FilmUserList = await query.find();
+//     // console.log("FilmUserList count",FilmUserList?.length)
 
-    await newFilmRole.destory()
-    console.log("newFilmRole 已删除",newFilmRole)
-}
+//     let query1 = new CloudQuery("FilmUser")
+//     let FilmUserList1 = await query1.find();
+//     console.log(FilmUserList1)
+//     console.log("FilmUserList count",FilmUserList1?.length)
+// }