blog/internal/controller/cli_controller/article_controller.go

96 lines
2.8 KiB
Go

package cli_controller
import (
"Blog/internal/async"
"Blog/internal/consts"
"Blog/internal/model"
"Blog/internal/model/result"
"Blog/internal/service"
"html/template"
"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() {
slices := service.ArticleService.GetLatest()
ret := []any{}
for idx := range slices {
ba := &slices[idx]
id := ba.Id
viewRecord := service.ViewRecordService.GetRecord(id)
var vo = struct {
Id string `json:"id"`
Title string `json:"title"`
SubTitle string `json:"subTitle"`
Previous string `json:"previous"`
Author string `json:"author"`
Tags string `json:"tags"`
PublishTime int64 `json:"publishTime"`
ViewRecord int64 `json:"viewRecord"`
}{Id: ba.Id, Title: ba.Title, SubTitle: ba.SubTitle, Previous: ba.Previous, Author: ba.Author, Tags: ba.Tags, PublishTime: ba.PublishTime, ViewRecord: viewRecord}
ret = append(ret, vo)
}
// ctx := context.Background()
// var slices []model.BlogArticle
// err := client.RedisClient.ZRevRange(ctx, consts.REDIS_BLOG_ARTICLE_LATEST, 0, 10).ScanSlice(&slices)
// if err != nil {
// logrus.Info(err)
// ctrl.Ctx.JSON(result.Error("加载错误"))
// return
// }
// for i := range slices {
// article := &slices[i]
// id := article.Id
// viewRecord, _ := client.RedisClient.HGet(ctx, consts.REDIS_BLOG_VIEW_RECORD, id).Int()
// article.ViewRecord = viewRecord
// }
ctrl.Ctx.JSON(result.Ok(ret))
}
func (ctrl *ArticleController) ViewArticle() {
articleId := ctrl.Ctx.Params().Get("id")
article := service.ArticleService.GetArticle(articleId)
if article.Id == "" {
ctrl.Ctx.View("404.html")
return
}
xFrowardedFor := ctrl.Ctx.GetHeader("X-Forwarded-For")
async.PublishViewRecord(model.ViewRecord{RelId: articleId, IpAddr: xFrowardedFor, ViewTime: time.Now().UnixMilli(), Title: article.Title})
textContent := service.TextContentService.GetContent(articleId)
ctrl.Ctx.ViewData("article", article)
ctrl.Ctx.ViewData("content", textContent.Content)
if article.ContentType == consts.ARTICLE_CONTENT_TYPE_MARKDOWN {
ctrl.Ctx.View("blog/article/article_md.html")
return
}
ctrl.Ctx.ViewData("content", template.HTML(textContent.Content))
ctrl.Ctx.View("blog/article/article_tinyMce.html")
}
func (ctrl *ArticleController) BeforeActivation(activation mvc.BeforeActivation) {
// logrus.Info("before")
activation.Handle("GET", "/view/{id}", "ViewArticle")
}
func (ctrl *ArticleController) AfterActivation(activation mvc.AfterActivation) {
// logrus.Info("after")
}