mirror of
https://github.com/coaidev/coai.git
synced 2025-05-19 13:00:14 +09:00
87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
package conversation
|
|
|
|
import (
|
|
"chat/auth"
|
|
"chat/globals"
|
|
"chat/utils"
|
|
"database/sql"
|
|
)
|
|
|
|
type Mask struct {
|
|
Id int `json:"id"`
|
|
Avatar string `json:"avatar"`
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
Context []globals.Message `json:"context"`
|
|
}
|
|
|
|
func (c *Conversation) LoadMask(data string) {
|
|
message := utils.UnmarshalForm[[]globals.Message](data)
|
|
if message != nil && len(*message) > 0 {
|
|
c.InsertMessages(*message, 0)
|
|
}
|
|
}
|
|
|
|
func (m *Mask) Save(db *sql.DB, user *auth.User) error {
|
|
userId := user.GetID(db)
|
|
|
|
if m.Id == -1 {
|
|
_, err := globals.ExecDb(db,
|
|
"INSERT INTO mask (mask.user_id, avatar, name, description, context) VALUES (?, ?, ?, ?, ?)",
|
|
userId, m.Avatar, m.Name, m.Description, utils.Marshal(m.Context),
|
|
)
|
|
return err
|
|
}
|
|
|
|
_, err := globals.ExecDb(db,
|
|
"UPDATE mask SET avatar = ?, name = ?, description = ?, context = ? WHERE id = ? AND user_id = ?",
|
|
m.Avatar, m.Name, m.Description, utils.Marshal(m.Context), m.Id, userId,
|
|
)
|
|
return err
|
|
}
|
|
|
|
func (m *Mask) Delete(db *sql.DB, user *auth.User) error {
|
|
_, err := globals.ExecDb(db, "DELETE FROM mask WHERE id = ? AND user_id = ?", m.Id, user.GetID(db))
|
|
return err
|
|
}
|
|
|
|
func LoadMask(db *sql.DB, user *auth.User) ([]Mask, error) {
|
|
rows, err := globals.QueryDb(db, `
|
|
SELECT id, avatar, name, description, context
|
|
FROM mask WHERE user_id = ?
|
|
ORDER BY id DESC
|
|
`, user.GetID(db))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer func(rows *sql.Rows) {
|
|
err := rows.Close()
|
|
if err != nil {
|
|
globals.Warn(err.Error())
|
|
}
|
|
}(rows)
|
|
|
|
masks := make([]Mask, 0)
|
|
for rows.Next() {
|
|
var mask Mask
|
|
var context string
|
|
|
|
err = rows.Scan(&mask.Id, &mask.Avatar, &mask.Name, &mask.Description, &context)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
data, err := utils.UnmarshalString[[]globals.Message](context)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
mask.Context = data
|
|
|
|
masks = append(masks, mask)
|
|
}
|
|
|
|
return masks, nil
|
|
}
|