Forráskód Böngészése

feat:new soul-server

cainiao-hue 4 hónapja
szülő
commit
3cfedb905d
3 módosított fájl, 189 hozzáadás és 49 törlés
  1. 37 49
      docs-prod/schema.md
  2. 125 0
      soul-server/lib/cloud-object.js
  3. 27 0
      soul-server/migration/import-data.js

+ 37 - 49
docs-prod/schema.md

@@ -1,63 +1,51 @@
 # 类图
 ```plantuml
-' 聊天项目类图
+' 聊天项目类图英文版
 @startuml
-' 智能陪聊
-' 存储用户的基本信息
-class 用户 { 
-    +用户ID: String
-    +用户名: String
-    +密码: String
-    +邮箱: String
-    +头像: String
-    +个人简介: String
-    + 开始聊天():void
-    + 选择陪聊师():String
-    + 总结聊天记录():void
+class User { 
+    + userID: String //用户唯一标识符
+    + username: String //用户名
+    + password: String //用户密码
+    + email: String //用户邮箱
+    + avatar: String //用户头像URL
+    + bio: String //用户个人简介
+    + startChat(): void 
+    + chooseChatPartner(): String
+    + summarizeChatHistory(): void
 }
 
-' 存储专业陪聊师的信息
-class 专业陪聊师 {
-    +陪聊师ID: String
-    +名称: String
-    +专业领域: String
-    +评分: Float
-    +头像: String
-    +个人简介: String
-    + 提供聊天(): String
+' Store information about chat partners
+class ChatPartner {
+    + partnerID: String //陪聊师唯一标识符
+    + name: String //陪聊师姓名
+    + expertise: String //陪聊师专业领域(普通陪聊师可为空)
+    + avatar: String //陪聊师头像URL
+    + bio: String //陪聊师个人简介
+    + provideChat(): String 
 }
 
-' 存储普通陪聊师的信息
-class 普通陪聊师 {
-    +陪聊师ID: String
-    +名称: String
-    +评分: Float
-    +头像: String
-    +个人简介: String
-    + 提供聊天(): String
+' Record chat history between users and chat partners
+class ChatRecord {
+    + recordID: String //聊天记录唯一标识符
+    + timestamp: Date //聊天时间戳
+    - chatContent: List //聊天内容列表
+    + user: User //关联的用户对象
+    + chatBot: ChatBot //关联的聊天机器人对象
+    + getChatHistory(): List
 }
-' 记录用户与陪聊师的聊天记录
-class 聊天记录 {
-    +聊天记录ID: String
-    +时间: Date
-    -聊天内容: List
-    +用户: 用户
-    +聊天机器人: 聊天机器人
-    + 获取聊天记录(): List
-}
-' 记录产生的报告
-class 报告 {
-    +报告ID: String
-    -分析结果: String
-    + 生成报告(): String
+
+' Record generated reports
+class Report {
+    + reportID: String //报告唯一标识符
+    - analysisResult: String //分析结果
+    + generateReport(): String //生成报告的方法
 }
-用户 "1" --> "*" 聊天记录
-专业陪聊师 "1" --> "*" 聊天记录
-普通陪聊师 "1" --> "*" 聊天记录
-聊天记录 "1" -- "1" 报告
+
+User "1" --> "*" ChatRecord     
+ChatPartner "1" --> "*" ChatRecord 
+ChatRecord "1" -- "1" Report      
 @enduml
 ```
-
 # 时序图
 ```plantuml
 @startuml

+ 125 - 0
soul-server/lib/cloud-object.js

@@ -0,0 +1,125 @@
+class CloudObject{
+    id // 编号
+    className // 名称
+    data ={} // 属性、内容
+    constructor(className){
+        this.className = className
+    }
+    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 = "http://dev.fmode.cn:1337/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": "POST",
+        "mode": "cors",
+        "credentials": "omit"
+      });
+      let result = await response?.json();
+      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/ChatPartner/"+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){ // 通过id查询
+        let url = "http://dev.fmode.cn:1337/parse/classes/"+this.className+"/"+id+"?"
+        let response = await fetch(url, {
+            "headers": {
+              "if-none-match": "W/\"22c-NGsQZp5SnqjXTAX+NXjLAv6LaLA\"",
+              "x-parse-application-id": "dev"
+            },
+            "body": null,
+            "method": "GET",
+            "mode": "cors",
+            "credentials": "omit"
+          });
+          let json = await response?.json();
+          return json || {}
+    }
+    async find(){ // 直接查询
+        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/\"22c-NGsQZp5SnqjXTAX+NXjLAv6LaLA\"",
+              "x-parse-application-id": "dev"
+            },
+            "body": null,
+            "method": "GET",
+            "mode": "cors",
+            "credentials": "omit"
+          });
+          let json = await response?.json();
+          return json?.results || []
+    }
+    first(){ // 只查询第一项
+    }
+}

+ 27 - 0
soul-server/migration/import-data.js

@@ -0,0 +1,27 @@
+const { CloudQuery, CloudObject } = require("../lib/ncloud");
+// testCRUD()
+testQuery()
+async function testQuery(){
+    let query = new CloudQuery("Doctor")
+    // 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("Doctor")
+    let doctorList = await query.find();
+    console.log("doctorList count",doctorList?.length)
+
+    let newDoctor = new CloudObject("Doctor")
+    newDoctor.set({"name":"123"})
+    
+    newDoctor = await newDoctor.save(newDoctor)
+    console.log("newDoctor",newDoctor)
+
+    await newDoctor.destory()
+    console.log("newDoctor 已删除",newDoctor)
+}