new: save/load user data

This commit is contained in:
Sakurasan
2023-07-09 21:02:46 +08:00
parent e110eb28ee
commit adbc388920
7 changed files with 89 additions and 7 deletions

View File

@@ -50,6 +50,11 @@ wget https://github.com/mirrors2/opencatd-open/raw/main/docker/docker-compose.ym
>重置 root 的 token
- `docker exec opencatd-open opencatd reset_root`
>导出 user info -> user.json (docker file path: /app/db/user.json)
- `docker exec opencatd-open opencatd save`
>导入 user.json -> db
- `docker exec opencatd-open opencatd load`
## Q&A
关于证书?

View File

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 57 KiB

View File

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

@@ -10,15 +10,15 @@
## 客户端设置
1.添加接口
![](ama_pandola_provider.png)
![](ama_pandora_provider.png)
2.创建用户&Copy Config
![](ama_pandola_copy_config.png)
![](ama_pandora_copy_config.png)
Ex:`ama://set-api-key?server=http%3A%2F%2F123.456.7.89&key=8fc322fa-15d2-43d7-bc59-621554e82c2a`
3.Configure Client
![](ama_pandola_config_client.png)
![](ama_pandora_config_client.png)
3.测试聊天
![](ama_pandola_chat_test.png)
![](ama_pandora_chat_test.png)

View File

@@ -1,7 +1,10 @@
package main
import (
"bytes"
"embed"
"encoding/json"
"fmt"
"io/fs"
"log"
"net/http"
@@ -9,6 +12,7 @@ import (
"opencatd-open/store"
"os"
"github.com/duke-git/lancet/v2/fileutil"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
"gorm.io/gorm"
@@ -29,6 +33,12 @@ func getFileSystem(path string) http.FileSystem {
func main() {
args := os.Args[1:]
if len(args) > 0 {
type user struct {
ID uint
Name string
Token string
}
var us []user
switch args[0] {
case "reset_root":
log.Println("reset root token...")
@@ -46,17 +56,84 @@ func main() {
log.Fatalln(err)
return
}
log.Println("new root token:", ntoken)
log.Println("[success]new root token:", ntoken)
return
case "root_token":
log.Println("reset root token...")
log.Println("query root token...")
if user, err := store.GetUserByID(uint(1)); err != nil {
log.Fatalln(err)
return
} else {
log.Println("root token:", user.Token)
log.Println("[success]root token:", user.Token)
return
}
case "save":
log.Println("backup user info -> user.json")
if users, err := store.GetAllUsers(); err != nil {
log.Fatalln(err)
return
} else {
for _, u := range users {
us = append(us, user{ID: u.ID, Name: u.Name, Token: u.Token})
}
}
if !fileutil.IsExist("./db/user.json") {
file, err := os.Create("./db/user.json")
if err != nil {
log.Fatalln(err)
return
}
defer file.Close()
} else {
// 文件存在,打开文件
file, _ := os.OpenFile("./db/user.json", os.O_RDWR|os.O_TRUNC, 0666)
defer file.Close()
buff := bytes.NewBuffer(nil)
json.NewEncoder(buff).Encode(us)
file.WriteString(buff.String())
fmt.Println("------- END -------")
return
}
case "load":
fmt.Println("\nimport user.json -> db")
if !fileutil.IsExist("./db/user.json") {
log.Fatalln("404! user.json is not found.")
return
}
users, err := store.GetAllUsers()
if err != nil {
log.Println(err)
return
}
if len(users) != 0 {
log.Println("user db 存在数据,取消导入")
return
}
file, err := os.Open("./db/user.json")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer file.Close()
decoder := json.NewDecoder(file)
err = decoder.Decode(&us)
if err != nil {
fmt.Println("Error decoding JSON:", err)
return
}
for _, u := range us {
log.Println(u.ID, u.Name, u.Token)
err := store.CreateUser(&store.User{ID: u.ID, Name: u.Name, Token: u.Token})
if err != nil {
log.Println(err)
}
}
fmt.Println("------- END -------")
return
default:
return
}