117 lines
2.5 KiB
Go
117 lines
2.5 KiB
Go
package controllers
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"github.com/PuerkitoBio/goquery"
|
|
"github.com/jinzhu/gorm"
|
|
"liteblog/models"
|
|
"liteblog/syserrors"
|
|
"log"
|
|
"time"
|
|
)
|
|
|
|
type NoteController struct {
|
|
BaseController
|
|
}
|
|
|
|
// 写文章
|
|
// @router /new [get]
|
|
func (c *NoteController) NewPage() {
|
|
log.Print("开始写文章了...")
|
|
c.Data["key"] = c.UUID()
|
|
c.TplName = "note_new.html"
|
|
}
|
|
|
|
// 保存文章
|
|
// @router /save/:key [post]
|
|
func (c *NoteController) Save() {
|
|
// 得到页面传过来的key
|
|
key := c.Ctx.Input.Param(":key")
|
|
// 判空
|
|
title := c.GetMustString("title", "标题不能为空")
|
|
content := c.GetMustString("content", "内容不能为空")
|
|
// 获取内容摘要
|
|
summary, _ := getSummary(content)
|
|
// 根据key查询文章
|
|
note, err := models.QueryNoteByKeyAndUserId(key, int(c.User.ID))
|
|
var n models.Note
|
|
if err != nil {
|
|
if err != gorm.ErrRecordNotFound {
|
|
c.Abort500(syserrors.NewError("保存失败!", err))
|
|
}
|
|
|
|
n = models.Note{
|
|
Key: key,
|
|
Summary: summary,
|
|
Title: title,
|
|
Content: content,
|
|
UserId: int(c.User.ID),
|
|
}
|
|
} else {
|
|
log.Print("进入了修改过程")
|
|
//查询不报错,这存在文章,那就做更新文章操作
|
|
n = note
|
|
n.Title = title
|
|
n.Content = content
|
|
n.Summary = summary
|
|
n.UpdatedAt = time.Now()
|
|
}
|
|
|
|
if err := models.SaveNote(&n); err != nil {
|
|
c.Abort500(syserrors.NewError("保存失败!", err))
|
|
}
|
|
c.JSONOk("成功", fmt.Sprintf("/details/%s", key))
|
|
}
|
|
|
|
// 编辑文章
|
|
// @router /edit/:key [get]
|
|
func (c *NoteController) EditPage() {
|
|
key := c.Ctx.Input.Param(":key")
|
|
note, err := models.QueryNoteByKeyAndUserId(key, int(c.User.ID))
|
|
|
|
if err != nil {
|
|
c.Abort500(syserrors.NewError("文章不存在!", err))
|
|
}
|
|
|
|
c.Data["note"] = note
|
|
c.Data["key"] = key
|
|
c.TplName = "note_new.html"
|
|
}
|
|
|
|
// 删除文章
|
|
// @router /del/:key [post]
|
|
func (c *NoteController) Del() {
|
|
key := c.Ctx.Input.Param(":key")
|
|
|
|
if err := models.DeleteNoteByUserIdAndKey(key, int(c.User.ID)); err != nil {
|
|
c.Abort500(syserrors.NewError("删除失败", err))
|
|
}
|
|
|
|
c.JSONOk("删除成功", "/")
|
|
}
|
|
|
|
|
|
func (c *NoteController) NestPrepare() {
|
|
c.MustLogin()
|
|
if c.User.Role != 0 {
|
|
c.Abort500(syserrors.NewError("您没有权限", nil))
|
|
}
|
|
}
|
|
|
|
func getSummary(content string) (string, error) {
|
|
var buf bytes.Buffer
|
|
buf.Write([]byte(content))
|
|
//用goquery来解析content
|
|
doc, err := goquery.NewDocumentFromReader(&buf)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
// Text()得到body元素下的文本内容去掉html元素
|
|
str := doc.Find("body").Text()
|
|
// 截取字符
|
|
if len(str) > 600 {
|
|
str = str[0:600] + "..."
|
|
}
|
|
return str, nil
|
|
} |