feat(admin): establish core data model

This commit is contained in:
QiuSW
2026-08-03 18:37:48 +08:00
parent 8be6d206dd
commit 87591e84f9
17 changed files with 1081 additions and 6 deletions
+25 -3
View File
@@ -3,11 +3,33 @@ package sqlite
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
"github.com/mattn/go-sqlite3"
)
// Open 打开 SQLite 数据源;调用方负责其 schema 与生命周期。
const driverName = "cmbuyer-sqlite3"
func init() {
sql.Register(driverName, &sqlite3.SQLiteDriver{
ConnectHook: func(connection *sqlite3.SQLiteConn) error {
_, err := connection.Exec("PRAGMA foreign_keys = ON", nil)
return err
},
})
}
// Open 打开 SQLite 数据源并逐连接启用外键,避免连接池配置遗漏而绕过授权与任务的引用约束。
func Open(dataSourceName string) (*sql.DB, error) {
return sql.Open("sqlite3", dataSourceName)
database, err := sql.Open(driverName, dataSourceName)
if err != nil {
return nil, err
}
if err := database.Ping(); err != nil {
_ = database.Close()
return nil, fmt.Errorf("ping SQLite database: %w", err)
}
return database, nil
}
@@ -21,4 +21,15 @@ func TestOpen(t *testing.T) {
if err := database.PingContext(context.Background()); err != nil {
t.Fatalf("ping SQLite database: %v", err)
}
database.SetMaxIdleConns(0)
for attempt := 0; attempt < 2; attempt++ {
var foreignKeysEnabled int
if err := database.QueryRow("PRAGMA foreign_keys").Scan(&foreignKeysEnabled); err != nil {
t.Fatalf("read SQLite foreign key setting: %v", err)
}
if foreignKeysEnabled != 1 {
t.Fatalf("SQLite foreign_keys = %d, want 1", foreignKeysEnabled)
}
}
}