diff --git a/Makefile b/Makefile index a364bcc0..d2090ed6 100644 --- a/Makefile +++ b/Makefile @@ -63,10 +63,8 @@ clean: fmt: @echo Formatting... - @go fmt ./global/... @go fmt ./internal/... @go fmt ./pkg/... - @go vet -composites=false ./global/... @go vet -composites=false ./internal/... @go vet -composites=false ./pkg/... diff --git a/config.yaml.sample b/config.yaml.sample index e765a454..cd0c55d1 100644 --- a/config.yaml.sample +++ b/config.yaml.sample @@ -14,7 +14,7 @@ Server: # 服务设置 Features: Default: ["Alipay", "Zinc", "MySQL", "Redis", "MinIO", "LoggerFile"] Develop: ["Sms", "Zinc", "MySQL", "AliOSS", "LoggerZinc"] - Slim: ["Zinc", "MySQL", "Redis", "MinIO", "LoggerFile"] + Slim: ["Zinc", "MySQL", "Redis", "LocalOSS", "LoggerFile"] Sms: "SmsJuhe" SmsJuhe: Key: diff --git a/global/db.go b/global/db.go deleted file mode 100644 index 3667cd3b..00000000 --- a/global/db.go +++ /dev/null @@ -1,11 +0,0 @@ -package global - -import ( - "github.com/go-redis/redis/v8" - "gorm.io/gorm" -) - -var ( - DBEngine *gorm.DB - Redis *redis.Client -) diff --git a/global/setting.go b/global/setting.go deleted file mode 100644 index 73a3b8be..00000000 --- a/global/setting.go +++ /dev/null @@ -1,36 +0,0 @@ -package global - -import ( - "sync" - - "github.com/rocboss/paopao-ce/pkg/setting" - "github.com/sirupsen/logrus" -) - -var ( - Features *setting.FeaturesSettingS - ServerSetting *setting.ServerSettingS - AppSetting *setting.AppSettingS - MySQLSetting *setting.MySQLSettingS - RedisSetting *setting.RedisSettingS - SmsJuheSetting *setting.SmsJuheSettings - AlipaySetting *setting.AlipaySettingS - ZincSetting *setting.ZincSettingS - AliOSSSetting *setting.AliOSSSettingS - MinIOSetting *setting.MinIOSettingS - S3Setting *setting.S3SettingS - LocalOSSSetting *setting.LocalOSSSettingS - JWTSetting *setting.JWTSettingS - LoggerFileSetting *setting.LoggerFileSettingS - LoggerZincSetting *setting.LoggerZincSettingS - Logger *logrus.Logger - Mutex *sync.Mutex -) - -func Cfg(key string) (string, bool) { - return Features.Cfg(key) -} - -func CfgIf(expression string) bool { - return Features.CfgIf(expression) -} diff --git a/init.go b/init.go deleted file mode 100644 index d89fe701..00000000 --- a/init.go +++ /dev/null @@ -1,132 +0,0 @@ -package main - -import ( - "flag" - "log" - "strings" - "sync" - "time" - - "github.com/go-redis/redis/v8" - "github.com/rocboss/paopao-ce/global" - "github.com/rocboss/paopao-ce/internal/model" - "github.com/rocboss/paopao-ce/internal/routers/api" - "github.com/rocboss/paopao-ce/internal/service" - "github.com/rocboss/paopao-ce/pkg/logger" - "github.com/rocboss/paopao-ce/pkg/setting" - "github.com/rocboss/paopao-ce/pkg/zinc" -) - -var ( - noDefaultFeatures bool - features suites -) - -type suites []string - -func (s *suites) String() string { - return strings.Join(*s, ",") -} - -func (s *suites) Set(value string) error { - for _, item := range strings.Split(value, ",") { - *s = append(*s, strings.TrimSpace(item)) - } - return nil -} - -func init() { - flagParse() - - err := setupSetting() - if err != nil { - log.Fatalf("init.setupSetting err: %v", err) - } - - err = setupLogger() - if err != nil { - log.Fatalf("init.setupLogger err: %v", err) - } - - err = setupDBEngine() - if err != nil { - log.Fatalf("init.setupDBEngine err: %v", err) - } - - client := zinc.NewClient(global.ZincSetting) - service.Initialize(global.DBEngine, client) - api.Initialize() -} - -func setupSetting() error { - setting, err := setting.NewSetting() - if err != nil { - return err - } - - global.Features = setting.FeaturesFrom("Features") - if len(features) > 0 { - if err = global.Features.Use(features, noDefaultFeatures); err != nil { - return err - } - } - - objects := map[string]interface{}{ - "App": &global.AppSetting, - "Server": &global.ServerSetting, - "Alipay": &global.AlipaySetting, - "SmsJuhe": &global.SmsJuheSetting, - "LoggerFile": &global.LoggerFileSetting, - "LoggerZinc": &global.LoggerZincSetting, - "MySQL": &global.MySQLSetting, - "Zinc": &global.ZincSetting, - "Redis": &global.RedisSetting, - "JWT": &global.JWTSetting, - "AliOSS": &global.AliOSSSetting, - "MinIO": &global.MinIOSetting, - "LocalOSS": &global.LocalOSSSetting, - "S3": &global.S3Setting, - } - if err = setting.Unmarshal(objects); err != nil { - return err - } - - global.JWTSetting.Expire *= time.Second - global.ServerSetting.ReadTimeout *= time.Second - global.ServerSetting.WriteTimeout *= time.Second - global.Mutex = &sync.Mutex{} - return nil -} - -func flagParse() { - flag.BoolVar(&noDefaultFeatures, "no-default-features", false, "whether use default features") - flag.Var(&features, "features", "use special features") - flag.Parse() -} - -func setupLogger() error { - logger, err := logger.New() - if err != nil { - return err - } - global.Logger = logger - - return nil -} - -// setupDBEngine 暂时只支持MySQL -func setupDBEngine() error { - var err error - global.DBEngine, err = model.NewDBEngine(global.MySQLSetting) - if err != nil { - return err - } - - global.Redis = redis.NewClient(&redis.Options{ - Addr: global.RedisSetting.Host, - Password: global.RedisSetting.Password, - DB: global.RedisSetting.DB, - }) - - return nil -} diff --git a/internal/conf/conf.go b/internal/conf/conf.go new file mode 100644 index 00000000..49fa1f53 --- /dev/null +++ b/internal/conf/conf.go @@ -0,0 +1,97 @@ +package conf + +import ( + "log" + "sync" + "time" + + "github.com/sirupsen/logrus" +) + +var ( + loggerFileSetting *LoggerFileSettingS + loggerZincSetting *LoggerZincSettingS + mySQLSetting *MySQLSettingS + redisSetting *RedisSettingS + features *FeaturesSettingS + + ServerSetting *ServerSettingS + AppSetting *AppSettingS + SmsJuheSetting *SmsJuheSettings + AlipaySetting *AlipaySettingS + ZincSetting *ZincSettingS + AliOSSSetting *AliOSSSettingS + MinIOSetting *MinIOSettingS + S3Setting *S3SettingS + LocalOSSSetting *LocalOSSSettingS + JWTSetting *JWTSettingS + Logger *logrus.Logger + Mutex *sync.Mutex +) + +func setupSetting(suite []string, noDefault bool) error { + setting, err := NewSetting() + if err != nil { + return err + } + + features = setting.FeaturesFrom("Features") + if len(suite) > 0 { + if err = features.Use(suite, noDefault); err != nil { + return err + } + } + + objects := map[string]interface{}{ + "App": &AppSetting, + "Server": &ServerSetting, + "Alipay": &AlipaySetting, + "SmsJuhe": &SmsJuheSetting, + "LoggerFile": &loggerFileSetting, + "LoggerZinc": &loggerZincSetting, + "MySQL": &mySQLSetting, + "Zinc": &ZincSetting, + "Redis": &redisSetting, + "JWT": &JWTSetting, + "AliOSS": &AliOSSSetting, + "MinIO": &MinIOSetting, + "LocalOSS": &LocalOSSSetting, + "S3": &S3Setting, + } + if err = setting.Unmarshal(objects); err != nil { + return err + } + + JWTSetting.Expire *= time.Second + ServerSetting.ReadTimeout *= time.Second + ServerSetting.WriteTimeout *= time.Second + Mutex = &sync.Mutex{} + return nil +} + +func Initialize(suite []string, noDefault bool) { + err := setupSetting(suite, noDefault) + if err != nil { + log.Fatalf("init.setupSetting err: %v", err) + } + + setupLogger() + + err = setupDBEngine() + if err != nil { + log.Fatalf("init.setupDBEngine err: %v", err) + } +} + +// Cfg get value by key if exist +func Cfg(key string) (string, bool) { + return features.Cfg(key) +} + +// CfgIf check expression is true. if expression just have a string like +// `Sms` is mean `Sms` whether define in suite feature settings. expression like +// `Sms = SmsJuhe` is mean whether `Sms` define in suite feature settings and value +// is `SmsJuhe`` +func CfgIf(expression string) bool { + return features.CfgIf(expression) +} diff --git a/internal/conf/db.go b/internal/conf/db.go new file mode 100644 index 00000000..06dec98b --- /dev/null +++ b/internal/conf/db.go @@ -0,0 +1,74 @@ +package conf + +import ( + "fmt" + "time" + + "github.com/go-redis/redis/v8" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/gorm/schema" + "gorm.io/plugin/dbresolver" +) + +var ( + DBEngine *gorm.DB + Redis *redis.Client +) + +func newDBEngine() (*gorm.DB, error) { + newLogger := logger.New( + Logger, // io writer(日志输出的目标,前缀和日志包含的内容) + logger.Config{ + SlowThreshold: time.Second, // 慢 SQL 阈值 + LogLevel: mySQLSetting.LogLevel, // 日志级别 + IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误 + Colorful: false, // 禁用彩色打印 + }, + ) + + s := "%s:%s@tcp(%s)/%s?charset=%s&parseTime=%t&loc=Local" + db, err := gorm.Open(mysql.Open(fmt.Sprintf(s, + mySQLSetting.UserName, + mySQLSetting.Password, + mySQLSetting.Host, + mySQLSetting.DBName, + mySQLSetting.Charset, + mySQLSetting.ParseTime, + )), &gorm.Config{ + Logger: newLogger, + NamingStrategy: schema.NamingStrategy{ + TablePrefix: mySQLSetting.TablePrefix, + SingularTable: true, + }, + }) + if err != nil { + return nil, err + } + + db.Use(dbresolver.Register(dbresolver.Config{}). + SetConnMaxIdleTime(time.Hour). + SetConnMaxLifetime(24 * time.Hour). + SetMaxIdleConns(mySQLSetting.MaxIdleConns). + SetMaxOpenConns(mySQLSetting.MaxOpenConns)) + + return db, nil +} + +// setupDBEngine 暂时只支持MySQL +func setupDBEngine() error { + var err error + DBEngine, err = newDBEngine() + if err != nil { + return err + } + + Redis = redis.NewClient(&redis.Options{ + Addr: redisSetting.Host, + Password: redisSetting.Password, + DB: redisSetting.DB, + }) + + return nil +} diff --git a/internal/conf/logger.go b/internal/conf/logger.go new file mode 100644 index 00000000..fe36a341 --- /dev/null +++ b/internal/conf/logger.go @@ -0,0 +1,86 @@ +package conf + +import ( + "encoding/json" + "fmt" + "io" + "time" + + "github.com/sirupsen/logrus" + "gopkg.in/natefinch/lumberjack.v2" + "gopkg.in/resty.v1" +) + +type zincLogIndex struct { + Index map[string]string `json:"index"` +} + +type zincLogData struct { + Time time.Time `json:"time"` + Level logrus.Level `json:"level"` + Message string `json:"message"` + Data logrus.Fields `json:"data"` +} + +type zincLogHook struct { + host string + index string + user string + password string +} + +func (h *zincLogHook) Fire(entry *logrus.Entry) error { + index := &zincLogIndex{ + Index: map[string]string{ + "_index": h.index, + }, + } + indexBytes, _ := json.Marshal(index) + + data := &zincLogData{ + Time: entry.Time, + Level: entry.Level, + Message: entry.Message, + Data: entry.Data, + } + dataBytes, _ := json.Marshal(data) + + logStr := string(indexBytes) + "\n" + string(dataBytes) + "\n" + client := resty.New() + + if _, err := client.SetDisableWarn(true).R(). + SetHeader("Content-Type", "application/json"). + SetBasicAuth(h.user, h.password). + SetBody(logStr). + Post(h.host); err != nil { + fmt.Println(err.Error()) + } + + return nil +} + +func (h *zincLogHook) Levels() []logrus.Level { + return logrus.AllLevels +} + +func setupLogger() { + Logger = logrus.New() + Logger.Formatter = &logrus.JSONFormatter{} + + if CfgIf("LoggerFile") { + Logger.Out = &lumberjack.Logger{ + Filename: loggerFileSetting.SavePath + "/" + loggerFileSetting.FileName + loggerFileSetting.FileExt, + MaxSize: 600, + MaxAge: 10, + LocalTime: true, + } + } else if CfgIf("LoggerZinc") { + Logger.Out = io.Discard + Logger.AddHook(&zincLogHook{ + host: loggerZincSetting.Host, + index: loggerZincSetting.Index, + user: loggerZincSetting.User, + password: loggerZincSetting.Password, + }) + } +} diff --git a/pkg/setting/seting_test.go b/internal/conf/seting_test.go similarity index 99% rename from pkg/setting/seting_test.go rename to internal/conf/seting_test.go index c72b2a59..895a69ad 100644 --- a/pkg/setting/seting_test.go +++ b/internal/conf/seting_test.go @@ -1,4 +1,4 @@ -package setting +package conf import ( "testing" diff --git a/pkg/setting/settting.go b/internal/conf/settting.go similarity index 98% rename from pkg/setting/settting.go rename to internal/conf/settting.go index d8abaffd..8b6f8fbc 100644 --- a/pkg/setting/settting.go +++ b/internal/conf/settting.go @@ -1,4 +1,4 @@ -package setting +package conf import ( "strings" @@ -218,7 +218,7 @@ func (f *FeaturesSettingS) flatFeatures(suite []string) []string { return features } -// Cfg get value by key if exsit +// Cfg get value by key if exist func (f *FeaturesSettingS) Cfg(key string) (string, bool) { key = strings.ToLower(key) value, exist := f.features[key] diff --git a/internal/dao/dao.go b/internal/dao/dao.go index 47530fb3..7165cbdb 100644 --- a/internal/dao/dao.go +++ b/internal/dao/dao.go @@ -3,7 +3,7 @@ package dao import ( "github.com/aliyun/aliyun-oss-go-sdk/oss" "github.com/minio/minio-go/v7" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/pkg/zinc" "gorm.io/gorm" @@ -53,22 +53,22 @@ func NewDataService(engine *gorm.DB, zinc *zinc.ZincClient) core.DataService { } func NewObjectStorageService() (oss core.ObjectStorageService) { - if global.CfgIf("AliOSS") { + if conf.CfgIf("AliOSS") { oss = newAliossServent() - global.Logger.Infoln("use AliOSS as object storage") - } else if global.CfgIf("MinIO") { + conf.Logger.Infoln("use AliOSS as object storage") + } else if conf.CfgIf("MinIO") { oss = newMinioServeant() - global.Logger.Infoln("use MinIO as object storage") - } else if global.CfgIf("S3") { + conf.Logger.Infoln("use MinIO as object storage") + } else if conf.CfgIf("S3") { oss = newS3Servent() - global.Logger.Infoln("use S3 as object storage") - } else if global.CfgIf("LocalOSS") { + conf.Logger.Infoln("use S3 as object storage") + } else if conf.CfgIf("LocalOSS") { oss = newLocalossServent() - global.Logger.Infoln("use LocalOSS as object storage") + conf.Logger.Infoln("use LocalOSS as object storage") } else { // default use AliOSS oss = newAliossServent() - global.Logger.Infoln("use default AliOSS as object storage") + conf.Logger.Infoln("use default AliOSS as object storage") } return } diff --git a/internal/dao/oss_alioss.go b/internal/dao/oss_alioss.go index b3669480..9fd6083a 100644 --- a/internal/dao/oss_alioss.go +++ b/internal/dao/oss_alioss.go @@ -6,18 +6,18 @@ import ( "strings" "github.com/aliyun/aliyun-oss-go-sdk/oss" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" ) func newAliossServent() *aliossServant { - client, err := oss.New(global.AliOSSSetting.Endpoint, global.AliOSSSetting.AccessKeyID, global.AliOSSSetting.AccessKeySecret) + client, err := oss.New(conf.AliOSSSetting.Endpoint, conf.AliOSSSetting.AccessKeyID, conf.AliOSSSetting.AccessKeySecret) if err != nil { - global.Logger.Fatalf("alioss.New err: %v", err) + conf.Logger.Fatalf("alioss.New err: %v", err) } - bucket, err := client.Bucket(global.AliOSSSetting.Bucket) + bucket, err := client.Bucket(conf.AliOSSSetting.Bucket) if err != nil { - global.Logger.Fatalf("client.Bucket err: %v", err) + conf.Logger.Fatalf("client.Bucket err: %v", err) } return &aliossServant{ @@ -37,19 +37,19 @@ func (s *aliossServant) PutObject(objectKey string, reader io.Reader, objectSize func (s *aliossServant) SignURL(objectKey string, expiredInSec int64) (string, error) { signedURL, err := s.bucket.SignURL(objectKey, oss.HTTPGet, expiredInSec) if err != nil { - global.Logger.Errorf("client.SignURL err: %v", err) + conf.Logger.Errorf("client.SignURL err: %v", err) return "", err } ur, err := url.Parse(signedURL) if err != nil { - global.Logger.Errorf("url.Parse err: %v", err) + conf.Logger.Errorf("url.Parse err: %v", err) return "", err } epath, err := url.PathUnescape(ur.Path) if err != nil { - global.Logger.Errorf("url.PathUnescape err: %v", err) + conf.Logger.Errorf("url.PathUnescape err: %v", err) return "", err } diff --git a/internal/dao/oss_local.go b/internal/dao/oss_local.go index 333a547d..99b98106 100644 --- a/internal/dao/oss_local.go +++ b/internal/dao/oss_local.go @@ -9,17 +9,17 @@ import ( "strings" "time" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" ) func newLocalossServent() *localossServant { - savePath, err := filepath.Abs(global.LocalOSSSetting.SavePath) + savePath, err := filepath.Abs(conf.LocalOSSSetting.SavePath) if err != nil { - global.Logger.Fatalf("get localOSS save path err: %v", err) + conf.Logger.Fatalf("get localOSS save path err: %v", err) } return &localossServant{ - savePath: savePath + "/" + global.LocalOSSSetting.Bucket + "/", + savePath: savePath + "/" + conf.LocalOSSSetting.Bucket + "/", domain: getOssDomain(), } } diff --git a/internal/dao/oss_minio.go b/internal/dao/oss_minio.go index 260ba20a..e1e80744 100644 --- a/internal/dao/oss_minio.go +++ b/internal/dao/oss_minio.go @@ -9,21 +9,21 @@ import ( "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" ) func newMinioServeant() *minioServant { // Initialize minio client object. - client, err := minio.New(global.MinIOSetting.Endpoint, &minio.Options{ - Creds: credentials.NewStaticV4(global.MinIOSetting.AccessKey, global.MinIOSetting.SecretKey, ""), - Secure: global.MinIOSetting.Secure, + client, err := minio.New(conf.MinIOSetting.Endpoint, &minio.Options{ + Creds: credentials.NewStaticV4(conf.MinIOSetting.AccessKey, conf.MinIOSetting.SecretKey, ""), + Secure: conf.MinIOSetting.Secure, }) if err != nil { - global.Logger.Fatalf("minio.New err: %v", err) + conf.Logger.Fatalf("minio.New err: %v", err) } return &minioServant{ client: client, - bucket: global.MinIOSetting.Bucket, + bucket: conf.MinIOSetting.Bucket, domain: getOssDomain(), } } @@ -33,7 +33,7 @@ func (s *minioServant) PutObject(objectKey string, reader io.Reader, objectSize if err != nil { return "", err } - global.Logger.Infoln("Successfully uploaded bytes: ", uploadInfo) + conf.Logger.Infoln("Successfully uploaded bytes: ", uploadInfo) return s.domain + objectKey, nil } func (s *minioServant) SignURL(objectKey string, expiredInSec int64) (string, error) { diff --git a/internal/dao/oss_s3.go b/internal/dao/oss_s3.go index 23eb1859..7059e429 100644 --- a/internal/dao/oss_s3.go +++ b/internal/dao/oss_s3.go @@ -3,21 +3,21 @@ package dao import ( "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" ) func newS3Servent() *s3Servant { // Initialize s3 client object use minio-go. - client, err := minio.New(global.S3Setting.Endpoint, &minio.Options{ - Creds: credentials.NewStaticV4(global.S3Setting.AccessKey, global.S3Setting.SecretKey, ""), - Secure: global.S3Setting.Secure, + client, err := minio.New(conf.S3Setting.Endpoint, &minio.Options{ + Creds: credentials.NewStaticV4(conf.S3Setting.AccessKey, conf.S3Setting.SecretKey, ""), + Secure: conf.S3Setting.Secure, }) if err != nil { - global.Logger.Fatalf("s3.New err: %v", err) + conf.Logger.Fatalf("s3.New err: %v", err) } return &s3Servant{ client: client, - bucket: global.MinIOSetting.Bucket, + bucket: conf.MinIOSetting.Bucket, domain: getOssDomain(), } } diff --git a/internal/dao/user.go b/internal/dao/user.go index 0d4c8c03..2c659210 100644 --- a/internal/dao/user.go +++ b/internal/dao/user.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "gopkg.in/resty.v1" ) @@ -127,9 +127,9 @@ func (d *dataServant) SendPhoneCaptcha(phone string) error { resp, err := client.R(). SetFormData(map[string]string{ "mobile": phone, - "tpl_id": global.SmsJuheSetting.TplID, - "tpl_value": fmt.Sprintf(global.SmsJuheSetting.TplVal, captcha, m), - "key": global.SmsJuheSetting.Key, + "tpl_id": conf.SmsJuheSetting.TplID, + "tpl_value": fmt.Sprintf(conf.SmsJuheSetting.TplVal, captcha, m), + "key": conf.SmsJuheSetting.Key, }).Post(gateway) if err != nil { return err diff --git a/internal/dao/utils.go b/internal/dao/utils.go index 2185adbe..42e1f38b 100644 --- a/internal/dao/utils.go +++ b/internal/dao/utils.go @@ -1,29 +1,29 @@ package dao import ( - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" ) func getOssDomain() string { uri := "https://" - if global.CfgIf("AliOSS") { - return uri + global.AliOSSSetting.Domain + "/" - } else if global.CfgIf("MinIO") { - if !global.MinIOSetting.Secure { + if conf.CfgIf("AliOSS") { + return uri + conf.AliOSSSetting.Domain + "/" + } else if conf.CfgIf("MinIO") { + if !conf.MinIOSetting.Secure { uri = "http://" } - return uri + global.MinIOSetting.Domain + "/" + global.MinIOSetting.Bucket + "/" - } else if global.CfgIf("S3") { - if !global.S3Setting.Secure { + return uri + conf.MinIOSetting.Domain + "/" + conf.MinIOSetting.Bucket + "/" + } else if conf.CfgIf("S3") { + if !conf.S3Setting.Secure { uri = "http://" } // TODO: will not work well need test in real world - return uri + global.S3Setting.Domain + "/" + global.S3Setting.Bucket + "/" - } else if global.CfgIf("LocalOSS") { - if !global.LocalOSSSetting.Secure { + return uri + conf.S3Setting.Domain + "/" + conf.S3Setting.Bucket + "/" + } else if conf.CfgIf("LocalOSS") { + if !conf.LocalOSSSetting.Secure { uri = "http://" } - return uri + global.LocalOSSSetting.Domain + "/oss/" + global.LocalOSSSetting.Bucket + "/" + return uri + conf.LocalOSSSetting.Domain + "/oss/" + conf.LocalOSSSetting.Bucket + "/" } - return uri + global.AliOSSSetting.Domain + "/" + return uri + conf.AliOSSSetting.Domain + "/" } diff --git a/internal/dao/wallet.go b/internal/dao/wallet.go index 272b1f5a..458d7971 100644 --- a/internal/dao/wallet.go +++ b/internal/dao/wallet.go @@ -1,7 +1,7 @@ package dao import ( - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "gorm.io/gorm" ) @@ -90,7 +90,7 @@ func (d *dataServant) HandlePostAttachmentBought(post *model.Post, user *model.U } // 对附件主新增账单 - income := int64(float64(post.AttachmentPrice) * global.AppSetting.AttachmentIncomeRate) + income := int64(float64(post.AttachmentPrice) * conf.AppSetting.AttachmentIncomeRate) if income > 0 { master := &model.User{ Model: &model.Model{ diff --git a/internal/internal.go b/internal/internal.go new file mode 100644 index 00000000..8e4ffb61 --- /dev/null +++ b/internal/internal.go @@ -0,0 +1,11 @@ +package internal + +import ( + "github.com/rocboss/paopao-ce/internal/routers/api" + "github.com/rocboss/paopao-ce/internal/service" +) + +func Initialize() { + service.Initialize() + api.Initialize() +} diff --git a/internal/middleware/jwt.go b/internal/middleware/jwt.go index d3db89f0..e8e99950 100644 --- a/internal/middleware/jwt.go +++ b/internal/middleware/jwt.go @@ -5,7 +5,7 @@ import ( "github.com/dgrijalva/jwt-go" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/pkg/app" "github.com/rocboss/paopao-ce/pkg/errcode" @@ -54,11 +54,11 @@ func JWT() gin.HandlerFunc { ID: claims.UID, }, } - user, _ = user.Get(global.DBEngine) + user, _ = user.Get(conf.DBEngine) c.Set("USER", user) // 强制下线机制 - if (global.JWTSetting.Issuer + ":" + user.Salt) != claims.Issuer { + if (conf.JWTSetting.Issuer + ":" + user.Salt) != claims.Issuer { ecode = errcode.UnauthorizedTokenTimeout } } diff --git a/internal/model/model.go b/internal/model/model.go index 67819b72..b4031dae 100644 --- a/internal/model/model.go +++ b/internal/model/model.go @@ -1,20 +1,13 @@ package model import ( - "fmt" "time" - "github.com/rocboss/paopao-ce/global" - "github.com/rocboss/paopao-ce/pkg/setting" - "gorm.io/driver/mysql" "gorm.io/gorm" - "gorm.io/gorm/logger" - "gorm.io/gorm/schema" - "gorm.io/plugin/dbresolver" "gorm.io/plugin/soft_delete" ) -// 公共Model +// Model 公共Model type Model struct { ID int64 `gorm:"primary_key" json:"id"` CreatedOn int64 `json:"created_on"` @@ -25,45 +18,6 @@ type Model struct { type ConditionsT map[string]interface{} -func NewDBEngine(databaseSetting *setting.MySQLSettingS) (*gorm.DB, error) { - newLogger := logger.New( - global.Logger, // io writer(日志输出的目标,前缀和日志包含的内容) - logger.Config{ - SlowThreshold: time.Second, // 慢 SQL 阈值 - LogLevel: databaseSetting.LogLevel, // 日志级别 - IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误 - Colorful: false, // 禁用彩色打印 - }, - ) - - s := "%s:%s@tcp(%s)/%s?charset=%s&parseTime=%t&loc=Local" - db, err := gorm.Open(mysql.Open(fmt.Sprintf(s, - databaseSetting.UserName, - databaseSetting.Password, - databaseSetting.Host, - databaseSetting.DBName, - databaseSetting.Charset, - databaseSetting.ParseTime, - )), &gorm.Config{ - Logger: newLogger, - NamingStrategy: schema.NamingStrategy{ - TablePrefix: databaseSetting.TablePrefix, - SingularTable: true, - }, - }) - if err != nil { - return nil, err - } - - db.Use(dbresolver.Register(dbresolver.Config{}). - SetConnMaxIdleTime(time.Hour). - SetConnMaxLifetime(24 * time.Hour). - SetMaxIdleConns(databaseSetting.MaxIdleConns). - SetMaxOpenConns(databaseSetting.MaxOpenConns)) - - return db, nil -} - func (m *Model) BeforeCreate(tx *gorm.DB) (err error) { nowTime := time.Now().Unix() diff --git a/internal/routers/api/attachment.go b/internal/routers/api/attachment.go index 6bceed32..13db6895 100644 --- a/internal/routers/api/attachment.go +++ b/internal/routers/api/attachment.go @@ -6,7 +6,7 @@ import ( "github.com/disintegration/imaging" "github.com/gin-gonic/gin" "github.com/gofrs/uuid" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/internal/service" "github.com/rocboss/paopao-ce/pkg/app" @@ -78,7 +78,7 @@ func UploadAttachment(c *gin.Context) { uploadType := c.Request.FormValue("type") file, fileHeader, err := c.Request.FormFile("file") if err != nil { - global.Logger.Errorf("api.UploadAttachment err: %v", err) + conf.Logger.Errorf("api.UploadAttachment err: %v", err) response.ToErrorResponse(errcode.FileUploadFailed) return } @@ -93,7 +93,7 @@ func UploadAttachment(c *gin.Context) { contentType := fileHeader.Header.Get("Content-Type") fileExt, err := GetFileExt(fileHeader.Header.Get("Content-Type")) if err != nil { - global.Logger.Errorf("GetFileExt err: %v", err) + conf.Logger.Errorf("GetFileExt err: %v", err) response.ToErrorResponse(err.(*errcode.Error)) return } @@ -104,7 +104,7 @@ func UploadAttachment(c *gin.Context) { objectUrl, err := objectStorage.PutObject(ossSavePath, file, fileHeader.Size, contentType) if err != nil { - global.Logger.Errorf("putObject err: %v", err) + conf.Logger.Errorf("putObject err: %v", err) response.ToErrorResponse(errcode.FileUploadFailed) return } @@ -130,7 +130,7 @@ func UploadAttachment(c *gin.Context) { attachment, err = service.CreateAttachment(attachment) if err != nil { - global.Logger.Errorf("service.CreateAttachment err: %v", err) + conf.Logger.Errorf("service.CreateAttachment err: %v", err) response.ToErrorResponse(errcode.FileUploadFailed) } @@ -144,7 +144,7 @@ func DownloadAttachmentPrecheck(c *gin.Context) { // 加载content content, err := service.GetPostContentByID(contentID) if err != nil { - global.Logger.Errorf("service.GetPostContentByID err: %v", err) + conf.Logger.Errorf("service.GetPostContentByID err: %v", err) response.ToErrorResponse(errcode.InvalidDownloadReq) } user, _ := c.Get("USER") @@ -152,7 +152,7 @@ func DownloadAttachmentPrecheck(c *gin.Context) { // 加载post post, err := service.GetPost(content.PostID) if err != nil { - global.Logger.Errorf("service.GetPost err: %v", err) + conf.Logger.Errorf("service.GetPost err: %v", err) response.ToResponse(gin.H{ "paid": false, }) @@ -186,7 +186,7 @@ func DownloadAttachment(c *gin.Context) { // 加载content content, err := service.GetPostContentByID(contentID) if err != nil { - global.Logger.Errorf("service.GetPostContentByID err: %v", err) + conf.Logger.Errorf("service.GetPostContentByID err: %v", err) response.ToErrorResponse(errcode.InvalidDownloadReq) } @@ -197,7 +197,7 @@ func DownloadAttachment(c *gin.Context) { // 加载post post, err := service.GetPost(content.PostID) if err != nil { - global.Logger.Errorf("service.GetPost err: %v", err) + conf.Logger.Errorf("service.GetPost err: %v", err) response.ToResponse(gin.H{ "paid": false, }) @@ -226,7 +226,7 @@ func DownloadAttachment(c *gin.Context) { AttachmentPrice: post.AttachmentPrice, }, user.(*model.User)) if err != nil { - global.Logger.Errorf("service.BuyPostAttachment err: %v", err) + conf.Logger.Errorf("service.BuyPostAttachment err: %v", err) if err == errcode.InsuffientDownloadMoney { response.ToErrorResponse(errcode.InsuffientDownloadMoney) @@ -242,7 +242,7 @@ func DownloadAttachment(c *gin.Context) { objectKey := objectStorage.ObjectKey(content.Content) signedURL, err := objectStorage.SignURL(objectKey, 60) if err != nil { - global.Logger.Errorf("client.SignURL err: %v", err) + conf.Logger.Errorf("client.SignURL err: %v", err) response.ToErrorResponse(errcode.DownloadReqError) return } diff --git a/internal/routers/api/comment.go b/internal/routers/api/comment.go index 5aba10b5..6223ab73 100644 --- a/internal/routers/api/comment.go +++ b/internal/routers/api/comment.go @@ -2,7 +2,7 @@ package api import ( "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/internal/service" "github.com/rocboss/paopao-ce/pkg/app" @@ -17,7 +17,7 @@ func GetPostComments(c *gin.Context) { contents, totalRows, err := service.GetPostComments(postID, "id ASC", 0, 0) if err != nil { - global.Logger.Errorf("service.GetPostComments err: %v\n", err) + conf.Logger.Errorf("service.GetPostComments err: %v\n", err) response.ToErrorResponse(errcode.GetCommentsFailed) return } @@ -30,7 +30,7 @@ func CreatePostComment(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -42,7 +42,7 @@ func CreatePostComment(c *gin.Context) { if err == errcode.MaxCommentCount { response.ToErrorResponse(errcode.MaxCommentCount) } else { - global.Logger.Errorf("service.CreatePostComment err: %v\n", err) + conf.Logger.Errorf("service.CreatePostComment err: %v\n", err) response.ToErrorResponse(errcode.CreateCommentFailed) } return @@ -56,7 +56,7 @@ func DeletePostComment(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -64,7 +64,7 @@ func DeletePostComment(c *gin.Context) { comment, err := service.GetPostComment(param.ID) if err != nil { - global.Logger.Errorf("service.GetPostComment err: %v\n", err) + conf.Logger.Errorf("service.GetPostComment err: %v\n", err) response.ToErrorResponse(errcode.GetCommentFailed) return } @@ -77,7 +77,7 @@ func DeletePostComment(c *gin.Context) { // 执行删除 err = service.DeletePostComment(comment) if err != nil { - global.Logger.Errorf("service.DeletePostComment err: %v\n", err) + conf.Logger.Errorf("service.DeletePostComment err: %v\n", err) response.ToErrorResponse(errcode.DeleteCommentFailed) return } @@ -90,7 +90,7 @@ func CreatePostCommentReply(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -98,7 +98,7 @@ func CreatePostCommentReply(c *gin.Context) { comment, err := service.CreatePostCommentReply(c, param.CommentID, param.Content, user.(*model.User).ID, param.AtUserID) if err != nil { - global.Logger.Errorf("service.CreatePostCommentReply err: %v\n", err) + conf.Logger.Errorf("service.CreatePostCommentReply err: %v\n", err) response.ToErrorResponse(errcode.CreateReplyFailed) return } @@ -111,7 +111,7 @@ func DeletePostCommentReply(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -120,7 +120,7 @@ func DeletePostCommentReply(c *gin.Context) { reply, err := service.GetPostCommentReply(param.ID) if err != nil { - global.Logger.Errorf("service.GetPostCommentReply err: %v\n", err) + conf.Logger.Errorf("service.GetPostCommentReply err: %v\n", err) response.ToErrorResponse(errcode.GetReplyFailed) return } @@ -133,7 +133,7 @@ func DeletePostCommentReply(c *gin.Context) { // 执行删除 err = service.DeletePostCommentReply(reply) if err != nil { - global.Logger.Errorf("service.DeletePostCommentReply err: %v\n", err) + conf.Logger.Errorf("service.DeletePostCommentReply err: %v\n", err) response.ToErrorResponse(errcode.DeleteCommentFailed) return } diff --git a/internal/routers/api/home.go b/internal/routers/api/home.go index d8fc878d..122d0b35 100644 --- a/internal/routers/api/home.go +++ b/internal/routers/api/home.go @@ -11,7 +11,7 @@ import ( "github.com/afocus/captcha" "github.com/gin-gonic/gin" "github.com/gofrs/uuid" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/internal/service" "github.com/rocboss/paopao-ce/pkg/app" @@ -62,7 +62,7 @@ func GetCaptcha(c *gin.Context) { key := util.EncodeMD5(uuid.Must(uuid.NewV4()).String()) // 五分钟有效期 - global.Redis.SetEX(c, "PaoPaoCaptcha:"+key, password, time.Minute*5) + conf.Redis.SetEX(c, "PaoPaoCaptcha:"+key, password, time.Minute*5) response := app.NewResponse(c) response.ToResponse(gin.H{ @@ -76,27 +76,27 @@ func PostCaptcha(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } // 验证图片验证码 - if res, err := global.Redis.Get(c.Request.Context(), "PaoPaoCaptcha:"+param.ImgCaptchaID).Result(); err != nil || res != param.ImgCaptcha { + if res, err := conf.Redis.Get(c.Request.Context(), "PaoPaoCaptcha:"+param.ImgCaptchaID).Result(); err != nil || res != param.ImgCaptcha { response.ToErrorResponse(errcode.ErrorCaptchaPassword) return } - global.Redis.Del(c.Request.Context(), "PaoPaoCaptcha:"+param.ImgCaptchaID).Result() + conf.Redis.Del(c.Request.Context(), "PaoPaoCaptcha:"+param.ImgCaptchaID).Result() // 今日频次限制 - if res, _ := global.Redis.Get(c.Request.Context(), "PaoPaoSmsCaptcha:"+param.Phone).Result(); convert.StrTo(res).MustInt() >= MAX_PHONE_CAPTCHA { + if res, _ := conf.Redis.Get(c.Request.Context(), "PaoPaoSmsCaptcha:"+param.Phone).Result(); convert.StrTo(res).MustInt() >= MAX_PHONE_CAPTCHA { response.ToErrorResponse(errcode.TooManyPhoneCaptchaSend) return } err := service.SendPhoneCaptcha(c, param.Phone) if err != nil { - global.Logger.Errorf("app.SendPhoneCaptcha errs: %v", errs) + conf.Logger.Errorf("app.SendPhoneCaptcha errs: %v", errs) response.ToErrorResponse(errcode.GetPhoneCaptchaError) return } diff --git a/internal/routers/api/message.go b/internal/routers/api/message.go index 1242ff86..f6733f07 100644 --- a/internal/routers/api/message.go +++ b/internal/routers/api/message.go @@ -2,7 +2,7 @@ package api import ( "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/internal/service" "github.com/rocboss/paopao-ce/pkg/app" @@ -31,7 +31,7 @@ func GetMessages(c *gin.Context) { messages, totalRows, err := service.GetMessages(userID.(int64), (app.GetPage(c)-1)*app.GetPageSize(c), app.GetPageSize(c)) if err != nil { - global.Logger.Errorf("service.GetMessages err: %v\n", err) + conf.Logger.Errorf("service.GetMessages err: %v\n", err) response.ToErrorResponse(errcode.GetMessagesFailed) return } @@ -44,7 +44,7 @@ func ReadMessage(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -52,7 +52,7 @@ func ReadMessage(c *gin.Context) { userID, _ := c.Get("UID") err := service.ReadMessage(param.ID, userID.(int64)) if err != nil { - global.Logger.Errorf("service.ReadMessage err: %v\n", err) + conf.Logger.Errorf("service.ReadMessage err: %v\n", err) response.ToErrorResponse(errcode.ReadMessageFailed) return } @@ -65,7 +65,7 @@ func SendUserWhisper(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -87,7 +87,7 @@ func SendUserWhisper(c *gin.Context) { }) if err != nil { - global.Logger.Errorf("service.CreateWhisper err: %v\n", err) + conf.Logger.Errorf("service.CreateWhisper err: %v\n", err) if err == errcode.TooManyWhisperNum { response.ToErrorResponse(errcode.TooManyWhisperNum) diff --git a/internal/routers/api/post.go b/internal/routers/api/post.go index fed3d230..06ac1f77 100644 --- a/internal/routers/api/post.go +++ b/internal/routers/api/post.go @@ -2,7 +2,7 @@ package api import ( "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/internal/service" @@ -32,7 +32,7 @@ func GetPostList(c *gin.Context) { Limit: app.GetPageSize(c), }) if err != nil { - global.Logger.Errorf("service.GetPostList err: %v\n", err) + conf.Logger.Errorf("service.GetPostList err: %v\n", err) response.ToErrorResponse(errcode.GetPostsFailed) return } @@ -45,7 +45,7 @@ func GetPostList(c *gin.Context) { posts, totalRows, err := service.GetPostListFromSearch(q, (app.GetPage(c)-1)*app.GetPageSize(c), app.GetPageSize(c)) if err != nil { - global.Logger.Errorf("service.GetPostListFromSearch err: %v\n", err) + conf.Logger.Errorf("service.GetPostListFromSearch err: %v\n", err) response.ToErrorResponse(errcode.GetPostsFailed) return } @@ -60,7 +60,7 @@ func GetPost(c *gin.Context) { postFormated, err := service.GetPost(postID) if err != nil { - global.Logger.Errorf("service.GetPost err: %v\n", err) + conf.Logger.Errorf("service.GetPost err: %v\n", err) response.ToErrorResponse(errcode.GetPostFailed) return } @@ -73,7 +73,7 @@ func CreatePost(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -82,7 +82,7 @@ func CreatePost(c *gin.Context) { post, err := service.CreatePost(c, userID.(int64), param) if err != nil { - global.Logger.Errorf("service.CreatePost err: %v\n", err) + conf.Logger.Errorf("service.CreatePost err: %v\n", err) response.ToErrorResponse(errcode.CreatePostFailed) return } @@ -95,7 +95,7 @@ func DeletePost(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -105,7 +105,7 @@ func DeletePost(c *gin.Context) { // 获取Post postFormated, err := service.GetPost(param.ID) if err != nil { - global.Logger.Errorf("service.GetPost err: %v\n", err) + conf.Logger.Errorf("service.GetPost err: %v\n", err) response.ToErrorResponse(errcode.GetPostFailed) return } @@ -117,7 +117,7 @@ func DeletePost(c *gin.Context) { err = service.DeletePost(param.ID) if err != nil { - global.Logger.Errorf("service.DeletePost err: %v\n", err) + conf.Logger.Errorf("service.DeletePost err: %v\n", err) response.ToErrorResponse(errcode.DeletePostFailed) return } @@ -150,7 +150,7 @@ func PostStar(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -198,7 +198,7 @@ func PostCollection(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -226,7 +226,7 @@ func LockPost(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -236,7 +236,7 @@ func LockPost(c *gin.Context) { // 获取Post postFormated, err := service.GetPost(param.ID) if err != nil { - global.Logger.Errorf("service.GetPost err: %v\n", err) + conf.Logger.Errorf("service.GetPost err: %v\n", err) response.ToErrorResponse(errcode.GetPostFailed) return } @@ -247,7 +247,7 @@ func LockPost(c *gin.Context) { } err = service.LockPost(param.ID) if err != nil { - global.Logger.Errorf("service.LockPost err: %v\n", err) + conf.Logger.Errorf("service.LockPost err: %v\n", err) response.ToErrorResponse(errcode.LockPostFailed) return } @@ -262,7 +262,7 @@ func StickPost(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -272,7 +272,7 @@ func StickPost(c *gin.Context) { // 获取Post postFormated, err := service.GetPost(param.ID) if err != nil { - global.Logger.Errorf("service.GetPost err: %v\n", err) + conf.Logger.Errorf("service.GetPost err: %v\n", err) response.ToErrorResponse(errcode.GetPostFailed) return } @@ -283,7 +283,7 @@ func StickPost(c *gin.Context) { } err = service.StickPost(param.ID) if err != nil { - global.Logger.Errorf("service.StickPost err: %v\n", err) + conf.Logger.Errorf("service.StickPost err: %v\n", err) response.ToErrorResponse(errcode.LockPostFailed) return } @@ -298,14 +298,14 @@ func GetPostTags(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } tags, err := service.GetPostTags(¶m) if err != nil { - global.Logger.Errorf("service.GetPostTags err: %v\n", err) + conf.Logger.Errorf("service.GetPostTags err: %v\n", err) response.ToErrorResponse(errcode.GetPostTagsFailed) return diff --git a/internal/routers/api/user.go b/internal/routers/api/user.go index 30f53155..89454879 100644 --- a/internal/routers/api/user.go +++ b/internal/routers/api/user.go @@ -6,7 +6,7 @@ import ( "unicode/utf8" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/internal/service" "github.com/rocboss/paopao-ce/pkg/app" @@ -21,21 +21,21 @@ func Login(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } user, err := service.DoLogin(c, ¶m) if err != nil { - global.Logger.Errorf("service.DoLogin err: %v", err) + conf.Logger.Errorf("service.DoLogin err: %v", err) response.ToErrorResponse(err.(*errcode.Error)) return } token, err := app.GenerateToken(user) if err != nil { - global.Logger.Errorf("app.GenerateToken err: %v", err) + conf.Logger.Errorf("app.GenerateToken err: %v", err) response.ToErrorResponse(errcode.UnauthorizedTokenGenerate) return } @@ -52,7 +52,7 @@ func Register(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -60,7 +60,7 @@ func Register(c *gin.Context) { // 用户名检查 err := service.ValidUsername(param.Username) if err != nil { - global.Logger.Errorf("service.Register err: %v", err) + conf.Logger.Errorf("service.Register err: %v", err) response.ToErrorResponse(err.(*errcode.Error)) return } @@ -68,7 +68,7 @@ func Register(c *gin.Context) { // 密码检查 err = service.CheckPassword(param.Password) if err != nil { - global.Logger.Errorf("service.Register err: %v", err) + conf.Logger.Errorf("service.Register err: %v", err) response.ToErrorResponse(err.(*errcode.Error)) return } @@ -79,7 +79,7 @@ func Register(c *gin.Context) { ) if err != nil { - global.Logger.Errorf("service.Register err: %v", err) + conf.Logger.Errorf("service.Register err: %v", err) response.ToErrorResponse(errcode.UserRegisterFailed) return } @@ -128,7 +128,7 @@ func ChangeUserPassword(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -141,7 +141,7 @@ func ChangeUserPassword(c *gin.Context) { // 密码检查 err := service.CheckPassword(param.Password) if err != nil { - global.Logger.Errorf("service.Register err: %v", err) + conf.Logger.Errorf("service.Register err: %v", err) response.ToErrorResponse(err.(*errcode.Error)) return } @@ -165,7 +165,7 @@ func ChangeNickname(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -193,7 +193,7 @@ func ChangeAvatar(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -221,7 +221,7 @@ func BindUserPhone(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -238,7 +238,7 @@ func BindUserPhone(c *gin.Context) { } if err := service.CheckPhoneCaptcha(param.Phone, param.Captcha); err != nil { - global.Logger.Errorf("service.CheckPhoneCaptcha err: %v\n", err) + conf.Logger.Errorf("service.CheckPhoneCaptcha err: %v\n", err) response.ToErrorResponse(err) return } @@ -256,7 +256,7 @@ func GetUserProfile(c *gin.Context) { user, err := service.GetUserByUsername(username) if err != nil { - global.Logger.Errorf("service.GetUserByUsername err: %v\n", err) + conf.Logger.Errorf("service.GetUserByUsername err: %v\n", err) response.ToErrorResponse(errcode.NoExistUsername) return } @@ -277,7 +277,7 @@ func GetUserPosts(c *gin.Context) { user, err := service.GetUserByUsername(username) if err != nil { - global.Logger.Errorf("service.GetUserByUsername err: %v\n", err) + conf.Logger.Errorf("service.GetUserByUsername err: %v\n", err) response.ToErrorResponse(errcode.NoExistUsername) return } @@ -293,7 +293,7 @@ func GetUserPosts(c *gin.Context) { Limit: app.GetPageSize(c), }) if err != nil { - global.Logger.Errorf("service.GetPostList err: %v\n", err) + conf.Logger.Errorf("service.GetPostList err: %v\n", err) response.ToErrorResponse(errcode.GetPostsFailed) return } @@ -309,7 +309,7 @@ func GetUserCollections(c *gin.Context) { posts, totalRows, err := service.GetUserCollections(userID.(int64), (app.GetPage(c)-1)*app.GetPageSize(c), app.GetPageSize(c)) if err != nil { - global.Logger.Errorf("service.GetUserCollections err: %v\n", err) + conf.Logger.Errorf("service.GetUserCollections err: %v\n", err) response.ToErrorResponse(errcode.GetCollectionsFailed) return } @@ -323,7 +323,7 @@ func GetUserStars(c *gin.Context) { userID, _ := c.Get("UID") posts, totalRows, err := service.GetUserStars(userID.(int64), (app.GetPage(c)-1)*app.GetPageSize(c), app.GetPageSize(c)) if err != nil { - global.Logger.Errorf("service.GetUserStars err: %v\n", err) + conf.Logger.Errorf("service.GetUserStars err: %v\n", err) response.ToErrorResponse(errcode.GetCollectionsFailed) return } @@ -337,7 +337,7 @@ func GetSuggestUsers(c *gin.Context) { usernames, err := service.GetSuggestUsers(keyword) if err != nil { - global.Logger.Errorf("service.GetSuggestUsers err: %v\n", err) + conf.Logger.Errorf("service.GetSuggestUsers err: %v\n", err) response.ToErrorResponse(errcode.GetCollectionsFailed) return } @@ -351,7 +351,7 @@ func GetSuggestTags(c *gin.Context) { tags, err := service.GetSuggestTags(keyword) if err != nil { - global.Logger.Errorf("service.GetSuggestTags err: %v\n", err) + conf.Logger.Errorf("service.GetSuggestTags err: %v\n", err) response.ToErrorResponse(errcode.GetCollectionsFailed) return } @@ -364,7 +364,7 @@ func GetUserRechargeLink(c *gin.Context) { response := app.NewResponse(c) valid, errs := app.BindAndValid(c, ¶m) if !valid { - global.Logger.Errorf("app.BindAndValid errs: %v", errs) + conf.Logger.Errorf("app.BindAndValid errs: %v", errs) response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...)) return } @@ -373,37 +373,37 @@ func GetUserRechargeLink(c *gin.Context) { userID, _ := c.Get("UID") recharge, err := service.CreateRecharge(userID.(int64), param.Amount) if err != nil { - global.Logger.Errorf("service.CreateRecharge err: %v\n", err) + conf.Logger.Errorf("service.CreateRecharge err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } - client, err := alipay.New(global.AlipaySetting.AppID, global.AlipaySetting.PrivateKey, true) + client, err := alipay.New(conf.AlipaySetting.AppID, conf.AlipaySetting.PrivateKey, true) // 将 key 的验证调整到初始化阶段 if err != nil { - global.Logger.Errorf("alipay.New err: %v\n", err) + conf.Logger.Errorf("alipay.New err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } err = client.LoadAppPublicCertFromFile("configs/alipayAppCertPublicKey.crt") // 加载应用公钥证书 if err != nil { - global.Logger.Errorf("client.LoadAppPublicCertFromFile err: %v\n", err) + conf.Logger.Errorf("client.LoadAppPublicCertFromFile err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } err = client.LoadAliPayRootCertFromFile("configs/alipayRootCert.crt") // 加载支付宝根证书 if err != nil { - global.Logger.Errorf("client.LoadAliPayRootCertFromFile err: %v\n", err) + conf.Logger.Errorf("client.LoadAliPayRootCertFromFile err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } err = client.LoadAliPayPublicCertFromFile("configs/alipayCertPublicKey_RSA2.crt") // 加载支付宝公钥证书 if err != nil { - global.Logger.Errorf("client.LoadAliPayPublicCertFromFile err: %v\n", err) + conf.Logger.Errorf("client.LoadAliPayPublicCertFromFile err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } @@ -416,7 +416,7 @@ func GetUserRechargeLink(c *gin.Context) { rsp, err := client.TradePreCreate(p) if err != nil { - global.Logger.Errorf("client.TradePreCreate err: %v\n", err) + conf.Logger.Errorf("client.TradePreCreate err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } @@ -458,38 +458,38 @@ func AlipayNotify(c *gin.Context) { response := app.NewResponse(c) c.Request.ParseForm() - aliClient, err := alipay.New(global.AlipaySetting.AppID, global.AlipaySetting.PrivateKey, true) + aliClient, err := alipay.New(conf.AlipaySetting.AppID, conf.AlipaySetting.PrivateKey, true) // 将 key 的验证调整到初始化阶段 if err != nil { - global.Logger.Errorf("alipay.New err: %v\n", err) + conf.Logger.Errorf("alipay.New err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } err = aliClient.LoadAppPublicCertFromFile("configs/alipayAppCertPublicKey.crt") // 加载应用公钥证书 if err != nil { - global.Logger.Errorf("client.LoadAppPublicCertFromFile err: %v\n", err) + conf.Logger.Errorf("client.LoadAppPublicCertFromFile err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } err = aliClient.LoadAliPayRootCertFromFile("configs/alipayRootCert.crt") // 加载支付宝根证书 if err != nil { - global.Logger.Errorf("client.LoadAliPayRootCertFromFile err: %v\n", err) + conf.Logger.Errorf("client.LoadAliPayRootCertFromFile err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } err = aliClient.LoadAliPayPublicCertFromFile("configs/alipayCertPublicKey_RSA2.crt") // 加载支付宝公钥证书 if err != nil { - global.Logger.Errorf("client.LoadAliPayPublicCertFromFile err: %v\n", err) + conf.Logger.Errorf("client.LoadAliPayPublicCertFromFile err: %v\n", err) response.ToErrorResponse(errcode.RechargeReqFail) return } _, err = aliClient.GetTradeNotification(c.Request) if err != nil { - global.Logger.Errorf("aliClient.GetTradeNotification err: %v\n", err) - global.Logger.Infoln(c.Request.Form) + conf.Logger.Errorf("aliClient.GetTradeNotification err: %v\n", err) + conf.Logger.Infoln(c.Request.Form) response.ToErrorResponse(errcode.RechargeNotifyError) return } @@ -501,7 +501,7 @@ func AlipayNotify(c *gin.Context) { // 交易支付成功 err = service.FinishRecharge(c, convert.StrTo(id).MustInt64(), tradeNo) if err != nil { - global.Logger.Errorf("service.FinishRecharge err: %v\n", err) + conf.Logger.Errorf("service.FinishRecharge err: %v\n", err) response.ToErrorResponse(errcode.RechargeNotifyError) return } @@ -516,7 +516,7 @@ func GetUserWalletBills(c *gin.Context) { bills, totalRows, err := service.GetUserWalletBills(userID.(int64), (app.GetPage(c)-1)*app.GetPageSize(c), app.GetPageSize(c)) if err != nil { - global.Logger.Errorf("service.GetUserWalletBills err: %v\n", err) + conf.Logger.Errorf("service.GetUserWalletBills err: %v\n", err) response.ToErrorResponse(errcode.GetCollectionsFailed) return } diff --git a/internal/routers/router.go b/internal/routers/router.go index d290a81d..877c1ded 100644 --- a/internal/routers/router.go +++ b/internal/routers/router.go @@ -6,7 +6,7 @@ import ( "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/middleware" "github.com/rocboss/paopao-ce/internal/routers/api" ) @@ -192,15 +192,15 @@ func NewRouter() *gin.Engine { // routeLocalOSS register LocalOSS route if neeed func routeLocalOSS(e *gin.Engine) { - if !global.CfgIf("LocalOSS") { + if !conf.CfgIf("LocalOSS") { return } - savePath, err := filepath.Abs(global.LocalOSSSetting.SavePath) + savePath, err := filepath.Abs(conf.LocalOSSSetting.SavePath) if err != nil { - global.Logger.Fatalf("get localOSS save path err: %v", err) + conf.Logger.Fatalf("get localOSS save path err: %v", err) } e.Static("/oss", savePath) - global.Logger.Infof("register LocalOSS route in /oss on save path: %s", savePath) + conf.Logger.Infof("register LocalOSS route in /oss on save path: %s", savePath) } diff --git a/internal/service/comment.go b/internal/service/comment.go index 7a70dd51..4cd7fb24 100644 --- a/internal/service/comment.go +++ b/internal/service/comment.go @@ -4,7 +4,7 @@ import ( "time" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/pkg/errcode" "github.com/rocboss/paopao-ce/pkg/util" @@ -97,7 +97,7 @@ func CreatePostComment(ctx *gin.Context, userID int64, param CommentCreationReq) return nil, err } - if post.CommentCount >= global.AppSetting.MaxCommentCount { + if post.CommentCount >= conf.AppSetting.MaxCommentCount { return nil, errcode.MaxCommentCount } ip := ctx.ClientIP() @@ -200,7 +200,7 @@ func createPostPreHandler(commentID int64, userID, atUserID int64) (*model.Post, return nil, nil, atUserID, err } - if post.CommentCount >= global.AppSetting.MaxCommentCount { + if post.CommentCount >= conf.AppSetting.MaxCommentCount { return nil, nil, atUserID, errcode.MaxCommentCount } diff --git a/internal/service/message.go b/internal/service/message.go index 3fd8c321..e063e492 100644 --- a/internal/service/message.go +++ b/internal/service/message.go @@ -5,7 +5,7 @@ import ( "time" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/pkg/convert" "github.com/rocboss/paopao-ce/pkg/errcode" @@ -27,7 +27,7 @@ func CreateWhisper(c *gin.Context, msg *model.Message) (*model.Message, error) { whisperKey := fmt.Sprintf("WhisperTimes:%d", msg.SenderUserID) // 今日频次限制 - if res, _ := global.Redis.Get(c, whisperKey).Result(); convert.StrTo(res).MustInt() >= MAX_WHISPER_NUM_DAILY { + if res, _ := conf.Redis.Get(c, whisperKey).Result(); convert.StrTo(res).MustInt() >= MAX_WHISPER_NUM_DAILY { return nil, errcode.TooManyWhisperNum } @@ -38,11 +38,11 @@ func CreateWhisper(c *gin.Context, msg *model.Message) (*model.Message, error) { } // 写入当日(自然日)计数缓存 - global.Redis.Incr(c, whisperKey).Result() + conf.Redis.Incr(c, whisperKey).Result() currentTime := time.Now() endTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 23, 59, 59, 0, currentTime.Location()) - global.Redis.Expire(c, whisperKey, endTime.Sub(currentTime)) + conf.Redis.Expire(c, whisperKey, endTime.Sub(currentTime)) return msg, err } diff --git a/internal/service/post.go b/internal/service/post.go index 4942196c..2aac1051 100644 --- a/internal/service/post.go +++ b/internal/service/post.go @@ -8,7 +8,7 @@ import ( "time" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/pkg/util" @@ -109,7 +109,7 @@ func CreatePost(c *gin.Context, userID int64, param PostCreationReq) (*model.Pos for _, item := range param.Contents { if err = item.Check(); err != nil { // 属性非法 - global.Logger.Infof("contents check err: %v", err) + conf.Logger.Infof("contents check err: %v", err) continue } @@ -378,7 +378,7 @@ func GetPostCount(conditions *model.ConditionsT) (int64, error) { } func GetPostListFromSearch(q *core.QueryT, offset, limit int) ([]*model.PostFormated, int64, error) { - queryResult, err := ds.QueryAll(q, global.ZincSetting.Index, offset, limit) + queryResult, err := ds.QueryAll(q, conf.ZincSetting.Index, offset, limit) if err != nil { return nil, 0, err } @@ -392,7 +392,7 @@ func GetPostListFromSearch(q *core.QueryT, offset, limit int) ([]*model.PostForm } func GetPostListFromSearchByQuery(query string, offset, limit int) ([]*model.PostFormated, int64, error) { - queryResult, err := ds.QuerySearch(global.ZincSetting.Index, query, offset, limit) + queryResult, err := ds.QuerySearch(conf.ZincSetting.Index, query, offset, limit) if err != nil { return nil, 0, err } @@ -406,7 +406,7 @@ func GetPostListFromSearchByQuery(query string, offset, limit int) ([]*model.Pos } func PushPostToSearch(post *model.Post) { - indexName := global.ZincSetting.Index + indexName := conf.ZincSetting.Index postFormated := post.Format() postFormated.User = &model.UserFormated{ @@ -457,20 +457,20 @@ func PushPostToSearch(post *model.Post) { } func DeleteSearchPost(post *model.Post) error { - indexName := global.ZincSetting.Index + indexName := conf.ZincSetting.Index return ds.DelDoc(indexName, fmt.Sprintf("%d", post.ID)) } func PushPostsToSearch(c *gin.Context) { - if ok, _ := global.Redis.SetNX(c, "JOB_PUSH_TO_SEARCH", 1, time.Hour).Result(); ok { + if ok, _ := conf.Redis.SetNX(c, "JOB_PUSH_TO_SEARCH", 1, time.Hour).Result(); ok { splitNum := 1000 totalRows, _ := GetPostCount(&model.ConditionsT{}) pages := math.Ceil(float64(totalRows) / float64(splitNum)) nums := int(pages) - indexName := global.ZincSetting.Index + indexName := conf.ZincSetting.Index // 创建索引 ds.CreateSearchIndex(indexName) @@ -520,7 +520,7 @@ func PushPostsToSearch(c *gin.Context) { } } - global.Redis.Del(c, "JOB_PUSH_TO_SEARCH") + conf.Redis.Del(c, "JOB_PUSH_TO_SEARCH") } } @@ -574,8 +574,8 @@ func FormatZincPost(queryResult *zinc.QueryResultT) ([]*model.PostFormated, erro func GetPostTags(param *PostTagsReq) ([]*model.TagFormated, error) { num := param.Num - if num > global.AppSetting.MaxPageSize { - num = global.AppSetting.MaxPageSize + if num > conf.AppSetting.MaxPageSize { + num = conf.AppSetting.MaxPageSize } conditions := &model.ConditionsT{} diff --git a/internal/service/service.go b/internal/service/service.go index 6e8a1116..26682173 100644 --- a/internal/service/service.go +++ b/internal/service/service.go @@ -1,11 +1,10 @@ package service import ( - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/dao" "github.com/rocboss/paopao-ce/pkg/zinc" - "gorm.io/gorm" ) var ( @@ -14,8 +13,10 @@ var ( DisablePhoneVerify bool ) -func Initialize(engine *gorm.DB, client *zinc.ZincClient) { - ds = dao.NewDataService(engine, client) +func Initialize() { + zincClient := zinc.NewClient(conf.ZincSetting) + ds = dao.NewDataService(conf.DBEngine, zincClient) + attachmentChecker = dao.NewAttachmentCheckerService() - DisablePhoneVerify = !global.CfgIf("Sms") + DisablePhoneVerify = !conf.CfgIf("Sms") } diff --git a/internal/service/sign.go b/internal/service/sign.go index 6d5ef510..61f13030 100644 --- a/internal/service/sign.go +++ b/internal/service/sign.go @@ -4,7 +4,7 @@ import ( "fmt" "sort" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/pkg/util" ) @@ -23,8 +23,8 @@ func GetParamSign(param map[string]interface{}, secretKey string) string { signRaw += v } - if global.ServerSetting.RunMode == "debug" { - global.Logger.Info(map[string]string{ + if conf.ServerSetting.RunMode == "debug" { + conf.Logger.Info(map[string]string{ "signRaw": signRaw, "sysSign": util.EncodeMD5(signRaw + secretKey), }) diff --git a/internal/service/user.go b/internal/service/user.go index aa6c2f39..d1434e13 100644 --- a/internal/service/user.go +++ b/internal/service/user.go @@ -9,7 +9,7 @@ import ( "github.com/gin-gonic/gin" "github.com/gofrs/uuid" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/pkg/convert" "github.com/rocboss/paopao-ce/pkg/errcode" @@ -63,7 +63,7 @@ func DoLogin(ctx *gin.Context, param *AuthRequest) (*model.User, error) { } if user.Model != nil && user.ID > 0 { - if errTimes, err := global.Redis.Get(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID)).Result(); err == nil { + if errTimes, err := conf.Redis.Get(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID)).Result(); err == nil { if convert.StrTo(errTimes).MustInt() >= MAX_LOGIN_ERR_TIMES { return nil, errcode.TooManyLoginError } @@ -77,14 +77,14 @@ func DoLogin(ctx *gin.Context, param *AuthRequest) (*model.User, error) { } // 清空登录计数 - global.Redis.Del(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID)) + conf.Redis.Del(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID)) return user, nil } // 登录错误计数 - _, err = global.Redis.Incr(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID)).Result() + _, err = conf.Redis.Incr(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID)).Result() if err == nil { - global.Redis.Expire(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID), time.Hour).Result() + conf.Redis.Expire(ctx, fmt.Sprintf("%s:%d", LOGIN_ERR_KEY, user.ID), time.Hour).Result() } return nil, errcode.UnauthorizedAuthFailed @@ -332,12 +332,12 @@ func SendPhoneCaptcha(ctx *gin.Context, phone string) error { } // 写入计数缓存 - global.Redis.Incr(ctx, "PaoPaoSmsCaptcha:"+phone).Result() + conf.Redis.Incr(ctx, "PaoPaoSmsCaptcha:"+phone).Result() currentTime := time.Now() endTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 23, 59, 59, 0, currentTime.Location()) - global.Redis.Expire(ctx, "PaoPaoSmsCaptcha:"+phone, endTime.Sub(currentTime)) + conf.Redis.Expire(ctx, "PaoPaoSmsCaptcha:"+phone, endTime.Sub(currentTime)) return nil } diff --git a/internal/service/wallet.go b/internal/service/wallet.go index 982f61bd..0f22b23f 100644 --- a/internal/service/wallet.go +++ b/internal/service/wallet.go @@ -4,7 +4,7 @@ import ( "time" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" "github.com/rocboss/paopao-ce/pkg/errcode" ) @@ -22,7 +22,7 @@ func CreateRecharge(userID, amount int64) (*model.WalletRecharge, error) { } func FinishRecharge(ctx *gin.Context, id int64, tradeNo string) error { - if ok, _ := global.Redis.SetNX(ctx, "PaoPaoRecharge:"+tradeNo, 1, time.Second*5).Result(); ok { + if ok, _ := conf.Redis.SetNX(ctx, "PaoPaoRecharge:"+tradeNo, 1, time.Second*5).Result(); ok { recharge, err := ds.GetRechargeByID(id) if err != nil { return err @@ -32,7 +32,7 @@ func FinishRecharge(ctx *gin.Context, id int64, tradeNo string) error { // 标记为已付款 err := ds.HandleRechargeSuccess(recharge, tradeNo) - defer global.Redis.Del(ctx, "PaoPaoRecharge:"+tradeNo) + defer conf.Redis.Del(ctx, "PaoPaoRecharge:"+tradeNo) if err != nil { return err diff --git a/main.go b/main.go index 8aa7adf9..2477b350 100644 --- a/main.go +++ b/main.go @@ -1,35 +1,67 @@ package main import ( + "flag" "fmt" "net/http" + "strings" "github.com/fatih/color" "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/routers" "github.com/rocboss/paopao-ce/pkg/util" ) var ( version, buildDate, commitID string + + noDefaultFeatures bool + features suites ) +type suites []string + +func (s *suites) String() string { + return strings.Join(*s, ",") +} + +func (s *suites) Set(value string) error { + for _, item := range strings.Split(value, ",") { + *s = append(*s, strings.TrimSpace(item)) + } + return nil +} + +func init() { + flagParse() + + conf.Initialize(features, noDefaultFeatures) + internal.Initialize() +} + +func flagParse() { + flag.BoolVar(&noDefaultFeatures, "no-default-features", false, "whether use default features") + flag.Var(&features, "features", "use special features") + flag.Parse() +} + func main() { - gin.SetMode(global.ServerSetting.RunMode) + gin.SetMode(conf.ServerSetting.RunMode) router := routers.NewRouter() s := &http.Server{ - Addr: global.ServerSetting.HttpIp + ":" + global.ServerSetting.HttpPort, + Addr: conf.ServerSetting.HttpIp + ":" + conf.ServerSetting.HttpPort, Handler: router, - ReadTimeout: global.ServerSetting.ReadTimeout, - WriteTimeout: global.ServerSetting.WriteTimeout, + ReadTimeout: conf.ServerSetting.ReadTimeout, + WriteTimeout: conf.ServerSetting.WriteTimeout, MaxHeaderBytes: 1 << 20, } util.PrintHelloBanner(fmt.Sprintf("paopao %s (build:%s %s)", version, commitID, buildDate)) fmt.Fprintf(color.Output, "PaoPao service listen on %s\n", - color.GreenString(fmt.Sprintf("http://%s:%s", global.ServerSetting.HttpIp, global.ServerSetting.HttpPort)), + color.GreenString(fmt.Sprintf("http://%s:%s", conf.ServerSetting.HttpIp, conf.ServerSetting.HttpPort)), ) s.ListenAndServe() } diff --git a/pkg/app/jwt.go b/pkg/app/jwt.go index ed90c16a..2bedacab 100644 --- a/pkg/app/jwt.go +++ b/pkg/app/jwt.go @@ -4,7 +4,7 @@ import ( "time" "github.com/dgrijalva/jwt-go" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/model" ) @@ -15,18 +15,18 @@ type Claims struct { } func GetJWTSecret() []byte { - return []byte(global.JWTSetting.Secret) + return []byte(conf.JWTSetting.Secret) } func GenerateToken(User *model.User) (string, error) { nowTime := time.Now() - expireTime := nowTime.Add(global.JWTSetting.Expire) + expireTime := nowTime.Add(conf.JWTSetting.Expire) claims := Claims{ UID: User.ID, Username: User.Username, StandardClaims: jwt.StandardClaims{ ExpiresAt: expireTime.Unix(), - Issuer: global.JWTSetting.Issuer + ":" + User.Salt, + Issuer: conf.JWTSetting.Issuer + ":" + User.Salt, }, } diff --git a/pkg/app/pagination.go b/pkg/app/pagination.go index 1195cb08..332e25c6 100644 --- a/pkg/app/pagination.go +++ b/pkg/app/pagination.go @@ -2,7 +2,7 @@ package app import ( "github.com/gin-gonic/gin" - "github.com/rocboss/paopao-ce/global" + "github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/pkg/convert" ) @@ -18,10 +18,10 @@ func GetPage(c *gin.Context) int { func GetPageSize(c *gin.Context) int { pageSize := convert.StrTo(c.Query("page_size")).MustInt() if pageSize <= 0 { - return global.AppSetting.DefaultPageSize + return conf.AppSetting.DefaultPageSize } - if pageSize > global.AppSetting.MaxPageSize { - return global.AppSetting.MaxPageSize + if pageSize > conf.AppSetting.MaxPageSize { + return conf.AppSetting.MaxPageSize } return pageSize diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go deleted file mode 100644 index 105c6297..00000000 --- a/pkg/logger/logger.go +++ /dev/null @@ -1,82 +0,0 @@ -package logger - -import ( - "encoding/json" - "fmt" - "io" - "time" - - "github.com/rocboss/paopao-ce/global" - "github.com/sirupsen/logrus" - "gopkg.in/natefinch/lumberjack.v2" - "gopkg.in/resty.v1" -) - -type ZincLogIndex struct { - Index map[string]string `json:"index"` -} - -type ZincLogData struct { - Time time.Time `json:"time"` - Level logrus.Level `json:"level"` - Message string `json:"message"` - Data logrus.Fields `json:"data"` -} - -type ZincLogHook struct { - Fired bool -} - -func (hook *ZincLogHook) Fire(entry *logrus.Entry) error { - index := &ZincLogIndex{ - Index: map[string]string{ - "_index": global.LoggerZincSetting.Index, - }, - } - indexBytes, _ := json.Marshal(index) - - data := &ZincLogData{ - Time: entry.Time, - Level: entry.Level, - Message: entry.Message, - Data: entry.Data, - } - dataBytes, _ := json.Marshal(data) - - logStr := string(indexBytes) + "\n" + string(dataBytes) + "\n" - client := resty.New() - - if _, err := client.SetDisableWarn(true).R(). - SetHeader("Content-Type", "application/json"). - SetBasicAuth(global.LoggerZincSetting.User, global.LoggerZincSetting.Password). - SetBody(logStr). - Post(global.LoggerZincSetting.Host); err != nil { - fmt.Println(err.Error()) - } - - return nil -} - -func (hook *ZincLogHook) Levels() []logrus.Level { - return logrus.AllLevels -} - -func New() (*logrus.Logger, error) { - log := logrus.New() - log.Formatter = &logrus.JSONFormatter{} - - if global.CfgIf("LoggerFile") { - s := global.LoggerFileSetting - log.Out = &lumberjack.Logger{ - Filename: s.SavePath + "/" + s.FileName + s.FileExt, - MaxSize: 600, - MaxAge: 10, - LocalTime: true, - } - } else if global.CfgIf("LoggerZinc") { - log.Out = io.Discard - log.AddHook(&ZincLogHook{}) - } - - return log, nil -} diff --git a/pkg/zinc/zinc.go b/pkg/zinc/zinc.go index f6d2de9f..8e73221d 100644 --- a/pkg/zinc/zinc.go +++ b/pkg/zinc/zinc.go @@ -8,7 +8,7 @@ import ( "time" "github.com/go-resty/resty/v2" - "github.com/rocboss/paopao-ce/pkg/setting" + "github.com/rocboss/paopao-ce/internal/conf" ) type ZincClient struct { @@ -71,7 +71,7 @@ type HitItem struct { } // NewClient 获取ZincClient新实例 -func NewClient(conf *setting.ZincSettingS) *ZincClient { +func NewClient(conf *conf.ZincSettingS) *ZincClient { return &ZincClient{ ZincClientConfig: &ZincClientConfig{ ZincHost: conf.Host,