diff --git a/controllers/BlogController.go b/controllers/BlogController.go index 658541f..789f5d2 100644 --- a/controllers/BlogController.go +++ b/controllers/BlogController.go @@ -44,6 +44,15 @@ func (this *BlogController) Get() { this.Redirect("/500", 302) return } + uid := this.GetSession("userid") + if uid != nil { + if blog.UserId == uid.(int64) { + this.Data["IsAuthor"] = true + } + if flag, err := service.IsLike(id, uid.(int64)); err == nil { + this.Data["IsLike"] = flag + } + } this.Data["Blog"] = blog this.Data["NickName"] = this.GetSession("nickname") this.Data["IsLogin"] = this.GetSession("nickname") != nil @@ -75,7 +84,7 @@ func (this *BlogController) Del() { } blog.Delflag = 1 err = service.DelBlog(blog) - if err!=nil { + if err != nil { this.Data["json"] = models.ReurnError(500, "") this.ServeJSON() return @@ -132,5 +141,4 @@ func (this *BlogController) BlogsPage() { this.Data["Flag"] = flag this.Data["IsBlog"] = true this.TplName = "blogs.html" - } diff --git a/controllers/LikeController.go b/controllers/LikeController.go new file mode 100644 index 0000000..452b8ac --- /dev/null +++ b/controllers/LikeController.go @@ -0,0 +1,52 @@ +package controllers + +import ( + "strconv" + "beeblog/service" + "github.com/astaxie/beego" + "beeblog/models" +) + +type LikeController struct { + beego.Controller +} + +func (this *LikeController) Save() { + uid := this.GetSession("userid") + if uid == nil { + this.Data["json"] = models.ReurnError(401, "") + this.ServeJSON() + return + } + idStr := this.Ctx.Input.Param(":id") + id, _ := strconv.ParseInt(idStr, 10, 64) + like := &models.Like{BlogId: id, UserId: uid.(int64)} + if _, err := service.SaveLike(like); err != nil { + this.Data["json"] = models.ReurnError(500, "保存失败") + }else{ + this.Data["json"] = models.ReurnSuccess("") + } + this.ServeJSON() + service.CountLike(uid.(int64)) + return +} + +func (this *LikeController) Delete() { + uid := this.GetSession("userid") + if uid == nil { + this.Data["json"] = models.ReurnError(401, "") + this.ServeJSON() + return + } + idStr := this.Ctx.Input.Param(":id") + id, _ := strconv.ParseInt(idStr, 10, 64) + like := &models.Like{BlogId: id, UserId: uid.(int64)} + if _, err := service.DelLike(like); err != nil { + this.Data["json"] = models.ReurnError(500, "保存失败") + }else{ + this.Data["json"] = models.ReurnSuccess("") + } + this.ServeJSON() + service.CountLike(uid.(int64)) + return +} diff --git a/data/beeblog.db b/data/beeblog.db index 3068f8f..0d3623b 100644 Binary files a/data/beeblog.db and b/data/beeblog.db differ diff --git a/models/DataInit.go b/models/DataInit.go index 2c3f081..83ea4fd 100644 --- a/models/DataInit.go +++ b/models/DataInit.go @@ -19,7 +19,7 @@ func RegistDB() { os.Create(_DB_NAME) } //orm.RegisterModel(new(Attachment),new(Topic)) - orm.RegisterModel(new(Attachment),new(User),new(Blog),new(NLabel),new(Note),new(NoteColl),new(Category)) + orm.RegisterModel(new(Attachment),new(User),new(Blog),new(NLabel),new(Note),new(NoteColl),new(Category),new(Like)) orm.RegisterDriver(_SQLITE3_DRIVER,orm.DRSqlite) orm.RegisterDataBase("default",_SQLITE3_DRIVER,_DB_NAME,10) } \ No newline at end of file diff --git a/models/Like.go b/models/Like.go index 3a29b55..21934cf 100644 --- a/models/Like.go +++ b/models/Like.go @@ -6,5 +6,7 @@ type Like struct { Id int64 UserId int64 BlogId int64 - Ltime time.Time `orm:"datetime"` + Ltime time.Time `orm:"auto_now_add;type(datetime)"` + + Note Note `orm:"-"` } diff --git a/routers/LikeRouter.go b/routers/LikeRouter.go new file mode 100644 index 0000000..ec7b27e --- /dev/null +++ b/routers/LikeRouter.go @@ -0,0 +1,11 @@ +package routers + +import ( + "beeblog/controllers" + "github.com/astaxie/beego" +) + +func init() { + beego.Router("/like/:id([0-9]+)", &controllers.LikeController{}, "get:Save") + beego.Router("/unlike/:id([0-9]+)", &controllers.LikeController{}, "get:Delete") +} diff --git a/service/BlogService.go b/service/BlogService.go index 37b2f9a..4c1b799 100644 --- a/service/BlogService.go +++ b/service/BlogService.go @@ -6,8 +6,6 @@ import ( "beeblog/utils" ) -type BlogService struct { -} func count(num int, size int, cat int64) (*utils.Page, error) { o := orm.NewOrm() diff --git a/service/LikeService.go b/service/LikeService.go new file mode 100644 index 0000000..900e3ae --- /dev/null +++ b/service/LikeService.go @@ -0,0 +1,29 @@ +package service + +import ( + "beeblog/models" + "github.com/astaxie/beego/orm" + "fmt" +) + +func SaveLike(like *models.Like) (int64, error) { + return orm.NewOrm().Insert(like) +} +func DelLike(like *models.Like) (int64, error) { + return orm.NewOrm().QueryTable(models.Like{}).Filter("BlogId",like.BlogId).Filter("UserId", like.UserId).Delete() +} + +func IsLike(bid int64, uid int64) (bool, error) { + totalCount, err := orm.NewOrm().QueryTable(&models.Like{}).Filter("BlogId", bid).Filter("UserId", uid).Count() + if err == nil { + fmt.Println(totalCount,"like count") + if totalCount > 0 { + return true, nil + } else { + return false, nil + } + }else{ + fmt.Println(err) + return false,err + } +} diff --git a/service/UserService.go b/service/UserService.go index 4592627..3b1a175 100644 --- a/service/UserService.go +++ b/service/UserService.go @@ -8,11 +8,11 @@ import ( type UserService struct { } -func GetUser(id int64) (*models.User,error) { +func GetUser(id int64) (*models.User, error) { o := orm.NewOrm() - user := &models.User{Id:id} + user := &models.User{Id: id} err := o.Read(user) - return user,err + return user, err } func FindByUserName(username string) (*models.User, error) { @@ -43,29 +43,22 @@ func SaveUser(user *models.User) error { func CountBlog(uid int64) { o := orm.NewOrm() - totalItem := 0 - err := o.Raw("SELECT count(*) FROM blog where delflag = 0 and user_id =? ", uid).QueryRow(&totalItem) //获取总条数 - if err != nil { - return - } - user := &models.User{Id: uid} - err = o.Read(user) - if err != nil { - return - } - user.BlogCount = totalItem - o.Update(user, "BlogCount") + browses := 0 + o.Raw("UPDATE `user` SET `blog_count` = (SELECT count(id) FROM blog where delflag = 0 and user_id =?1 ) WHERE `id` = ?2 ", uid, uid).QueryRow(&browses) return } -func CountBrows(uid int64){ +func CountBrows(uid int64) { o := orm.NewOrm() browses := 0 - o.Raw("UPDATE `user` SET `blog_browes` = (select SUM(browses) browses from blog where user_id = ?1) WHERE `id` = ?2 ", uid,uid).QueryRow(&browses) //获取总条数 + o.Raw("UPDATE `user` SET `blog_browes` = (select SUM(browses) browses from blog where user_id = ?1) WHERE `id` = ?2 ", uid, uid).QueryRow(&browses) //获取总条数 return } func CountComments(uid int64) { } func CountLike(uid int64) { - + o := orm.NewOrm() + browses := 0 + o.Raw("UPDATE `user` SET `blog_like` = (select count(id) from like where user_id = ?1) WHERE `id` = ?2 ", uid, uid).QueryRow(&browses) + return } diff --git a/static/img/liked.png b/static/img/liked.png new file mode 100644 index 0000000..3fc7745 Binary files /dev/null and b/static/img/liked.png differ diff --git a/views/blog.html b/views/blog.html index cbda630..1c54b80 100644 --- a/views/blog.html +++ b/views/blog.html @@ -36,6 +36,11 @@

{{.Blog.Title}}

+ {{if .IsLike}} + + {{else}} + + {{end}} {{.Blog.User.NickName}} 时间:{{.Blog.Ctime.Format "2006-01-02"}} 阅读数:{{.Blog.Browses}} @@ -53,4 +58,35 @@
+ \ No newline at end of file