class CloudObject{ id className data = {} 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){ return } this.data[key] = json[key] }) } get(key){ return this.data[key] || null } async save(){ let method = "POST" let url = "https://dev.fmode.cn/parse/classes/" + this.className // 更新 if(this.id){ url += "/"+this.id method = "PUT" } let body = JSON.stringify(this.data) let response = await fetch(url, { "headers": { "content-type": "application/json;charset=UTF-8", "x-parse-application-id": "dev" }, "body": body, "method": method, "mode": "cors", "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("https://dev.fmode.cn/parse/classes/Doctor/"+this.id, { "headers": { "x-parse-application-id": "dev" }, "body": null, "method": "DELETE", "mode": "cors", "credentials": "omit" }); let result = await response?.json(); if(result){ this.id = null } return true } } class CloudQuery{ className constructor(className){ this.className = className } whereOptions = {} greaterThan(key,value){ if(!this.whereOptions[key]) this.whereOptions[key] = {} this.whereOptions[key]["$gt"] = value } greaterThanAndEqualTo(key,value){ if(!this.whereOptions[key]) this.whereOptions[key] = {} this.whereOptions[key]["$gte"] = value } lessThan(key,value){ if(!this.whereOptions[key]) this.whereOptions[key] = {} this.whereOptions[key]["$lt"] = value } lessThanAndEqualTo(key,value){ if(!this.whereOptions[key]) this.whereOptions[key] = {} this.whereOptions[key]["$lte"] = value } equalTo(key,value){ this.whereOptions[key] = value } async get(id){ let url = "https://dev.fmode.cn/parse/classes/"+this.className+"/"+id+"?" 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(); return json || {} } async find(){ let url = "https://dev.fmode.cn/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(); return json?.results || [] } async first(){ let url = "https://dev.fmode.cn/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 } } } module.exports.CloudObject = CloudObject module.exports.CloudQuery = CloudQuery