1、sql database use interface

This commit is contained in:
redhat 2025-05-22 10:58:08 +08:00
parent 7ad3d0487c
commit b24683e6e3
6 changed files with 60 additions and 13 deletions

View File

@ -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

View File

@ -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

View 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
}

View File

View 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
View File

@ -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