68 lines
1.4 KiB
Go
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
|
|
}
|