自动更新管控端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

165 lines
3.7 KiB

package db
import (
"database/sql"
"time"
)
// CreateUserTable 创建用户表
func CreateUserTable(db *sql.DB) error {
createTableSQL := `
CREATE TABLE IF NOT EXISTS sc_user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL DEFAULT 'user',
status VARCHAR(20) NOT NULL DEFAULT 'active',
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
last_login DATETIME
);`
_, err := db.Exec(createTableSQL)
return err
}
// AddUser 添加新用户
func AddUser(user User) (*User, error) {
// 使用全局数据库连接
conn := GetSqliteDB()
if conn == nil {
return nil, ErrDbNotInit
}
insertSQL := `
INSERT INTO sc_user (username, email, password_hash, role, status, created_at, updated_at, last_login)
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
`
result, err := conn.Exec(insertSQL,
user.Username, user.Email, user.PasswordHash, user.Role,
user.Status, user.CreatedAt, user.UpdatedAt, user.LastLogin,
)
if err != nil {
return nil, err
}
// 获取插入的ID
id, err := result.LastInsertId()
if err != nil {
return nil, err
}
// 设置ID并返回
user.ID = int(id)
return &user, nil
}
// GetUserByUsername 根据用户名获取用户
func GetUserByUsername(username string) (*User, error) {
conn := GetSqliteDB()
if conn == nil {
return nil, ErrDbNotInit
}
querySQL := `
SELECT id, username, email, password_hash, role, status, created_at, updated_at, last_login
FROM sc_user WHERE username = ?
`
var user User
err := conn.QueryRow(querySQL, username).Scan(
&user.ID, &user.Username, &user.Email, &user.PasswordHash,
&user.Role, &user.Status, &user.CreatedAt, &user.UpdatedAt, &user.LastLogin,
)
if err != nil {
return nil, err
}
return &user, nil
}
// GetUserByEmail 根据邮箱获取用户
func GetUserByEmail(email string) (*User, error) {
conn := GetSqliteDB()
if conn == nil {
return nil, ErrDbNotInit
}
querySQL := `
SELECT id, username, email, password_hash, role, status, created_at, updated_at, last_login
FROM sc_user WHERE email = ?
`
var user User
err := conn.QueryRow(querySQL, email).Scan(
&user.ID, &user.Username, &user.Email, &user.PasswordHash,
&user.Role, &user.Status, &user.CreatedAt, &user.UpdatedAt, &user.LastLogin,
)
if err != nil {
return nil, err
}
return &user, nil
}
// CheckUsernameExists 检查用户名是否存在
func CheckUsernameExists(username string) (bool, error) {
conn := GetSqliteDB()
if conn == nil {
return false, ErrDbNotInit
}
querySQL := "SELECT COUNT(*) FROM sc_user WHERE username = ?"
var count int
err := conn.QueryRow(querySQL, username).Scan(&count)
if err != nil {
return false, err
}
return count > 0, nil
}
// CheckEmailExists 检查邮箱是否存在
func CheckEmailExists(email string) (bool, error) {
conn := GetSqliteDB()
if conn == nil {
return false, ErrDbNotInit
}
querySQL := "SELECT COUNT(*) FROM sc_user WHERE email = ?"
var count int
err := conn.QueryRow(querySQL, email).Scan(&count)
if err != nil {
return false, err
}
return count > 0, nil
}
// UpdateUserPassword 更新用户密码
func UpdateUserPassword(userID int, passwordHash string, updatedAt time.Time) error {
conn := GetSqliteDB()
if conn == nil {
return ErrDbNotInit
}
updateSQL := "UPDATE sc_user SET password_hash = ?, updated_at = ? WHERE id = ?"
_, err := conn.Exec(updateSQL, passwordHash, updatedAt, userID)
return err
}
// UpdateUserLastLogin 更新用户最后登录时间
func UpdateUserLastLogin(userID int) error {
conn := GetSqliteDB()
if conn == nil {
return ErrDbNotInit
}
updateSQL := "UPDATE sc_user SET last_login = ? WHERE id = ?"
_, err := conn.Exec(updateSQL, time.Now(), userID)
return err
}