licensing-cotton/internal/database/database.go
2025-01-16 15:41:42 +08:00

68 lines
1.4 KiB
Go

package database
import (
"database/sql"
"fmt"
"log"
_ "modernc.org/sqlite"
)
var DB *sql.DB
func InitDB(dbFile string) error {
var err error
DB, err = sql.Open("sqlite", dbFile)
if err != nil {
return fmt.Errorf("无法打开数据库: %w", err)
}
// 初始化表
if err := createTables(); err != nil {
return err
}
return nil
}
func createTables() error {
// 创建 users 表
_, err := DB.Exec(`
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
password_hash TEXT NOT NULL,
role TEXT NOT NULL
)`)
if err != nil {
return err
}
// 创建 devices 表
_, err = DB.Exec(`
CREATE TABLE IF NOT EXISTS devices (
id INTEGER PRIMARY KEY AUTOINCREMENT,
device_id TEXT UNIQUE NOT NULL,
expiration DATETIME NOT NULL
)`)
if err != nil {
return err
}
// **创建 pending_requests 表**
_, err = DB.Exec(`CREATE TABLE IF NOT EXISTS pending_requests (
id INTEGER PRIMARY KEY AUTOINCREMENT,
device_id TEXT NOT NULL,
request_time DATETIME NOT NULL,
status TEXT NOT NULL CHECK(status IN ('pending', 'approved', 'rejected')),
approved_by TEXT DEFAULT NULL,
approved_at DATETIME DEFAULT NULL,
expiration DATETIME DEFAULT NULL
);`)
if err != nil {
log.Fatalf("创建 pending_requests 失败: %v", err)
return err
}
return nil
}