79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
package controller
|
|
|
|
import (
|
|
"blog/internal/async"
|
|
"blog/internal/consts"
|
|
"blog/internal/model/AjaxResult"
|
|
"blog/internal/model/blog"
|
|
"blog/internal/service"
|
|
"blog/third_party/database"
|
|
"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")
|
|
}
|