blog/BlogService/internal/controller/ArticleController.go

79 lines
2.1 KiB
Go

package controller
import (
"Blog/internal/async"
"Blog/internal/service"
"Blog/third_party/database"
"Common/consts"
"Common/model/AjaxResult"
"Common/model/blog"
"context"
"html/template"
"log"
"time"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/mvc"
"github.com/kataras/iris/v12/sessions"
)
type ArticleController struct {
Ctx iris.Context
Session *sessions.Session
}
func (ctrl *ArticleController) Get() {
ctrl.Ctx.View("/blog/article/index.html")
}
func (ctrl *ArticleController) GetLatest() {
ctx := context.Background()
var slices []blog.BlogArticle
err := database.RedisTemplate.ZRevRange(ctx, consts.REDIS_BLOG_ARTICLE_LATEST, 0, 10).ScanSlice(&slices)
if err != nil {
log.Println(err)
ctrl.Ctx.JSON(AjaxResult.Error("加载错误"))
return
}
for i := range slices {
article := &slices[i]
id := article.Id
viewRecord, _ := database.RedisTemplate.HGet(ctx, consts.REDIS_BLOG_VIEW_RECORD, id).Int()
article.ViewRecord = viewRecord
}
ctrl.Ctx.JSON(AjaxResult.Ok(slices))
}
func (ctrl *ArticleController) ViewArticle() {
articleId := ctrl.Ctx.Params().Get("id")
article := service.ArticleService.GetBlogArticle(articleId)
if article.Id == "" {
ctrl.Ctx.View("404.html")
return
}
xFrowardedFor := ctrl.Ctx.GetHeader("X-Forwarded-For")
async.PublishViewRecord(async.ViewRecord{RelId: articleId, IpAddr: xFrowardedFor, ViewTime: time.Now().UnixMilli(), Title: article.Title})
content := service.ContentService.GetContentByCache(articleId)
ctrl.Ctx.ViewData("article", article)
ctrl.Ctx.ViewData("content", content)
if article.ContentType == consts.ARTICLE_CONTENT_TYPE_MARKDOWN {
ctrl.Ctx.View("blog/article/article_md.html")
return
}
ctrl.Ctx.ViewData("content", template.HTML(content))
ctrl.Ctx.View("blog/article/article_tinyMce.html")
}
func (ctrl *ArticleController) BeforeActivation(activation mvc.BeforeActivation) {
// log.Println("before")
activation.Handle("GET", "/view/{id}", "ViewArticle")
}
func (ctrl *ArticleController) AfterActivation(activation mvc.AfterActivation) {
// log.Println("after")
}