💌 这是我参与「第五届青训营」伴学笔记创作活动的第 13 天。
🧡 大项目开发
💌 要开始做项目啦,我负责的是点赞和喜欢列表两个模块,我们采用了微服务的方式,一个服务一个库。我建了一个 likes 表,对应 Like 结构体:
type Like struct {
//gorm.Model
id int //自增主键
uid int //点赞用户id
vid int //视频id
act int //是否点赞,1为点赞,0为取消赞
}
点赞
Dao
💌 Dao 层负责数据库CRUD,创建四个函数分别是:
- InsertLike(uid int, vid int)
// InsertLike:uid 初次给 vid 点赞,插入数据库中
func InsertLike(uid int, vid int) error {
_, err := Db.Query("INSERT INTO likes(uid,vid,act) VALUES(?,?,1)", uid, vid)
if err != nil {
log.Fatal(err)
return errors.New("插入点赞数据失败")
}
return nil
}
- GetLike(uid int, vid int)
// GetLike:查询 uid 是否对 vid 视频点赞 0-不存在 1-点赞 2-没点赞 -1-错误
func GetLike(uid int, vid int) (int, error) {
var act int
err := Db.QueryRow("SELECT act FROM likes WHERE uid=? AND vid=?", uid, vid).Scan(&act)
if err != nil {
if err == sql.ErrNoRows {
return 0, errors.New("当前用户对该视频没点过赞")
} else {
log.Fatal(err)
return -1, errors.New("查询是否点赞失败")
}
}
if act == 1 {
return 1, nil
} else {
return 2, nil
}
}
- UpdateLike(uid int, vid int, act int)
// UpdateLike:根据 uid,vid, act 点赞或者取消赞
func UpdateLike(uid int, vid int, act int) error {
_, err := Db.Query("UPDATE likes SET act=? WHERE uid=? AND vid=?", act, uid, vid)
if err != nil {
log.Fatal(err)
return errors.New("更新点赞失败")
}
return nil
}
- LikeList(uid int)
// LikeList:查询 uid 点赞的全部视频 vid
func LikeList(uid int) ([]int, error) {
var likeList []int
rows, err := Db.Query("SELECT vid FROM likes WHERE uid=? AND act=?", uid, 1)
if err != nil || rows.Err() != nil {
log.Fatal(err)
return likeList, errors.New("查询点赞视频失败")
}
for rows.Next() {
var vid int
err := rows.Scan(&vid)
if err != nil {
log.Fatal(err)
return likeList, errors.New("查询点赞视频失败")
}
likeList = append(likeList, vid)
}
return likeList, nil
}
💌 持久层暂时先写这么多,我初步考虑的点赞流程是这样的,更新点赞前先看看当前视频是否在数据库中,如果没在则先添加对应信息,如果存在则直接更新点赞信息: