package model import ( "backend/store" "backend/util" "fmt" ) type Admin struct { ID int `json:"id" db:"id"` Username string `json:"username" db:"username"` Password string `json:"password" db:"password"` Phone string `json:"phone" db:"phone"` Email string `json:"email" db:"email"` Token string `json:"token" db:"token"` Group string `json:"group" db:"group"` Status int `json:"status" db:"status"` Expires int `json:"expires" db:"expires"` Role int `json:"role" db:"role"` CreateTime int `json:"createTime" db:"createTime"` UpdateTime int `json:"updateTime" db:"updateTime"` } type AdminLog struct { ID int `json:"id" db:"id"` Admin string `json:"admin" db:"admin"` Action string `json:"action" db:"action"` Params string `json:"params" db:"params"` IP string `json:"ip" db:"ip"` CreateTime int `json:"createTime" db:"createTime"` } func (a *Admin) List() (*Result, error) { // 这里可以添加数据库查询逻辑来获取管理员列表 // 假设我们从数据库中查询到数据并返回 var admins []Admin db := util.MPool.GetGameDB() // 假设使用默认的AppConfig和ServerId为0 if db == nil { return nil, fmt.Errorf("failed to get database connection") } err := db.Select(&admins, "SELECT * FROM admin") if err != nil { return nil, fmt.Errorf("failed to scan rows: %v", err) } return &Result{ Data: admins, Result: 0, }, nil } func (a *Admin) Add() (*Result, error) { // 这里可以添加逻辑来保存管理员信息到数据库 // 假设我们将管理员信息插入到数据库中 db := util.MPool.GetGameDB() // 假设使用默认的AppConfig和ServerId为0 if db == nil { return nil, fmt.Errorf("failed to get database connection") } defer db.Close() a.CreateTime = int(util.Now()) a.UpdateTime = a.CreateTime a.Password, _ = util.Encrypt(a.Password) // 假设有一个加密函数 _, err := db.NamedExec("INSERT INTO admin (`username`, `password`, `phone`, `email`, `token`, `group`, `status`, `role`, `createTime`, `updateTime`, `expires`) VALUES (:username, :password, :phone, :email, :token, :group, :status, :role, :createTime, :updateTime, :expires)", a) if err != nil { return nil, fmt.Errorf("failed to add admin: %v", err) } return &Result{ Data: a, Result: 0, }, nil } func (a *Admin) Login() (*Admin, error) { // 这里可以添加逻辑来验证用户名和密码 // 假设我们从数据库中查询到管理员信息并返回 db := util.MPool.GetGameDB() // 假设使用默认的AppConfig和ServerId为0 if db == nil { return nil, fmt.Errorf("failed to get database connection") } var admin Admin err := db.Get(&admin, "SELECT * FROM admin WHERE username = ?", a.Username) admin.Password, _ = util.Decrypt(admin.Password) // 假设有一个解密函数Login if err != nil { return nil, fmt.Errorf("账号不存在") } if admin.Password != a.Password { return nil, fmt.Errorf("密码错误") } if (admin.Expires > 0 && admin.Expires < int(util.Now())) || admin.Token == "" || admin.Expires == 0 { admin.CreateToken() // 如果令牌过期,重新生成令牌 } return &Admin{ ID: admin.ID, Username: admin.Username, Token: admin.Token, }, nil } func (a *Admin) LoginByCode(phone, code string) (*Admin, error) { db := util.MPool.GetGameDB() // 假设使用默认的AppConfig和ServerId为0 if db == nil { return nil, fmt.Errorf("failed to get database connection") } var admin Admin err := db.Get(&admin, "SELECT * FROM admin WHERE phone = ?", phone) if (admin.Expires > 0 && admin.Expires < int(util.Now())) || admin.Token == "" || admin.Expires == 0 { admin.CreateToken() // 如果令牌过期,重新生成令牌 } if err != nil { return nil, fmt.Errorf("账号不存在") } if code == "" { return nil, fmt.Errorf("验证码不能为空") } storedCode, exists := store.GetCode(phone) if !exists || storedCode != code { return nil, fmt.Errorf("验证码错误") } return &Admin{ ID: admin.ID, Username: admin.Username, Token: admin.Token, }, nil } func (a *Admin) CreateToken() error { // 这里可以添加逻辑来生成令牌 // 假设我们生成一个新的令牌并更新到数据库中 a.Token = util.GenerateToken() // 假设有一个生成令牌的函数 db := util.MPool.GetGameDB() // 假设使用默认的AppConfig和ServerId为0 if db == nil { return fmt.Errorf("failed to get database connection") } a.Expires = int(util.Now()) + 604800 // 设置令牌过期时间为7天 store.AddToken(a.Token, int64(a.Expires), a.Username, util.GetRole(a.Role)) // 添加到TokenList _, err := db.NamedExec("UPDATE admin SET token = :token WHERE id = :id", a) if err != nil { return fmt.Errorf("failed to update token: %v", err) } return nil } func InitToken() { // 初始化TokenList,可以从数据库中加载现有的令牌 db := util.MPool.GetGameDB() // 假设使用默认的AppConfig和ServerId为0 if db == nil { return } var tokens []struct { Token string `db:"token"` Expires int64 `db:"expires"` UserName string `db:"username"` Role int `db:"role"` // 假设有一个角色字段 } err := db.Select(&tokens, "SELECT username, token, expires FROM admin WHERE token IS NOT NULL") if err != nil { return // 处理错误 } for _, t := range tokens { store.AddToken(t.Token, t.Expires, t.UserName, util.GetRole(t.Role)) } } func SendPhoneCode(phone string) error { // 这里可以添加逻辑来发送验证码到手机 // 假设我们使用一个外部服务发送验证码 Code, err := util.GeneratedCode(phone) // 假设有一个发送短信的函数 store.AddCode(phone, Code) // 将验证码存储到CodeList if err != nil { return fmt.Errorf("failed to send code: %v", err) } return nil }