1、sql database use interface
This commit is contained in:
parent
7ad3d0487c
commit
b24683e6e3
@ -1,20 +1,26 @@
|
|||||||
package sqldb
|
package sqldb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"dashboard/dao/sqldb/sqlite"
|
|
||||||
"dashboard/logger"
|
"dashboard/logger"
|
||||||
|
|
||||||
|
"github.com/jmoiron/sqlx"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
log *logger.Logger
|
log *logger.Logger
|
||||||
db *SqlDb
|
db *sqlx.DB
|
||||||
)
|
)
|
||||||
|
|
||||||
func SqlDbInit(_log *logger.Logger, _db *SqlDb) error {
|
type BaseDb interface {
|
||||||
db = _db
|
GetDb() *sqlx.DB
|
||||||
|
CreateUserSql() string
|
||||||
|
}
|
||||||
|
|
||||||
|
func SqlDbInit(_log *logger.Logger, _db BaseDb) error {
|
||||||
|
db = _db.GetDb()
|
||||||
log = _log
|
log = _log
|
||||||
|
|
||||||
_, err := db.Exec(sqlite.CreateUserSql)
|
_, err := db.Exec(_db.CreateUserSql())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Sugar().Errorf("Crete user table error: %v", err)
|
log.Sugar().Errorf("Crete user table error: %v", err)
|
||||||
return err
|
return err
|
||||||
|
@ -1,31 +1,39 @@
|
|||||||
package sqldb
|
package sqldb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"dashboard/dao/sqldb/mysql"
|
||||||
|
"dashboard/dao/sqldb/sqlite"
|
||||||
"dashboard/models"
|
"dashboard/models"
|
||||||
"dashboard/settings"
|
"dashboard/settings"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
_ "github.com/go-sql-driver/mysql"
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
_ "github.com/mattn/go-sqlite3"
|
_ "github.com/mattn/go-sqlite3"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SqlDb struct {
|
|
||||||
*sqlx.DB
|
|
||||||
}
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
mysqlDsn = "%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local"
|
mysqlDsn = "%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewDb(conf *settings.SqlConfig) (*SqlDb, error) {
|
func NewDb(conf *settings.SqlConfig) (BaseDb, error) {
|
||||||
if strings.Contains(conf.Type, "sqlite") {
|
if strings.Contains(conf.Type, "sqlite") {
|
||||||
|
cleanDir := filepath.Clean(conf.Database)
|
||||||
|
|
||||||
|
// 确保目标目录存在
|
||||||
|
if err := os.MkdirAll(filepath.Dir(cleanDir), 0755); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
db, err := sqlx.Connect("sqlite3", conf.Database)
|
db, err := sqlx.Connect("sqlite3", conf.Database)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &SqlDb{db}, nil
|
return &sqlite.Sqlite3{Db: db}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.Contains(conf.Type, "mysql") || strings.Contains(conf.Type, "maridb") {
|
if strings.Contains(conf.Type, "mysql") || strings.Contains(conf.Type, "maridb") {
|
||||||
@ -37,7 +45,7 @@ func NewDb(conf *settings.SqlConfig) (*SqlDb, error) {
|
|||||||
|
|
||||||
db.SetMaxOpenConns(conf.MaxConns)
|
db.SetMaxOpenConns(conf.MaxConns)
|
||||||
|
|
||||||
return &SqlDb{db}, nil
|
return &mysql.Mysql{Db: db}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, models.ErrorSqlInitErr
|
return nil, models.ErrorSqlInitErr
|
||||||
|
17
dao/sqldb/mysql/tablecreate.go
Normal file
17
dao/sqldb/mysql/tablecreate.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package mysql
|
||||||
|
|
||||||
|
import "github.com/jmoiron/sqlx"
|
||||||
|
|
||||||
|
const createUserSql = `CREATE TABLE IF NOT EXISTS db_unis_aisub (userid VARCHAR(64) NOT NULL,is_sub INT,CONSTRAINT db_unis_aisub_pk PRIMARY KEY (userid));`
|
||||||
|
|
||||||
|
type Mysql struct {
|
||||||
|
Db *sqlx.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Mysql) GetDb() *sqlx.DB {
|
||||||
|
return s.Db
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Mysql) CreateUserSql() string {
|
||||||
|
return createUserSql
|
||||||
|
}
|
0
dao/sqldb/mysql/tablecreate.sql
Normal file
0
dao/sqldb/mysql/tablecreate.sql
Normal file
@ -1,3 +1,17 @@
|
|||||||
package sqlite
|
package sqlite
|
||||||
|
|
||||||
const CreateUserSql = `CREATE TABLE IF NOT EXISTS db_unis_aisub (userid TEXT NOT NULL,is_sub INTEGER,CONSTRAINT db_unis_aisub_pk PRIMARY KEY (userid));`
|
import "github.com/jmoiron/sqlx"
|
||||||
|
|
||||||
|
const createUserSql = `CREATE TABLE IF NOT EXISTS db_unis_aisub (userid TEXT NOT NULL,is_sub INTEGER,CONSTRAINT db_unis_aisub_pk PRIMARY KEY (userid));`
|
||||||
|
|
||||||
|
type Sqlite3 struct {
|
||||||
|
Db *sqlx.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Sqlite3) GetDb() *sqlx.DB {
|
||||||
|
return s.Db
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *Sqlite3) CreateUserSql() string {
|
||||||
|
return createUserSql
|
||||||
|
}
|
||||||
|
2
go.mod
2
go.mod
@ -10,6 +10,7 @@ require (
|
|||||||
github.com/fsnotify/fsnotify v1.9.0
|
github.com/fsnotify/fsnotify v1.9.0
|
||||||
github.com/gin-contrib/cors v1.7.5
|
github.com/gin-contrib/cors v1.7.5
|
||||||
github.com/gin-gonic/gin v1.10.0
|
github.com/gin-gonic/gin v1.10.0
|
||||||
|
github.com/go-sql-driver/mysql v1.8.1
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.2
|
github.com/golang-jwt/jwt/v5 v5.2.2
|
||||||
github.com/gorilla/websocket v1.5.3
|
github.com/gorilla/websocket v1.5.3
|
||||||
github.com/jmoiron/sqlx v1.4.0
|
github.com/jmoiron/sqlx v1.4.0
|
||||||
@ -24,6 +25,7 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
filippo.io/edwards25519 v1.1.0 // indirect
|
||||||
github.com/BurntSushi/toml v1.5.0 // indirect
|
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||||
github.com/bytedance/sonic v1.13.2 // indirect
|
github.com/bytedance/sonic v1.13.2 // indirect
|
||||||
github.com/bytedance/sonic/loader v0.2.4 // indirect
|
github.com/bytedance/sonic/loader v0.2.4 // indirect
|
||||||
|
Loading…
Reference in New Issue
Block a user