diff --git a/pkg/datastore/database.go b/pkg/datastore/database.go index 083a686c..82b7577a 100644 --- a/pkg/datastore/database.go +++ b/pkg/datastore/database.go @@ -2,10 +2,12 @@ package datastore import "xorm.io/xorm" +// Database represents a database instance type Database struct { *xorm.EngineGroup } +// DoTransaction runs a new database transaction func (db *Database) DoTransaction(fn func(sess *xorm.Session) error) (err error) { sess := db.NewSession() defer sess.Close() diff --git a/pkg/datastore/datastore.go b/pkg/datastore/datastore.go index 1d9fa6ae..a9a18ea4 100644 --- a/pkg/datastore/datastore.go +++ b/pkg/datastore/datastore.go @@ -6,22 +6,27 @@ import ( "github.com/mayswind/lab/pkg/errs" ) +// DataStore represents a data storage containing a series of database shards type DataStore struct { databases []*Database } +// Choose returns a database instance by sharding key func (s *DataStore) Choose(key int64) *Database { return s.databases[0] } +// Query returns a new database session in a specific database by sharding key func (s *DataStore) Query(key int64) *xorm.Session { return s.Choose(key).NewSession() } +// DoTransaction runs a new database transaction in a specific database by sharding key func (s *DataStore) DoTransaction(key int64, fn func(sess *xorm.Session) error) (err error) { return s.Choose(key).DoTransaction(fn) } +// SyncStructs updates database structs by database models func (s *DataStore) SyncStructs(beans ...interface{}) error { var err error @@ -36,6 +41,7 @@ func (s *DataStore) SyncStructs(beans ...interface{}) error { return err } +// NewDataStore returns a new data storage by a series of database func NewDataStore(databases ...*Database) (*DataStore, error) { if len(databases) < 1 { return nil, errs.ErrDatabaseIsNull diff --git a/pkg/datastore/datastore_container.go b/pkg/datastore/datastore_container.go index 8401e429..58388b5b 100644 --- a/pkg/datastore/datastore_container.go +++ b/pkg/datastore/datastore_container.go @@ -16,16 +16,19 @@ import ( "github.com/mayswind/lab/pkg/settings" ) +// DataStoreContainer contains all data storages type DataStoreContainer struct { UserStore *DataStore TokenStore *DataStore UserDataStore *DataStore } +// Initialize a data storage container singleton instance var ( Container = &DataStoreContainer{} ) +// InitializeDataStore initializes data storage according to the config func InitializeDataStore(config *settings.Config) error { database, err := initializeDatabase(config.DatabaseConfig) diff --git a/pkg/datastore/query_log.go b/pkg/datastore/query_log.go index c8be8fa2..954fbeb2 100644 --- a/pkg/datastore/query_log.go +++ b/pkg/datastore/query_log.go @@ -7,43 +7,53 @@ import ( "github.com/mayswind/lab/pkg/settings" ) +// XOrmLoggerAdapter represents the logger adapter for xorm type XOrmLoggerAdapter struct { enable bool logLevel settings.Level } +// Debug logs debug log func (logger XOrmLoggerAdapter) Debug(v ...interface{}) { log.SqlQuery(v...) } +// Debugf logs debug log with custom format func (logger XOrmLoggerAdapter) Debugf(format string, v ...interface{}) { log.SqlQueryf(format, v...) } +// Info logs info log func (logger XOrmLoggerAdapter) Info(v ...interface{}) { log.SqlQuery(v...) } +// Infof logs info log with custom format func (logger XOrmLoggerAdapter) Infof(format string, v ...interface{}) { log.SqlQueryf(format, v...) } +// Warn logs warn log func (logger XOrmLoggerAdapter) Warn(v ...interface{}) { log.SqlQuery(v...) } +// Warnf logs warn log with custom format func (logger XOrmLoggerAdapter) Warnf(format string, v ...interface{}) { log.SqlQueryf(format, v...) } +// Error logs error log func (logger XOrmLoggerAdapter) Error(v ...interface{}) { log.SqlQuery(v...) } +// Errorf logs error log with custom format func (logger XOrmLoggerAdapter) Errorf(format string, v ...interface{}) { log.SqlQueryf(format, v...) } +// Level returns the logger level func (logger XOrmLoggerAdapter) Level() xorm.LogLevel { if logger.logLevel == settings.LOGLEVEL_DEBUG { return xorm.LOG_DEBUG @@ -58,6 +68,7 @@ func (logger XOrmLoggerAdapter) Level() xorm.LogLevel { return xorm.LOG_INFO } +// SetLevel sets the logger level func (logger XOrmLoggerAdapter) SetLevel(l xorm.LogLevel) { if l == xorm.LOG_DEBUG { logger.logLevel = settings.LOGLEVEL_DEBUG @@ -72,14 +83,17 @@ func (logger XOrmLoggerAdapter) SetLevel(l xorm.LogLevel) { logger.logLevel = settings.LOGLEVEL_INFO } +// ShowSQL sets whether write sql to log func (logger XOrmLoggerAdapter) ShowSQL(show ...bool) { logger.enable = len(show) > 0 && show[0] } +// IsShowSQL returns whether write sql to log func (logger XOrmLoggerAdapter) IsShowSQL() bool { return logger.enable } +// NewXOrmLoggerAdapter returns a new XOrmLoggerAdapter instance func NewXOrmLoggerAdapter(showSql bool, logLevel settings.Level) xorm.Logger { return XOrmLoggerAdapter{ enable: showSql,