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 }