// 用户注册逻辑
func RegisterUser(db *sql.DB, email, password string) error {
// 1. 先检查邮箱是否已存在
exists, err := CheckEmailExists(db, email)
if err != nil {
return fmt.Errorf("检查邮箱失败: %v", err)
}
if exists {
return fmt.Errorf("邮箱 %s 已被注册", email)
}
// 2. 邮箱可用,执行注册逻辑
_, err = db.Exec(`
INSERT INTO users (email, password, created_at)
VALUES (?, ?, NOW())
`, email, password)
if err != nil {
return fmt.Errorf("注册失败: %v", err)
}
fmt.Printf("用户 %s 注册成功!\n", email)
return nil
}
// 检查用户是否有订单
func UserHasOrders(db *sql.DB, userID int) (bool, error) {
var hasOrders bool
query := `
SELECT EXISTS (
SELECT 1 FROM orders
WHERE user_id = ? AND status != 'cancelled'
)`
err := db.QueryRow(query, userID).Scan(&hasOrders)
return hasOrders, err
}
// 获取用户信息,同时检查是否为 VIP
func GetUserWithVIPStatus(db *sql.DB, userID int) error {
type UserInfo struct {
ID int `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
IsVIP bool `json:"is_vip"`
}
var user UserInfo
query := `
SELECT
u.id,
u.name,
u.email,
EXISTS (
SELECT 1 FROM memberships m
WHERE m.user_id = u.id
AND m.status = 'active'
AND m.expired_at > NOW()
) AS is_vip
FROM users u
WHERE u.id = ?`
err := db.QueryRow(query, userID).Scan(
&user.ID, &user.Name, &user.Email, &user.IsVIP,
)
if err != nil {
return err
}
fmt.Printf("用户信息: %+v\n", user)
return nil
}