model------userDao

package model

import (
“encoding/json”
“fmt”
)
//我们在服务器启动后,就初始化一个userDao实例,
//把它做成全局的变量。在需要和redis操作时,就直接使用即可。
var(
myUserDao *UserDao
)
//定义一个UserDao结构体
//完成对User 结构体的各种操作
//编写对User对象(实例)操作的各种方法,主要就是增删改查
type UserDao struct {
pool *redis.pool
}
//使用工厂模式,创建一个UserDao实例
//func NewUserDao(pool *redis.Pool)(UserDao *UserDao){
//userDao=&UserDao{
//pool:pool
//}
//return
//}

//思考一下在UserDao应该提供哪些方法给我们
//1.根据用户id返回一个User实例+err
func(this *UserDao)getUserById(conn redis.Conn,id int)(user *User,err error){
//通过给定id去redis查询这个用户
res,err:=redis.string(conn.Do(“HGet”,“user”,id))
if err!=nil{
//错误!
if err==redis.ErrNil{//表示在users 哈希中,没有找到对应id
err=ERROR_USER_NOTEXTSTS

	}
	return
}
user=&User{}

//这里我们需要把res 反序列化成User实例
err=json.Unmarshal([]byte(res),&user)
if err!=nil{
	fmt.Println("json.Unmarshal",err)
	return
}
return

}

//完成登录的效验Login
//1.Login完成对用户的验证
//2.如果用户的id和pwd不正确,则返回一个user是咧
//3.如果用户的id或pwd有错误,则返回对应的错误信息
func(this *UserDao)Login(userId int,userPwd string)(user *User,err error){
//先从UserDao 的连接池中取出一根连接
conn:=this.pool.Get()
defer conn.Close()
user,err =this.getUserById(conn,userId)
if err!=nil{
return
}
//这时证明这个用户是获取到
if user.UserPwd!=userPwd{
err=ERROR_USER_PWD
return
}
return
}
func(this *UserDao)Register(user *User )(err error){
//先从UserDao 的连接池中取出一根连接
conn:=this.pool.Get()
defer conn.Close()
user,err =this.getUserById(conn,user.UserId)
if err==nil{
err=ERROR_USER_EXISTS
return
}
//这时,说明id在redis还没有,则可以完成注册
data,err :=json.Marshal(user)//序列化
if err!=nil{
return
}
//入库
_,err=conn.Do(“HSet”,“user”,user.UserId,string(data))
if err!=nil{
fmt.Println(“保存注册用户错误err=”,err)
return
}
return
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章