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") }