mirror of
https://gitee.com/xiangheng/x_admin.git
synced 2025-10-18 14:10:52 +08:00
优化环境变量及配置
This commit is contained in:
22
server/config/app.go
Normal file
22
server/config/app.go
Normal file
@@ -0,0 +1,22 @@
|
||||
package config
|
||||
|
||||
type appConfig struct {
|
||||
AppName string `mapstructure:"APP_NAME"` // 应用名称
|
||||
Version string `mapstructure:"VERSION"` // 应用版本
|
||||
Secret string `mapstructure:"SECRET"` // 应用系统加密字符
|
||||
Port int `mapstructure:"PORT"` // 应用端口
|
||||
|
||||
OssDomain string `mapstructure:"OSS_DOMAIN"` // OSS域名
|
||||
GinMode string `mapstructure:"GIN_MODE"` // 应用模式: debug,release
|
||||
DisallowModify bool `mapstructure:"DISALLOW_MODIFY"` // 禁止修改操作 (演示功能,限制POST请求)
|
||||
}
|
||||
|
||||
var AppConfig = appConfig{
|
||||
AppName: "x_admin",
|
||||
Version: "1.0.0",
|
||||
Secret: "UVTIyzCy",
|
||||
Port: 8080,
|
||||
GinMode: "",
|
||||
OssDomain: "",
|
||||
DisallowModify: false,
|
||||
}
|
@@ -1,120 +1,75 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
var Config = loadConfig(".")
|
||||
|
||||
// #region envConfig
|
||||
// envConfig 环境配置
|
||||
type envConfig struct {
|
||||
RootPath string // 项目根目录
|
||||
GinMode string `mapstructure:"GIN_MODE"` // gin运行模式
|
||||
|
||||
OssDomain string `mapstructure:"OSS_DOMAIN"` // OSS域名
|
||||
ServerPort int `mapstructure:"SERVER_PORT"` // 服务运行端口
|
||||
DisallowModify bool `mapstructure:"DISALLOW_MODIFY"` // 禁止修改操作 (演示功能,限制POST请求)
|
||||
PublicPrefix string // 资源访问前缀
|
||||
UploadDirectory string `mapstructure:"UPLOAD_DIRECTORY"` // 上传文件路径
|
||||
RedisUrl string `mapstructure:"REDIS_URL"` // Redis源配置
|
||||
// RedisPoolSize int // Redis连接池大小
|
||||
RedisMaxIdleConns int // Redis空闲连接池最大值
|
||||
RedisConnMaxLifetime time.Duration // Redis连接可复用的最大时间(秒:默认60秒)
|
||||
DatabaseUrl string `mapstructure:"DATABASE_URL"` // 数据源配置
|
||||
DbTablePrefix string // Mysql表前缀
|
||||
DbDefaultStringSize uint // 数据库string类型字段的默认长度
|
||||
DbMaxIdleConns int // 数据库空闲连接池最大值
|
||||
DbMaxOpenConns int // 数据库连接池最大值
|
||||
DbConnMaxLifetimeSeconds int16 // 连接可复用的最大时间(秒:默认28800秒),请根据这个sql查处的时间设置: show variables like 'wait_timeout'
|
||||
Version string // 版本
|
||||
Secret string // 系统加密字符
|
||||
|
||||
RedisPrefix string // Redis键前缀
|
||||
UploadImageSize int64 // 上传图片限制
|
||||
UploadVideoSize int64 // 上传视频限制
|
||||
UploadImageExt []string // 上传图片扩展
|
||||
UploadVideoExt []string // 上传视频扩展
|
||||
type config struct {
|
||||
APP *appConfig
|
||||
DB *dbConfig
|
||||
REDIS *redisConfig
|
||||
FILE *fileConfig
|
||||
}
|
||||
|
||||
// #endregion envConfig
|
||||
var Config = loadConfig(config{
|
||||
APP: &AppConfig,
|
||||
DB: &DBConfig,
|
||||
REDIS: &RedisConfig,
|
||||
FILE: &FileConfig,
|
||||
})
|
||||
|
||||
// loadConfig 加载配置
|
||||
func loadConfig(envPath string) envConfig {
|
||||
var cfgPath string
|
||||
flag.StringVar(&cfgPath, "c", "", "config file envPath.")
|
||||
flag.Parse()
|
||||
if cfgPath == "" {
|
||||
viper.AddConfigPath(envPath)
|
||||
viper.SetConfigFile(".env")
|
||||
} else {
|
||||
viper.SetConfigFile(cfgPath)
|
||||
func loadConfig(config config) config {
|
||||
var envFilePath string
|
||||
// flag.StringVar(&envFilePath, "env", "", "-env config file envPath.")
|
||||
// flag.Parse()
|
||||
if envFilePath == "" {
|
||||
envFilePath = ".env"
|
||||
}
|
||||
viper.AddConfigPath(".")
|
||||
viper.SetConfigFile(envFilePath)
|
||||
viper.AutomaticEnv()
|
||||
|
||||
rootPath, err := os.Getwd()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Println("rootPath:", rootPath)
|
||||
config := envConfig{
|
||||
RootPath: rootPath,
|
||||
GinMode: "debug",
|
||||
// 服务运行端口
|
||||
ServerPort: 8000,
|
||||
|
||||
OssDomain: "",
|
||||
|
||||
// 禁止修改操作 (演示功能,限制POST请求)
|
||||
DisallowModify: false,
|
||||
// 资源访问前缀
|
||||
PublicPrefix: "/api/uploads",
|
||||
// 上传文件路径
|
||||
UploadDirectory: "/tmp/uploads/x_admin_go/",
|
||||
// Redis源配置
|
||||
RedisUrl: "redis://localhost:6379",
|
||||
// RedisPoolSize: 100,
|
||||
RedisMaxIdleConns: 80,
|
||||
RedisConnMaxLifetime: 60 * time.Second,
|
||||
// 数据源配置
|
||||
DatabaseUrl: "x_admin:x_admin@tcp(localhost:3306)/x_admin?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
DbTablePrefix: "x_",
|
||||
DbDefaultStringSize: 256,
|
||||
DbMaxIdleConns: 10,
|
||||
DbMaxOpenConns: 100,
|
||||
// 连接可复用的最大时间(秒:默认28800秒)
|
||||
DbConnMaxLifetimeSeconds: 28800,
|
||||
// 全局配置
|
||||
// 版本
|
||||
Version: "v1.1.0",
|
||||
// 系统加密字符
|
||||
Secret: "UVTIyzCy",
|
||||
|
||||
// Redis键前缀
|
||||
RedisPrefix: "x:",
|
||||
// 上传图片限制
|
||||
UploadImageSize: 1024 * 1024 * 10,
|
||||
// 上传视频限制
|
||||
UploadVideoSize: 1024 * 1024 * 30,
|
||||
// 上传图片扩展
|
||||
UploadImageExt: []string{"png", "jpg", "jpeg", "gif", "ico", "bmp", "webp", "avif"},
|
||||
// 上传视频扩展
|
||||
UploadVideoExt: []string{"mp4", "mp3", "avi", "flv", "rmvb", "mov"},
|
||||
}
|
||||
err = viper.ReadInConfig()
|
||||
err := viper.ReadInConfig()
|
||||
if err != nil {
|
||||
log.Fatal("loadConfig ReadInConfig err:", err)
|
||||
}
|
||||
|
||||
err = viper.Unmarshal(&config)
|
||||
if err != nil {
|
||||
log.Fatal("loadConfig Unmarshal err:", err)
|
||||
}
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
func init() {
|
||||
// fmt.Println(Config)
|
||||
fmt.Println("AppConfig:", AppConfig)
|
||||
fmt.Println("DBConfig:", DBConfig)
|
||||
fmt.Println("RedisConfig:", RedisConfig)
|
||||
fmt.Println("FileConfig:", FileConfig)
|
||||
}
|
||||
|
||||
// loadConfig 加载配置
|
||||
// func loadConfig(envPath string) envConfig {
|
||||
// var cfgPath string
|
||||
// flag.StringVar(&cfgPath, "c", "", "config file envPath.")
|
||||
// flag.Parse()
|
||||
// if cfgPath == "" {
|
||||
// viper.AddConfigPath(envPath)
|
||||
// viper.SetConfigFile(".env")
|
||||
// } else {
|
||||
// viper.SetConfigFile(cfgPath)
|
||||
// }
|
||||
// viper.AutomaticEnv()
|
||||
// err := viper.ReadInConfig()
|
||||
// if err != nil {
|
||||
// log.Fatal("loadConfig ReadInConfig err:", err)
|
||||
// }
|
||||
// err = viper.Unmarshal(&config)
|
||||
// if err != nil {
|
||||
// log.Fatal("loadConfig Unmarshal err:", err)
|
||||
// }
|
||||
// return config
|
||||
// }
|
||||
|
26
server/config/db.go
Normal file
26
server/config/db.go
Normal file
@@ -0,0 +1,26 @@
|
||||
package config
|
||||
|
||||
import "time"
|
||||
|
||||
type dbConfig struct {
|
||||
Type string `mapstructure:"TYPE"` // 数据库类型:MySQL, PostgreSQL, GaussDB, SQLite, SQLServer, TiDB
|
||||
Dsn string `mapstructure:"DSN"` // 数据库
|
||||
MaxOpenConns int `mapstructure:"MAX_OPEN_CONNS"` // 数据库连接池最大值
|
||||
MaxIdleConns int `mapstructure:"MAX_IDLE_CONNS"` // 数据库空闲连接池最大值
|
||||
ConnMaxLifetimeSeconds int `mapstructure:"CONN_MAX_LIFETIME_SECONDS"` // 连接可复用的最大时间(秒:默认28800秒)
|
||||
TablePrefix string `mapstructure:"TABLE_PREFIX"` // 数据库表前缀
|
||||
SlowThreshold time.Duration `mapstructure:"SLOW_THRESHOLD"` // 数据库慢查询阈值(秒:默认1秒)
|
||||
LogLevel string `mapstructure:"LOG_LEVEL"` // 数据库日志级别
|
||||
DefaultStringSize uint `mapstructure:"DEFAULT_STRING_SIZE"` // 数据库string类型字段的默认长度:256
|
||||
}
|
||||
|
||||
var DBConfig = dbConfig{
|
||||
Type: "mysql",
|
||||
Dsn: "root:123456@tcp(127.0.0.1:3306)/x_admin?charset=utf8mb4&parseTime=True&loc=Local",
|
||||
MaxOpenConns: 100,
|
||||
MaxIdleConns: 10,
|
||||
ConnMaxLifetimeSeconds: 60 * 60 * 24,
|
||||
TablePrefix: "x_",
|
||||
SlowThreshold: 1 * time.Second,
|
||||
LogLevel: "info",
|
||||
}
|
23
server/config/file.go
Normal file
23
server/config/file.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package config
|
||||
|
||||
type fileConfig struct {
|
||||
UploadDirectory string `mapstructure:"UPLOAD_DIRECTORY"` // 文件目录
|
||||
PublicPrefix string `mapstructure:"PUBLIC_PREFIX"` // 资源访问前缀
|
||||
UploadImageSize int64 `mapstructure:"UPLOAD_IMAGE_SIZE"` // 上传图片大小限制
|
||||
UploadVideoSize int64 `mapstructure:"UPLOAD_VIDEO_SIZE"` // 上传视频大小限制
|
||||
UploadImageExt []string `mapstructure:"UPLOAD_IMAGE_EXT"` // 上传图片扩展
|
||||
UploadVideoExt []string `mapstructure:"UPLOAD_VIDEO_EXT"` // 上传视频扩展
|
||||
}
|
||||
|
||||
var FileConfig = fileConfig{
|
||||
// 资源访问前缀
|
||||
PublicPrefix: "/api/uploads",
|
||||
// 上传文件路径
|
||||
UploadDirectory: "/tmp/uploads/x_admin_go/",
|
||||
UploadImageSize: 10 * 1024 * 1024,
|
||||
UploadVideoSize: 30 * 1024 * 1024,
|
||||
// 上传图片扩展
|
||||
UploadImageExt: []string{"png", "jpg", "jpeg", "gif", "ico", "bmp", "webp", "avif"},
|
||||
// 上传视频扩展
|
||||
UploadVideoExt: []string{"mp4", "mp3", "avi", "flv", "rmvb", "mov"},
|
||||
}
|
20
server/config/redis.go
Normal file
20
server/config/redis.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package config
|
||||
|
||||
import "time"
|
||||
|
||||
type redisConfig struct {
|
||||
Url string `mapstructure:"URL"` // Redis源配置: redis://:@127.0.0.1:6379/0
|
||||
PoolSize int `mapstructure:"POOL_SIZE"` // Redis连接池大小
|
||||
MaxIdleConns int `mapstructure:"MAX_IDLE_CONNS"` // Redis空闲连接池最大值
|
||||
ConnMaxLifetime time.Duration `mapstructure:"CONN_MAX_LIFETIME"` // Redis连接可复用的最大时间(秒:默认60秒)
|
||||
RedisPrefix string `mapstructure:"REDIS_PREFIX"` // Redis键前缀: x:
|
||||
}
|
||||
|
||||
var RedisConfig = redisConfig{
|
||||
Url: "redis://:@127.0.0.1:6379/0",
|
||||
PoolSize: 100,
|
||||
MaxIdleConns: 10,
|
||||
ConnMaxLifetime: 60 * time.Second,
|
||||
// 默认x:
|
||||
RedisPrefix: "x:",
|
||||
}
|
@@ -24,11 +24,14 @@ func initMysql() *gorm.DB {
|
||||
slowThreshold := time.Second
|
||||
ignoreRecordNotFoundError := true
|
||||
logLevel := logger.Warn
|
||||
if config.Config.GinMode == "debug" {
|
||||
if config.DBConfig.LogLevel == "info" {
|
||||
logLevel = logger.Info
|
||||
slowThreshold = 200 * time.Millisecond
|
||||
ignoreRecordNotFoundError = false
|
||||
}
|
||||
if config.DBConfig.SlowThreshold > 0 {
|
||||
slowThreshold = config.DBConfig.SlowThreshold
|
||||
}
|
||||
|
||||
logger := logger.New(
|
||||
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
|
||||
logger.Config{
|
||||
@@ -40,13 +43,13 @@ func initMysql() *gorm.DB {
|
||||
)
|
||||
// 初始化会话
|
||||
db, err := gorm.Open(mysql.New(mysql.Config{
|
||||
DSN: config.Config.DatabaseUrl, // DSN data source name
|
||||
DefaultStringSize: config.Config.DbDefaultStringSize, // string 类型字段的默认长度
|
||||
DSN: config.DBConfig.Dsn, // DSN data source name
|
||||
DefaultStringSize: config.DBConfig.DefaultStringSize, // string 类型字段的默认长度
|
||||
SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
|
||||
}), &gorm.Config{
|
||||
SkipDefaultTransaction: true, // 禁用默认事务
|
||||
NamingStrategy: schema.NamingStrategy{
|
||||
TablePrefix: config.Config.DbTablePrefix, // 表名前缀
|
||||
TablePrefix: config.DBConfig.TablePrefix, // 表名前缀
|
||||
SingularTable: true, // 使用单一表名, eg. `User` => `user`
|
||||
},
|
||||
DisableForeignKeyConstraintWhenMigrating: true, // 禁用自动创建外键约束
|
||||
@@ -61,11 +64,11 @@ func initMysql() *gorm.DB {
|
||||
log.Fatal("initMysql db.DB err:", err)
|
||||
}
|
||||
// 数据库空闲连接池最大值
|
||||
sqlDB.SetMaxIdleConns(config.Config.DbMaxIdleConns)
|
||||
sqlDB.SetMaxIdleConns(config.DBConfig.MaxIdleConns)
|
||||
// 数据库连接池最大值
|
||||
sqlDB.SetMaxOpenConns(config.Config.DbMaxOpenConns)
|
||||
sqlDB.SetMaxOpenConns(config.DBConfig.MaxOpenConns)
|
||||
// 连接可复用的最大时间
|
||||
sqlDB.SetConnMaxLifetime(time.Duration(config.Config.DbConnMaxLifetimeSeconds) * time.Second)
|
||||
sqlDB.SetConnMaxLifetime(time.Duration(config.DBConfig.ConnMaxLifetimeSeconds) * time.Second)
|
||||
return db
|
||||
}
|
||||
|
||||
|
@@ -13,13 +13,13 @@ var Redis = initRedis()
|
||||
|
||||
// initRedis 初始化redis客户端
|
||||
func initRedis() *redis.Client {
|
||||
opt, err := redis.ParseURL(config.Config.RedisUrl)
|
||||
opt, err := redis.ParseURL(config.RedisConfig.Url)
|
||||
if err != nil {
|
||||
log.Fatal("initRedis redis.ParseURL err: ", err)
|
||||
}
|
||||
// opt.PoolSize = config.Config.RedisPoolSize
|
||||
opt.MaxIdleConns = config.Config.RedisMaxIdleConns
|
||||
opt.ConnMaxLifetime = config.Config.RedisConnMaxLifetime
|
||||
opt.MaxIdleConns = config.RedisConfig.MaxIdleConns
|
||||
opt.ConnMaxLifetime = config.RedisConfig.ConnMaxLifetime
|
||||
|
||||
client := redis.NewClient(opt)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
|
||||
|
@@ -27,11 +27,11 @@ var staticFs embed.FS
|
||||
// initRouter 初始化router
|
||||
func initRouter() *gin.Engine {
|
||||
// 初始化gin
|
||||
gin.SetMode(config.Config.GinMode)
|
||||
gin.SetMode(config.AppConfig.GinMode)
|
||||
r := gin.New()
|
||||
r.MaxMultipartMemory = 8 << 20 // 8 MiB
|
||||
// 设置静态路径
|
||||
r.Static(config.Config.PublicPrefix, config.Config.UploadDirectory)
|
||||
r.Static(config.FileConfig.PublicPrefix, config.FileConfig.UploadDirectory)
|
||||
|
||||
staticHttpFs := http.FS(staticFs)
|
||||
r.GET("/api/static/*filepath", func(c *gin.Context) {
|
||||
@@ -44,7 +44,7 @@ func initRouter() *gin.Engine {
|
||||
r.Use(gin.Logger(), middleware.Cors(), middleware.ErrorRecover())
|
||||
|
||||
// 演示模式
|
||||
if config.Config.DisallowModify {
|
||||
if config.AppConfig.DisallowModify {
|
||||
r.Use(middleware.ShowMode())
|
||||
}
|
||||
// 特殊异常处理
|
||||
@@ -61,7 +61,7 @@ func initRouter() *gin.Engine {
|
||||
// initServer 初始化server
|
||||
func initServer(router *gin.Engine) *http.Server {
|
||||
return &http.Server{
|
||||
Addr: ":" + strconv.Itoa(config.Config.ServerPort),
|
||||
Addr: ":" + strconv.Itoa(config.AppConfig.Port),
|
||||
Handler: router,
|
||||
ReadTimeout: 10 * time.Second,
|
||||
WriteTimeout: 100 * time.Second,
|
||||
@@ -104,7 +104,7 @@ func main() {
|
||||
fmt.Println("格式化文档注释:", "swag fmt")
|
||||
fmt.Println("生成文档:", "swag init")
|
||||
|
||||
fmt.Printf("文档: http://localhost:%v/swagger/index.html", config.Config.ServerPort)
|
||||
fmt.Printf("文档: http://localhost:%v/swagger/index.html", config.AppConfig.Port)
|
||||
// 初始化server
|
||||
s := initServer(router)
|
||||
// 运行服务
|
||||
|
@@ -109,7 +109,7 @@ func RecordLog(title string, reqTypes ...requestType) gin.HandlerFunc {
|
||||
}()
|
||||
// 执行方法
|
||||
c.Next()
|
||||
if config.Config.GinMode != "release" {
|
||||
if config.AppConfig.GinMode == "debug" {
|
||||
return
|
||||
}
|
||||
if len(c.Errors) > 0 {
|
||||
|
@@ -61,7 +61,7 @@ func (sd storageDriver) Upload(file *multipart.FileHeader, folder string, fileTy
|
||||
func (sd storageDriver) localUpload(file *multipart.FileHeader, key string, folder string) (e error) {
|
||||
// TODO: 临时方法,后续调整
|
||||
// 映射目录
|
||||
directory := config.Config.UploadDirectory
|
||||
directory := config.FileConfig.UploadDirectory
|
||||
// 打开源文件
|
||||
src, err := file.Open()
|
||||
if err != nil {
|
||||
@@ -113,19 +113,19 @@ func (sd storageDriver) checkFile(file *multipart.FileHeader, fileType int) (e e
|
||||
switch fileType {
|
||||
case 10:
|
||||
// 图片文件
|
||||
if !util.ToolsUtil.Contains(config.Config.UploadImageExt, fileExt) {
|
||||
if !util.ToolsUtil.Contains(config.FileConfig.UploadImageExt, fileExt) {
|
||||
return response.Failed.SetMessage("不被支持的图片扩展: " + fileExt)
|
||||
}
|
||||
if fileSize > config.Config.UploadImageSize {
|
||||
return response.Failed.SetMessage("上传图片不能超出限制: " + strconv.FormatInt(config.Config.UploadImageSize/1024/1024, 10) + "M")
|
||||
if fileSize > config.FileConfig.UploadImageSize {
|
||||
return response.Failed.SetMessage("上传图片不能超出限制: " + strconv.FormatInt(config.FileConfig.UploadImageSize/1024/1024, 10) + "M")
|
||||
}
|
||||
case 20:
|
||||
// 视频文件
|
||||
if !util.ToolsUtil.Contains(config.Config.UploadVideoExt, fileExt) {
|
||||
if !util.ToolsUtil.Contains(config.FileConfig.UploadVideoExt, fileExt) {
|
||||
return response.Failed.SetMessage("不被支持的视频扩展: " + fileExt)
|
||||
}
|
||||
if fileSize > config.Config.UploadVideoSize {
|
||||
return response.Failed.SetMessage("上传视频不能超出限制: " + strconv.FormatInt(config.Config.UploadVideoSize/1024/1024, 10) + "M")
|
||||
if fileSize > config.FileConfig.UploadVideoSize {
|
||||
return response.Failed.SetMessage("上传视频不能超出限制: " + strconv.FormatInt(config.FileConfig.UploadVideoSize/1024/1024, 10) + "M")
|
||||
}
|
||||
default:
|
||||
core.Logger.Errorf("storageDriver.checkFile fileType err: err=[unsupported fileType]")
|
||||
|
@@ -73,7 +73,7 @@ func (albSrv albumService) AlbumList(page request.PageReq, listReq commonSchema.
|
||||
engine := "local"
|
||||
for i := 0; i < len(albumResps); i++ {
|
||||
if engine == "local" {
|
||||
albumResps[i].Path = path.Join(config.Config.PublicPrefix, albums[i].Uri)
|
||||
albumResps[i].Path = path.Join(config.FileConfig.PublicPrefix, albums[i].Uri)
|
||||
} else {
|
||||
// TODO: 其他engine
|
||||
}
|
||||
|
@@ -33,7 +33,7 @@ func (iSrv indexService) Console() (res map[string]interface{}, e error) {
|
||||
}
|
||||
version := map[string]interface{}{
|
||||
"name": name,
|
||||
"version": config.Config.Version,
|
||||
"version": config.AppConfig.Version,
|
||||
"website": "x.adtk.cn",
|
||||
"based": "Vue3.x、ElementUI、MySQL",
|
||||
"channel": map[string]string{
|
||||
@@ -94,7 +94,7 @@ func (iSrv indexService) Config() (res map[string]interface{}, e error) {
|
||||
"webLogo": util.UrlUtil.ToAbsoluteUrl(website["logo"]),
|
||||
"webFavicon": util.UrlUtil.ToAbsoluteUrl(website["favicon"]),
|
||||
"webBackdrop": util.UrlUtil.ToAbsoluteUrl(website["backdrop"]),
|
||||
"ossDomain": config.Config.OssDomain,
|
||||
"ossDomain": config.AppConfig.OssDomain,
|
||||
"copyright": copyright,
|
||||
}, nil
|
||||
}
|
||||
|
@@ -273,7 +273,7 @@ func (genSrv generateService) EditTable(editReq generatorSchema.EditTableReq) (e
|
||||
}
|
||||
convert_util.Copy(&genTable, editReq)
|
||||
err = genSrv.db.Transaction(func(tx *gorm.DB) error {
|
||||
genTable.SubTableName = strings.Replace(editReq.SubTableName, config.Config.DbTablePrefix, "", 1)
|
||||
genTable.SubTableName = strings.Replace(editReq.SubTableName, config.DBConfig.TablePrefix, "", 1)
|
||||
txErr := tx.Save(&genTable).Error
|
||||
if te := response.CheckErr(txErr, "更新失败"); te != nil {
|
||||
return te
|
||||
|
@@ -170,13 +170,13 @@ func (gu genUtil) InitColumn(tableId uint, column gen_model.GenTableColumn) gen_
|
||||
|
||||
// ToModuleName 表名转业务名
|
||||
func (gu genUtil) ToModuleName(name string) string {
|
||||
names := strings.Split(name, config.Config.DbTablePrefix)
|
||||
names := strings.Split(name, config.DBConfig.TablePrefix)
|
||||
return names[len(names)-1]
|
||||
}
|
||||
|
||||
// ToClassName 表名转类名
|
||||
func (gu genUtil) ToClassName(name string) string {
|
||||
tablePrefix := config.Config.DbTablePrefix
|
||||
tablePrefix := config.DBConfig.TablePrefix
|
||||
name = strings.TrimPrefix(name, tablePrefix)
|
||||
|
||||
return util.StringUtil.ToCamelCase(name)
|
||||
|
@@ -75,7 +75,7 @@ func (ru redisUtil) DBSize() int64 {
|
||||
// Set 设置键值对
|
||||
func (ru redisUtil) Set(key string, value interface{}, timeSec int) bool {
|
||||
err := ru.redis.Set(context.Background(),
|
||||
config.Config.RedisPrefix+key, value, time.Duration(timeSec)*time.Second).Err()
|
||||
config.RedisConfig.RedisPrefix+key, value, time.Duration(timeSec)*time.Second).Err()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.Set err: err=[%+v]", err)
|
||||
return false
|
||||
@@ -85,7 +85,7 @@ func (ru redisUtil) Set(key string, value interface{}, timeSec int) bool {
|
||||
|
||||
// Get 获取key的值
|
||||
func (ru redisUtil) Get(key string) string {
|
||||
res, err := ru.redis.Get(context.Background(), config.Config.RedisPrefix+key).Result()
|
||||
res, err := ru.redis.Get(context.Background(), config.RedisConfig.RedisPrefix+key).Result()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.Get err: err=[%+v]", err)
|
||||
return ""
|
||||
@@ -95,7 +95,7 @@ func (ru redisUtil) Get(key string) string {
|
||||
|
||||
// SSet 将数据放入set缓存
|
||||
func (ru redisUtil) SSet(key string, values ...interface{}) bool {
|
||||
err := ru.redis.SAdd(context.Background(), config.Config.RedisPrefix+key, values...).Err()
|
||||
err := ru.redis.SAdd(context.Background(), config.RedisConfig.RedisPrefix+key, values...).Err()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.SSet err: err=[%+v]", err)
|
||||
return false
|
||||
@@ -105,7 +105,7 @@ func (ru redisUtil) SSet(key string, values ...interface{}) bool {
|
||||
|
||||
// SGet 根据key获取Set中的所有值
|
||||
func (ru redisUtil) SGet(key string) []string {
|
||||
res, err := ru.redis.SMembers(context.Background(), config.Config.RedisPrefix+key).Result()
|
||||
res, err := ru.redis.SMembers(context.Background(), config.RedisConfig.RedisPrefix+key).Result()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.SGet err: err=[%+v]", err)
|
||||
return []string{}
|
||||
@@ -115,7 +115,7 @@ func (ru redisUtil) SGet(key string) []string {
|
||||
|
||||
// HMSet 设置key, 通过字典的方式设置多个field, value对
|
||||
func (ru redisUtil) HMSet(key string, mapping map[string]string, timeSec int) bool {
|
||||
err := ru.redis.HSet(context.Background(), config.Config.RedisPrefix+key, mapping).Err()
|
||||
err := ru.redis.HSet(context.Background(), config.RedisConfig.RedisPrefix+key, mapping).Err()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.HMSet err: err=[%+v]", err)
|
||||
return false
|
||||
@@ -135,7 +135,7 @@ func (ru redisUtil) HSet(key string, field string, value string, timeSec int) bo
|
||||
|
||||
// HGet 获取key中field域的值
|
||||
func (ru redisUtil) HGet(key string, field string) string {
|
||||
res, err := ru.redis.HGet(context.Background(), config.Config.RedisPrefix+key, field).Result()
|
||||
res, err := ru.redis.HGet(context.Background(), config.RedisConfig.RedisPrefix+key, field).Result()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.HGet err: err=[%+v]", err)
|
||||
return ""
|
||||
@@ -145,7 +145,7 @@ func (ru redisUtil) HGet(key string, field string) string {
|
||||
|
||||
// HExists 判断key中有没有field域名
|
||||
func (ru redisUtil) HExists(key string, field string) bool {
|
||||
res, err := ru.redis.HExists(context.Background(), config.Config.RedisPrefix+key, field).Result()
|
||||
res, err := ru.redis.HExists(context.Background(), config.RedisConfig.RedisPrefix+key, field).Result()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.HExists err: err=[%+v]", err)
|
||||
return false
|
||||
@@ -155,7 +155,7 @@ func (ru redisUtil) HExists(key string, field string) bool {
|
||||
|
||||
// HDel 删除hash表中的值
|
||||
func (ru redisUtil) HDel(key string, fields ...string) bool {
|
||||
err := ru.redis.HDel(context.Background(), config.Config.RedisPrefix+key, fields...).Err()
|
||||
err := ru.redis.HDel(context.Background(), config.RedisConfig.RedisPrefix+key, fields...).Err()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.HDel err: err=[%+v]", err)
|
||||
return false
|
||||
@@ -176,7 +176,7 @@ func (ru redisUtil) Exists(keys ...string) int64 {
|
||||
|
||||
// Expire 指定缓存失效时间
|
||||
func (ru redisUtil) Expire(key string, timeSec int) bool {
|
||||
err := ru.redis.Expire(context.Background(), config.Config.RedisPrefix+key, time.Duration(timeSec)*time.Second).Err()
|
||||
err := ru.redis.Expire(context.Background(), config.RedisConfig.RedisPrefix+key, time.Duration(timeSec)*time.Second).Err()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.Expire err: err=[%+v]", err)
|
||||
return false
|
||||
@@ -186,7 +186,7 @@ func (ru redisUtil) Expire(key string, timeSec int) bool {
|
||||
|
||||
// TTL 根据key获取过期时间
|
||||
func (ru redisUtil) TTL(key string) int {
|
||||
td, err := ru.redis.TTL(context.Background(), config.Config.RedisPrefix+key).Result()
|
||||
td, err := ru.redis.TTL(context.Background(), config.RedisConfig.RedisPrefix+key).Result()
|
||||
if err != nil {
|
||||
core.Logger.Errorf("redisUtil.TTL err: err=[%+v]", err)
|
||||
return 0
|
||||
@@ -208,7 +208,7 @@ func (ru redisUtil) Del(keys ...string) bool {
|
||||
// toFullKeys 为keys批量增加前缀
|
||||
func (ru redisUtil) toFullKeys(keys []string) (fullKeys []string) {
|
||||
for _, k := range keys {
|
||||
fullKeys = append(fullKeys, config.Config.RedisPrefix+k)
|
||||
fullKeys = append(fullKeys, config.RedisConfig.RedisPrefix+k)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@@ -11,6 +11,6 @@ func TestCheckSafeString(t *testing.T) {
|
||||
}
|
||||
// 测试包含特殊字符的字符串
|
||||
if !StringUtil.CheckSafeString("abc123!") {
|
||||
t.Log("包含特殊字符的字符串")
|
||||
t.Errorf("CheckSafeString failed, input: %s", "abc123!")
|
||||
}
|
||||
}
|
||||
|
@@ -49,7 +49,7 @@ func (tu toolsUtil) MakeMd5(data string) string {
|
||||
func (tu toolsUtil) MakeToken() string {
|
||||
ms := time.Now().UnixMilli()
|
||||
token := tu.MakeMd5(tu.MakeUuid() + strconv.FormatInt(ms, 10) + tu.RandomString(8))
|
||||
tokenSecret := token + config.Config.Secret
|
||||
tokenSecret := token + config.AppConfig.Secret
|
||||
return tu.MakeMd5(tokenSecret) + tu.RandomString(6)
|
||||
}
|
||||
|
||||
|
@@ -11,7 +11,7 @@ import (
|
||||
var (
|
||||
UrlUtil = urlUtil{}
|
||||
|
||||
publicPrefix = config.Config.PublicPrefix //"/api/uploads"
|
||||
publicPrefix = config.FileConfig.PublicPrefix //"/api/uploads"
|
||||
)
|
||||
|
||||
// urlUtil 文件路径处理工具
|
||||
|
Reference in New Issue
Block a user