daShangDao_kfz_goods_pricing/internal/database/db.go

111 lines
2.6 KiB
Go

package database
import (
"database/sql"
"fmt"
"log"
"os"
_ "modernc.org/sqlite"
)
var DB *sql.DB
// InitDB 初始化数据库
func InitDB(dbPath string) error {
var err error
log.Printf("[DB] 初始化数据库: path=%s", dbPath)
// 确保数据库目录存在
dir := "./data"
if _, err := os.Stat(dir); os.IsNotExist(err) {
log.Printf("[DB] 数据库目录不存在, 创建: dir=%s", dir)
os.MkdirAll(dir, 0755)
}
// 打开数据库连接
DB, err = sql.Open("sqlite", dbPath)
if err != nil {
return fmt.Errorf("打开数据库失败: %w", err)
}
// 创建表
err = createTables()
if err != nil {
return fmt.Errorf("创建表失败: %w", err)
}
log.Printf("[DB] 数据库初始化完成")
return nil
}
// PlaceholderDownPrice float64 `json:"placeholderDownPrice"` // 占位降价 默认0.01
// MinShippingFee float64 `json:"minShippingFee"` // 最低运费
// MinPrice float64 `json:"minPrice"` // 最低书价
//
// createTables 创建数据表
func createTables() error {
sql := `
CREATE TABLE IF NOT EXISTS goods_pricing (
id INTEGER PRIMARY KEY AUTOINCREMENT,
isbn TEXT,
book_name TEXT,
author TEXT,
publishing TEXT,
out_id TEXT,
quality TEXT,
query_index INTEGER DEFAULT 0,
user_id TEXT,
price REAL,
shipping_fee REAL,
placeholder_down_price REAL, -- 占位降价
min_shipping_fee REAL, -- 最低运费
min_price REAL, -- 最低书价
final_price REAL, -- 最终价格
fail_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS kfz_token (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL DEFAULT '',
token TEXT NOT NULL,
is_enable INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_isbn ON goods_pricing(isbn);
CREATE INDEX IF NOT EXISTS idx_out_id ON goods_pricing(out_id);
CREATE TABLE IF NOT EXISTS kfz_config (
id INTEGER PRIMARY KEY AUTOINCREMENT,
new_price REAL,
placeholder_down_price REAL,
min_shipping_fee REAL,
min_price REAL,
query_index INTEGER DEFAULT 0
);
`
_, err := DB.Exec(sql)
if err != nil {
return err
}
// 兼容旧表:添加 password 列(已存在则忽略)
DB.Exec(`ALTER TABLE kfz_token ADD COLUMN password TEXT NOT NULL DEFAULT ''`)
return nil
}
// CloseDB 关闭数据库连接
func CloseDB() error {
if DB != nil {
return DB.Close()
}
return nil
}