Merge branch 'feature/mhw-v1.01' of gitee.com:fusenpack/fusenapi into feature/mhw-v1.01

This commit is contained in:
momo
2023-09-19 19:17:32 +08:00
81 changed files with 926 additions and 449 deletions

View File

@@ -74,7 +74,7 @@ func AutoGetEtcYaml() *string {
dirs = dirs[0 : len(dirs)-1]
// 列出所有 curPath 下的文件夹
files, err := ioutil.ReadDir(curPath)
files, err := os.ReadDir(curPath)
if err != nil {
log.Println(err)
continue

View File

@@ -1,7 +1,10 @@
package autoconfig
import "testing"
import (
"log"
"testing"
)
func TestAutoConfig(t *testing.T) {
AutoGetEtcYaml()
log.Println(*AutoGetEtcYaml())
}

View File

@@ -119,7 +119,7 @@ func Array2MapByKey[KEY comparable, VALUE any](arrSrc []VALUE, fieldName string)
}
fv := srcv.FieldByName(fieldName)
k := fv.Interface().(KEY)
result[k] = srcv.Interface().(VALUE)
result[k] = arr.Index(i).Interface().(VALUE)
}
return result
@@ -166,7 +166,7 @@ func Array2MapByKeyTag[KEY comparable, VALUE any](arrSrc []VALUE, tag string) (r
fv = fv.Elem()
}
k := fv.Interface().(KEY)
result[k] = srcv.Interface().(VALUE)
result[k] = arr.Index(i).Interface().(VALUE)
}
return

1
utils/fsconfig/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
log

144
utils/fsconfig/config.go Normal file
View File

@@ -0,0 +1,144 @@
package fsconfig
import (
"log"
"os"
"path/filepath"
"strconv"
"strings"
"github.com/nacos-group/nacos-sdk-go/v2/clients"
"github.com/nacos-group/nacos-sdk-go/v2/common/constant"
"github.com/nacos-group/nacos-sdk-go/v2/vo"
"gopkg.in/yaml.v2"
)
type EnvConfig struct {
NacosServers []string `yaml:"nacos"`
UserName string `yaml:"username"`
Password string `yaml:"password"`
NamespaceId string `yaml:"namespace"`
DataId string `yaml:"dataid"`
Group string `yaml:"group"`
}
var optPathDirs = []string{"/opt", "./", "../", "../../"}
var nacosConfig *EnvConfig
func GetEnvCofing() *EnvConfig {
if nacosConfig != nil {
return nacosConfig
}
for _, optDir := range optPathDirs {
if optDir[len(optDir)-1] != '/' {
optDir = optDir + "/"
}
for _, yname := range []string{"env.yaml", "env.yml"} {
f, err := os.Open(optDir + yname)
if err != nil {
// log.Println(err)
continue
}
cfg := &EnvConfig{}
err = yaml.NewDecoder(f).Decode(&cfg)
if err != nil {
// log.Println(err)
continue
}
nacosConfig = cfg
return nacosConfig
}
}
panic("Can't find env.yaml or env.yml in the specified directories")
}
func init() {
}
func StartNacosConfig(configFile string, OnChange func(namespace, group, dataId, data string)) string {
env := GetEnvCofing()
// 创建serverConfig
// 支持多个;至少一个ServerConfig
var serverConfig []constant.ServerConfig
for _, s := range env.NacosServers {
sp := strings.Split(s, ":")
host := sp[0]
port, err := strconv.ParseUint(sp[1], 10, 64)
if err != nil {
panic(err)
}
serverConfig = append(serverConfig, constant.ServerConfig{
IpAddr: host,
Port: port,
})
}
// 创建clientConfig
clientConfig := constant.ClientConfig{
NamespaceId: env.NamespaceId, // 如果需要支持多namespace我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时此处填空字符串。
TimeoutMs: 50000,
NotLoadCacheAtStart: true,
LogLevel: "debug",
LogDir: "/tmp/nacos/log",
CacheDir: "/tmp/nacos/cache",
Username: env.UserName,
Password: env.Password,
}
// 创建服务发现客户端的另一种方式 (推荐)
// namingClient, err := clients.NewNamingClient(
// vo.NacosClientParam{
// ClientConfig: &clientConfig,
// ServerConfigs: serverConfig,
// },
// )
// if err != nil {
// log.Fatalf("初始化nacos失败: %s", err.Error())
// }
// log.Println(namingClient)
// 创建 Nacos 配置客户端
configClient, err := clients.CreateConfigClient(map[string]interface{}{
"clientConfig": clientConfig,
"serverConfigs": serverConfig,
})
if err != nil {
log.Fatalf("Failed to create Nacos config client: %v", err)
}
cfgYamls := strings.Split(configFile, "/")
cfgYaml := cfgYamls[len(cfgYamls)-1]
yamlExt := filepath.Ext(cfgYaml)
if !(yamlExt == ".yaml" || yamlExt == ".yml") {
log.Panic(configFile)
}
// 获取配置
content, err := configClient.GetConfig(vo.ConfigParam{
DataId: cfgYaml,
Group: env.Group,
OnChange: OnChange,
})
if err != nil {
log.Fatalf("Failed to get config from Nacos: %v", err)
}
log.Println("加载成功:", cfgYaml)
return content
// log.Println(content)
}

View File

@@ -0,0 +1,10 @@
package fsconfig_test
import (
"fusenapi/utils/fsconfig"
"testing"
)
func TestCase1(t *testing.T) {
fsconfig.StartNacosConfig("auth.yaml", nil)
}

View File

@@ -14,15 +14,9 @@ func TestCase1(t *testing.T) {
}
conn := initalize.InitMysql("fsreaderwriter:XErSYmLELKMnf3Dh@tcp(fusen.cdmigcvz3rle.us-east-2.rds.amazonaws.com:3306)/fusen")
err := fssql.MetadataModulePATCH(conn, "logo", gmodel.FsChangeCode{}, u, "id = ?", 6)
err := fssql.MetadataModulePATCH(conn, "profile", gmodel.FsUserInfo{}, u, "id = ?", 90)
if err != nil {
panic(err)
}
err = fssql.MetadataResourcePATCH(conn,
"f8932c0379fa5aa3397dc0a963696ca90536cc273ea10119b0137fd15ecfe673", u)
if err != nil {
panic(err)
}
}

View File

@@ -5,9 +5,15 @@ func SetMetadata(metadataChild map[string]interface{}, oldMetadata map[string]in
for k, v := range metadataChild {
switch val := v.(type) {
case map[string]interface{}:
oldResourceMetadataData := oldMetadata[k].(map[string]interface{})
for key, val1 := range val {
oldResourceMetadataData[key] = val1
kValue, kEx := oldMetadata[k]
var oldResourceMetadataData map[string]interface{}
if kEx {
oldResourceMetadataData = kValue.(map[string]interface{})
} else {
oldResourceMetadataData = make(map[string]interface{}, len(val))
}
for key1, val1 := range val {
oldResourceMetadataData[key1] = val1
}
oldMetadata[k] = oldResourceMetadataData
default:
@@ -20,11 +26,17 @@ func SetMetadata(metadataChild map[string]interface{}, oldMetadata map[string]in
for k, v := range metadataChild {
switch val := v.(type) {
case map[string]interface{}:
var resourceMetadataData = make(map[string]interface{}, len(val))
for key, val1 := range val {
resourceMetadataData[key] = val1
kValue, kEx := oldMetadata[k]
var oldResourceMetadataData map[string]interface{}
if kEx {
oldResourceMetadataData = kValue.(map[string]interface{})
} else {
oldResourceMetadataData = make(map[string]interface{}, len(val))
}
oldMetadata[k] = resourceMetadataData
for key, val1 := range val {
oldResourceMetadataData[key] = val1
}
oldMetadata[k] = oldResourceMetadataData
default:
oldMetadata[k] = val
}

View File

@@ -15,17 +15,23 @@ type RenderImageReqMsg struct {
RenderData RenderData `json:"render_data"`
}
type RenderData struct {
TemplateTag string `json:"template_tag"` //模板标签(必须)
ProductId int64 `json:"product_id"` //产品id(必须)
Website string `json:"website"` //网站(可选)
Slogan string `json:"slogan"` //slogan(可选)
Address string `json:"address"` //地址(可选)
Phone string `json:"phone"` //电话(可选)
Qrcode string `json:"qrcode"` //二维码(可选)
ProductSizeId int64 `json:"product_size_id"` //尺寸id(可选)
UserId int64 `json:"user_id"` //用户id(websocket连接建立再赋值)
GuestId int64 `json:"guest_id"` //游客id(websocket连接建立再赋值)
Logo string `json:"logo"` //log资源地址(websocket连接建立再赋值)
TemplateTag string `json:"template_tag"` //模板标签(必须)
TemplateTagColor TemplateTagColor `json:"template_tag_color"` //模板标签组合颜色(必须)
TemplateTagGroups interface{} `json:"template_tag_groups"` //模板标签分组信息数组(必须)
Logo string `json:"logo"` //log资源地址(必须)
ProductId int64 `json:"product_id"` //产品id(必须)
Website string `json:"website"` //网站(可选)
Slogan string `json:"slogan"` //slogan(可选)
Address string `json:"address"` //地址(可选)
Phone string `json:"phone"` //电话(可选)
Qrcode string `json:"qrcode"` //二维码(可选)
ProductSizeId int64 `json:"product_size_id"` //尺寸id(可选)
UserId int64 `json:"user_id"` //用户id(websocket连接建立再赋值)
GuestId int64 `json:"guest_id"` //游客id(websocket连接建立再赋值)
}
type TemplateTagColor struct {
Color [][]string `json:"color"` //颜色组合
SelectedColorIndex int `json:"selected_color_index"` //主色的下标索引
}
// websocket发送渲染完的数据