Initial commit

This commit is contained in:
Donny
2019-04-22 20:46:32 +08:00
commit 49ab8aadd1
25441 changed files with 4055000 additions and 0 deletions

View File

@@ -0,0 +1,36 @@
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
package(default_visibility = ["//visibility:public"])
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
)
go_library(
name = "go_default_library",
srcs = [
"orm.go",
"timestamp.go",
],
importpath = "go-common/library/database/orm",
tags = ["automanaged"],
deps = [
"//library/ecode:go_default_library",
"//library/log:go_default_library",
"//library/time:go_default_library",
"//vendor/github.com/go-sql-driver/mysql:go_default_library",
"//vendor/github.com/jinzhu/gorm:go_default_library",
],
)

View File

@@ -0,0 +1,46 @@
package orm
import (
"strings"
"time"
"go-common/library/ecode"
"go-common/library/log"
xtime "go-common/library/time"
// database driver
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)
// Config mysql config.
type Config struct {
DSN string // data source name.
Active int // pool
Idle int // pool
IdleTimeout xtime.Duration // connect max life time.
}
type ormLog struct{}
func (l ormLog) Print(v ...interface{}) {
log.Info(strings.Repeat("%v ", len(v)), v...)
}
func init() {
gorm.ErrRecordNotFound = ecode.NothingFound
}
// NewMySQL new db and retry connection when has error.
func NewMySQL(c *Config) (db *gorm.DB) {
db, err := gorm.Open("mysql", c.DSN)
if err != nil {
log.Error("db dsn(%s) error: %v", c.DSN, err)
panic(err)
}
db.DB().SetMaxIdleConns(c.Idle)
db.DB().SetMaxOpenConns(c.Active)
db.DB().SetConnMaxLifetime(time.Duration(c.IdleTimeout) / time.Second)
db.SetLogger(ormLog{})
return
}

View File

@@ -0,0 +1,35 @@
package orm
import (
. "github.com/jinzhu/gorm"
)
func init() {
DefaultCallback.Create().Replace("gorm:update_time_stamp", updateTimeStampForCreateCallback)
DefaultCallback.Update().Replace("gorm:update_time_stamp", updateTimeStampForUpdateCallback)
}
// updateTimeStampForCreateCallback will set `ctime`, `mtime` when creating
func updateTimeStampForCreateCallback(scope *Scope) {
if !scope.HasError() {
now := NowFunc()
if createdAtField, ok := scope.FieldByName("ctime"); ok {
if createdAtField.IsBlank {
createdAtField.Set(now)
}
}
if updatedAtField, ok := scope.FieldByName("mtime"); ok {
if updatedAtField.IsBlank {
updatedAtField.Set(now)
}
}
}
}
func updateTimeStampForUpdateCallback(scope *Scope) {
if _, ok := scope.Get("gorm:update_column"); !ok {
scope.SetColumn("mtime", NowFunc())
}
}