大项目开发之点赞篇(1)| 青训营笔记

101 阅读2分钟

💌 这是我参与「第五届青训营」伴学笔记创作活动的第 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
}

💌 持久层暂时先写这么多,我初步考虑的点赞流程是这样的,更新点赞前先看看当前视频是否在数据库中,如果没在则先添加对应信息,如果存在则直接更新点赞信息:

image.png