优化代码结构
This commit is contained in:
parent
c8d1025adf
commit
a6f9f1383f
5 changed files with 236 additions and 241 deletions
14
Makefile
14
Makefile
|
|
@ -3,7 +3,7 @@ GOFMT ?= gofmt "-s"
|
|||
PACKAGES ?= $(shell $(GO) list ./...)
|
||||
VETPACKAGES ?= $(shell $(GO) list ./... | grep -v /examples/)
|
||||
GOFILES := $(shell find . -name "*.go")
|
||||
VERSION := $(shell grep 'const VERSION =' share/vars.go |awk '{print $$4}' |sed 's/\"//g')
|
||||
VERSION := $(shell grep 'const VERSION =' share/const.go |awk '{print $$4}' |sed 's/\"//g')
|
||||
|
||||
# ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
|
||||
TESTFOLDER := $(shell $(GO) list ./... | grep -vE 'examples|tests*|config')
|
||||
|
|
@ -123,8 +123,8 @@ gen-bindata:
|
|||
xiang: bindata
|
||||
|
||||
if [ ! -z "${XIANG_DOMAIN}" ]; then \
|
||||
mv share/vars.go share/vars.go.bak; \
|
||||
sed "s/*.iqka.com/$(XIANG_DOMAIN)/g" share/vars.go.bak > share/vars.go; \
|
||||
mv share/const.go share/const.go.bak; \
|
||||
sed "s/*.iqka.com/$(XIANG_DOMAIN)/g" share/const.go.bak > share/const.go; \
|
||||
fi;
|
||||
|
||||
GOOS=linux GOARCH=amd64 go build -v -o .tmp/xiang-linux-amd64
|
||||
|
|
@ -136,8 +136,8 @@ xiang: bindata
|
|||
chmod +x dist/bin/xiang-*-*
|
||||
|
||||
if [ ! -z "${XIANG_DOMAIN}" ]; then \
|
||||
rm share/vars.go; \
|
||||
mv share/vars.go.bak share/vars.go; \
|
||||
rm share/const.go; \
|
||||
mv share/const.go.bak share/const.go; \
|
||||
fi;
|
||||
|
||||
.PHONY: release
|
||||
|
|
@ -164,8 +164,8 @@ release: clean
|
|||
|
||||
# 制品
|
||||
if [ ! -z "${XIANG_DOMAIN}" ]; then \
|
||||
mv dist/release/share/vars.go dist/release/share/vars.go.bak; \
|
||||
sed "s/*.iqka.com/$(XIANG_DOMAIN)/g" dist/release/share/vars.go.bak > dist/release/share/vars.go; \
|
||||
mv dist/release/share/const.go dist/release/share/const.go.bak; \
|
||||
sed "s/*.iqka.com/$(XIANG_DOMAIN)/g" dist/release/share/const.go.bak > dist/release/share/const.go; \
|
||||
fi;
|
||||
|
||||
cd dist/release && GOOS=linux GOARCH=amd64 go build -v -o ../../.tmp/xiang-${VERSION}-linux-amd64
|
||||
|
|
|
|||
234
share/app.go
234
share/app.go
|
|
@ -1,69 +1,8 @@
|
|||
package share
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/yaoapp/kun/exception"
|
||||
"github.com/yaoapp/kun/maps"
|
||||
"github.com/yaoapp/xiang/data"
|
||||
)
|
||||
|
||||
// App 应用信息
|
||||
var App AppInfo
|
||||
|
||||
// AppInfo 应用信息
|
||||
type AppInfo struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Short string `json:"short,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Icons maps.MapStrSync `json:"icons,omitempty"`
|
||||
Storage AppStorage `json:"storage,omitempty"`
|
||||
Option map[string]interface{} `json:"option,omitempty"`
|
||||
}
|
||||
|
||||
// AppStorage 应用存储
|
||||
type AppStorage struct {
|
||||
Default string `json:"default"`
|
||||
Buckets map[string]string `json:"buckets,omitempty"`
|
||||
S3 map[string]interface{} `json:"s3,omitempty"`
|
||||
OSS *AppStorageOSS `json:"oss,omitempty"`
|
||||
COS map[string]interface{} `json:"cos,omitempty"`
|
||||
}
|
||||
|
||||
// AppStorageOSS 阿里云存储
|
||||
type AppStorageOSS struct {
|
||||
Endpoint string `json:"endpoint,omitempty"`
|
||||
ID string `json:"id,omitempty"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
RoleArn string `json:"roleArn,omitempty"`
|
||||
SessionName string `json:"sessionName,omitempty"`
|
||||
}
|
||||
|
||||
// Script 脚本文件类型
|
||||
type Script struct {
|
||||
Name string
|
||||
Type string
|
||||
Content []byte
|
||||
File string
|
||||
}
|
||||
|
||||
// AppRoot 应用目录
|
||||
type AppRoot struct {
|
||||
APIs string
|
||||
Flows string
|
||||
Models string
|
||||
Plugins string
|
||||
Tables string
|
||||
Charts string
|
||||
Screens string
|
||||
Data string
|
||||
}
|
||||
|
||||
// Public 输出公共信息
|
||||
func (app AppInfo) Public() AppInfo {
|
||||
app.Storage.COS = nil
|
||||
|
|
@ -71,176 +10,3 @@ func (app AppInfo) Public() AppInfo {
|
|||
app.Storage.S3 = nil
|
||||
return app
|
||||
}
|
||||
|
||||
// GetAppPlugins 遍历应用目录,读取文件列表
|
||||
func GetAppPlugins(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
root = path.Join(root, "/")
|
||||
filepath.Walk(root, func(file string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
return err
|
||||
}
|
||||
if strings.HasSuffix(file, typ) {
|
||||
files = append(files, GetAppPluginFile(root, file))
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return files
|
||||
}
|
||||
|
||||
// GetAppPluginFile 读取文件
|
||||
func GetAppPluginFile(root string, file string) Script {
|
||||
name := GetAppPluginFileName(root, file)
|
||||
return Script{
|
||||
Name: name,
|
||||
Type: "plugin",
|
||||
File: file,
|
||||
}
|
||||
}
|
||||
|
||||
// GetAppPluginFileName 读取文件
|
||||
func GetAppPluginFileName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
nametypes := strings.Split(namer[0], "/")
|
||||
name := strings.Join(nametypes, ".")
|
||||
return name
|
||||
}
|
||||
|
||||
// GetAppFilesFS 遍历应用目录,读取文件列表
|
||||
func GetAppFilesFS(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
root = path.Join(root, "/")
|
||||
filepath.Walk(root, func(filepath string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
return err
|
||||
}
|
||||
if strings.HasSuffix(filepath, typ) {
|
||||
files = append(files, GetAppFile(root, filepath))
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
return files
|
||||
}
|
||||
|
||||
// GetAppFile 读取文件
|
||||
func GetAppFile(root string, filepath string) Script {
|
||||
name := GetAppFileName(root, filepath)
|
||||
file, err := os.Open(filepath)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
content, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
return Script{
|
||||
Name: name,
|
||||
Type: "app",
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
// GetAppFileName 读取文件
|
||||
func GetAppFileName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
nametypes := strings.Split(namer[0], "/")
|
||||
name := strings.Join(nametypes, ".")
|
||||
return name
|
||||
}
|
||||
|
||||
// GetAppFileBaseName 读取文件base
|
||||
func GetAppFileBaseName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
return filepath.Join(root, namer[0])
|
||||
}
|
||||
|
||||
// GetFilesFS 遍历目录,读取文件列表
|
||||
func GetFilesFS(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
root = path.Join(root, "/")
|
||||
filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
return err
|
||||
}
|
||||
if strings.HasSuffix(path, typ) {
|
||||
files = append(files, GetFile(root, path))
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return files
|
||||
}
|
||||
|
||||
// GetFile 读取文件
|
||||
func GetFile(root string, path string) Script {
|
||||
filename := strings.TrimPrefix(path, root+"/")
|
||||
name, typ := GetTypeName(filename)
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
content, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
return Script{
|
||||
Name: name,
|
||||
Type: typ,
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
// GetFileName 读取文件
|
||||
func GetFileName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
name, _ := GetTypeName(filename)
|
||||
return name
|
||||
}
|
||||
|
||||
// GetFileBaseName 读取文件base
|
||||
func GetFileBaseName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
return filepath.Join(root, namer[0])
|
||||
}
|
||||
|
||||
// GetFilesBin 从 bindata 中读取文件列表
|
||||
func GetFilesBin(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
binfiles := data.AssetNames()
|
||||
for _, path := range binfiles {
|
||||
if strings.HasSuffix(path, typ) {
|
||||
file := strings.TrimPrefix(path, root+"/")
|
||||
name, typ := GetTypeName(file)
|
||||
content, err := data.Asset(path)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
files = append(files, Script{
|
||||
Name: name,
|
||||
Type: typ,
|
||||
Content: content,
|
||||
})
|
||||
}
|
||||
}
|
||||
return files
|
||||
}
|
||||
|
||||
// GetTypeName 读取类型
|
||||
func GetTypeName(path string) (name string, typ string) {
|
||||
namer := strings.Split(path, ".")
|
||||
nametypes := strings.Split(namer[0], "/")
|
||||
name = strings.Join(nametypes[1:], ".")
|
||||
typ = nametypes[0]
|
||||
return name, typ
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
package share
|
||||
|
||||
import "github.com/yaoapp/kun/maps"
|
||||
|
||||
// API API 配置数据结构
|
||||
type API struct {
|
||||
Name string `json:"-"`
|
||||
|
|
@ -38,3 +40,52 @@ type Render struct {
|
|||
Props map[string]interface{} `json:"props,omitempty"`
|
||||
Components map[string]interface{} `json:"components,omitempty"`
|
||||
}
|
||||
|
||||
// AppInfo 应用信息
|
||||
type AppInfo struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Short string `json:"short,omitempty"`
|
||||
Version string `json:"version,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Icons maps.MapStrSync `json:"icons,omitempty"`
|
||||
Storage AppStorage `json:"storage,omitempty"`
|
||||
Option map[string]interface{} `json:"option,omitempty"`
|
||||
}
|
||||
|
||||
// AppStorage 应用存储
|
||||
type AppStorage struct {
|
||||
Default string `json:"default"`
|
||||
Buckets map[string]string `json:"buckets,omitempty"`
|
||||
S3 map[string]interface{} `json:"s3,omitempty"`
|
||||
OSS *AppStorageOSS `json:"oss,omitempty"`
|
||||
COS map[string]interface{} `json:"cos,omitempty"`
|
||||
}
|
||||
|
||||
// AppStorageOSS 阿里云存储
|
||||
type AppStorageOSS struct {
|
||||
Endpoint string `json:"endpoint,omitempty"`
|
||||
ID string `json:"id,omitempty"`
|
||||
Secret string `json:"secret,omitempty"`
|
||||
RoleArn string `json:"roleArn,omitempty"`
|
||||
SessionName string `json:"sessionName,omitempty"`
|
||||
}
|
||||
|
||||
// Script 脚本文件类型
|
||||
type Script struct {
|
||||
Name string
|
||||
Type string
|
||||
Content []byte
|
||||
File string
|
||||
}
|
||||
|
||||
// AppRoot 应用目录
|
||||
type AppRoot struct {
|
||||
APIs string
|
||||
Flows string
|
||||
Models string
|
||||
Plugins string
|
||||
Tables string
|
||||
Charts string
|
||||
Screens string
|
||||
Data string
|
||||
}
|
||||
|
|
|
|||
178
share/utils.go
178
share/utils.go
|
|
@ -8,6 +8,7 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/yaoapp/kun/exception"
|
||||
"github.com/yaoapp/xiang/data"
|
||||
)
|
||||
|
||||
// Walk 遍历应用目录,读取文件列表
|
||||
|
|
@ -59,3 +60,180 @@ func DirNotExists(dir string) bool {
|
|||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// ************************************************
|
||||
// 警告: 以下函数将被弃用
|
||||
// ************************************************
|
||||
|
||||
// GetAppPlugins 遍历应用目录,读取文件列表
|
||||
func GetAppPlugins(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
root = path.Join(root, "/")
|
||||
filepath.Walk(root, func(file string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
return err
|
||||
}
|
||||
if strings.HasSuffix(file, typ) {
|
||||
files = append(files, GetAppPluginFile(root, file))
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return files
|
||||
}
|
||||
|
||||
// GetAppPluginFile 读取文件
|
||||
func GetAppPluginFile(root string, file string) Script {
|
||||
name := GetAppPluginFileName(root, file)
|
||||
return Script{
|
||||
Name: name,
|
||||
Type: "plugin",
|
||||
File: file,
|
||||
}
|
||||
}
|
||||
|
||||
// GetAppPluginFileName 读取文件
|
||||
func GetAppPluginFileName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
nametypes := strings.Split(namer[0], "/")
|
||||
name := strings.Join(nametypes, ".")
|
||||
return name
|
||||
}
|
||||
|
||||
// GetAppFilesFS 遍历应用目录,读取文件列表
|
||||
func GetAppFilesFS(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
root = path.Join(root, "/")
|
||||
filepath.Walk(root, func(filepath string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
return err
|
||||
}
|
||||
if strings.HasSuffix(filepath, typ) {
|
||||
files = append(files, GetAppFile(root, filepath))
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
return files
|
||||
}
|
||||
|
||||
// GetAppFile 读取文件
|
||||
func GetAppFile(root string, filepath string) Script {
|
||||
name := GetAppFileName(root, filepath)
|
||||
file, err := os.Open(filepath)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
content, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
return Script{
|
||||
Name: name,
|
||||
Type: "app",
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
// GetAppFileName 读取文件
|
||||
func GetAppFileName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
nametypes := strings.Split(namer[0], "/")
|
||||
name := strings.Join(nametypes, ".")
|
||||
return name
|
||||
}
|
||||
|
||||
// GetAppFileBaseName 读取文件base
|
||||
func GetAppFileBaseName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
return filepath.Join(root, namer[0])
|
||||
}
|
||||
|
||||
// GetFilesFS 遍历目录,读取文件列表
|
||||
func GetFilesFS(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
root = path.Join(root, "/")
|
||||
filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
return err
|
||||
}
|
||||
if strings.HasSuffix(path, typ) {
|
||||
files = append(files, GetFile(root, path))
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return files
|
||||
}
|
||||
|
||||
// GetFile 读取文件
|
||||
func GetFile(root string, path string) Script {
|
||||
filename := strings.TrimPrefix(path, root+"/")
|
||||
name, typ := GetTypeName(filename)
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
|
||||
defer file.Close()
|
||||
content, err := ioutil.ReadAll(file)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
return Script{
|
||||
Name: name,
|
||||
Type: typ,
|
||||
Content: content,
|
||||
}
|
||||
}
|
||||
|
||||
// GetFileName 读取文件
|
||||
func GetFileName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
name, _ := GetTypeName(filename)
|
||||
return name
|
||||
}
|
||||
|
||||
// GetFileBaseName 读取文件base
|
||||
func GetFileBaseName(root string, file string) string {
|
||||
filename := strings.TrimPrefix(file, root+"/")
|
||||
namer := strings.Split(filename, ".")
|
||||
return filepath.Join(root, namer[0])
|
||||
}
|
||||
|
||||
// GetFilesBin 从 bindata 中读取文件列表
|
||||
func GetFilesBin(root string, typ string) []Script {
|
||||
files := []Script{}
|
||||
binfiles := data.AssetNames()
|
||||
for _, path := range binfiles {
|
||||
if strings.HasSuffix(path, typ) {
|
||||
file := strings.TrimPrefix(path, root+"/")
|
||||
name, typ := GetTypeName(file)
|
||||
content, err := data.Asset(path)
|
||||
if err != nil {
|
||||
exception.Err(err, 500).Throw()
|
||||
}
|
||||
files = append(files, Script{
|
||||
Name: name,
|
||||
Type: typ,
|
||||
Content: content,
|
||||
})
|
||||
}
|
||||
}
|
||||
return files
|
||||
}
|
||||
|
||||
// GetTypeName 读取类型
|
||||
func GetTypeName(path string) (name string, typ string) {
|
||||
namer := strings.Split(path, ".")
|
||||
nametypes := strings.Split(namer[0], "/")
|
||||
name = strings.Join(nametypes[1:], ".")
|
||||
typ = nametypes[0]
|
||||
return name, typ
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue