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
}

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