96 lines
2.8 KiB
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 == nil || article.State != consts.ARTICLE_STATE_PUBLISH {
|
|
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")
|
|
}
|