From b24683e6e3682a854e3f93fcfe5ca24d94f479d7 Mon Sep 17 00:00:00 2001 From: redhat <2292650292@qq.com> Date: Thu, 22 May 2025 10:58:08 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81sql=20database=20use=20interface?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dao/sqldb/base.go | 16 +++++++++++----- dao/sqldb/init.go | 22 +++++++++++++++------- dao/sqldb/mysql/tablecreate.go | 17 +++++++++++++++++ dao/sqldb/mysql/tablecreate.sql | 0 dao/sqldb/sqlite/tablecreate.go | 16 +++++++++++++++- go.mod | 2 ++ 6 files changed, 60 insertions(+), 13 deletions(-) create mode 100644 dao/sqldb/mysql/tablecreate.go create mode 100644 dao/sqldb/mysql/tablecreate.sql diff --git a/dao/sqldb/base.go b/dao/sqldb/base.go index a64b1d6..7c1767b 100644 --- a/dao/sqldb/base.go +++ b/dao/sqldb/base.go @@ -1,20 +1,26 @@ package sqldb import ( - "dashboard/dao/sqldb/sqlite" "dashboard/logger" + + "github.com/jmoiron/sqlx" ) var ( log *logger.Logger - db *SqlDb + db *sqlx.DB ) -func SqlDbInit(_log *logger.Logger, _db *SqlDb) error { - db = _db +type BaseDb interface { + GetDb() *sqlx.DB + CreateUserSql() string +} + +func SqlDbInit(_log *logger.Logger, _db BaseDb) error { + db = _db.GetDb() log = _log - _, err := db.Exec(sqlite.CreateUserSql) + _, err := db.Exec(_db.CreateUserSql()) if err != nil { log.Sugar().Errorf("Crete user table error: %v", err) return err diff --git a/dao/sqldb/init.go b/dao/sqldb/init.go index 8c83ecf..a4560a1 100644 --- a/dao/sqldb/init.go +++ b/dao/sqldb/init.go @@ -1,31 +1,39 @@ package sqldb import ( + "dashboard/dao/sqldb/mysql" + "dashboard/dao/sqldb/sqlite" "dashboard/models" "dashboard/settings" "fmt" + "os" + "path/filepath" "strings" + _ "github.com/go-sql-driver/mysql" "github.com/jmoiron/sqlx" _ "github.com/mattn/go-sqlite3" ) -type SqlDb struct { - *sqlx.DB -} - const ( 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") { + 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) if err != nil { return nil, err } - return &SqlDb{db}, nil + return &sqlite.Sqlite3{Db: db}, nil } 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) - return &SqlDb{db}, nil + return &mysql.Mysql{Db: db}, nil } return nil, models.ErrorSqlInitErr diff --git a/dao/sqldb/mysql/tablecreate.go b/dao/sqldb/mysql/tablecreate.go new file mode 100644 index 0000000..29ae941 --- /dev/null +++ b/dao/sqldb/mysql/tablecreate.go @@ -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 +} diff --git a/dao/sqldb/mysql/tablecreate.sql b/dao/sqldb/mysql/tablecreate.sql new file mode 100644 index 0000000..e69de29 diff --git a/dao/sqldb/sqlite/tablecreate.go b/dao/sqldb/sqlite/tablecreate.go index 328c4c3..4851cbe 100644 --- a/dao/sqldb/sqlite/tablecreate.go +++ b/dao/sqldb/sqlite/tablecreate.go @@ -1,3 +1,17 @@ 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));` \ No newline at end of file +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 +} diff --git a/go.mod b/go.mod index f3409f5..e65da7a 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/fsnotify/fsnotify v1.9.0 github.com/gin-contrib/cors v1.7.5 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/gorilla/websocket v1.5.3 github.com/jmoiron/sqlx v1.4.0 @@ -24,6 +25,7 @@ require ( ) require ( + filippo.io/edwards25519 v1.1.0 // indirect github.com/BurntSushi/toml v1.5.0 // indirect github.com/bytedance/sonic v1.13.2 // indirect github.com/bytedance/sonic/loader v0.2.4 // indirect