package manager import ( "fmt" "log" "os" "strings" "time" "gitnet.fr/deblan/budget/config" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" lg "gorm.io/gorm/logger" ) type Manager struct { Db *gorm.DB } var manager *Manager func Get() *Manager { if manager == nil { manager = &Manager{} config := config.Get() dsn := config.Database.Dsn var logLevel lg.LogLevel if config.Log.Level == "debug" { logLevel = lg.Info } else if config.Log.Level == "warning" { logLevel = lg.Warn } else if config.Log.Level == "quiet" { logLevel = lg.Silent } else { logLevel = lg.Silent } db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), lg.Config{ SlowThreshold: time.Second, LogLevel: lg.LogLevel(logLevel), IgnoreRecordNotFoundError: true, ParameterizedQueries: true, // ParameterizedQueries: false, Colorful: true, }, ), }) if err != nil { log.Fatal(err) } manager.Db = db } return manager } func DbComparator(db *gorm.DB, table, field, comparator, value string) { value = strings.ToLower(value) field = fmt.Sprintf("`%s`.`%s`", table, field) if comparator == "eq" { db.Where(fmt.Sprintf("%s = ?", field), value) } else if comparator == "neq" { db.Where(fmt.Sprintf("%s != ?", field), value) } else if comparator == "like" { db.Where(fmt.Sprintf("%s LIKE ?", field), fmt.Sprintf("%%%s%%", value)) } else if comparator == "nlike" { db.Where(fmt.Sprintf("%s NOT LIKE ?", field), fmt.Sprintf("%%%s%%", value)) } else if comparator == "empty" { db.Where(fmt.Sprintf("%s IS NULL", field)) } else if comparator == "nempty" { db.Where(fmt.Sprintf("%s IS NOT NULL", field)) } else if comparator == "lt" { db.Where(fmt.Sprintf("%s <= ?", field), value) } else if comparator == "gt" { db.Where(fmt.Sprintf("%s >= ?", field), value) } }