Files
jiang13-forum/routers/web/favorites.go
freefire f0358e0f71 feat: 完整内容 Limits 与伪静态 Admin
设置页可配字数/编辑窗/分页与伪静态后缀;公开帖/板/用户链接走规范路径并 301。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 04:12:43 +08:00

72 lines
1.7 KiB
Go

package web
import (
"net/http"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
type favItem struct {
PostID uint
Title string
Href string
AuthorName string
BoardName string
CreatedLabel string
}
type favoritesData struct {
PageChrome
Items []favItem
Page int
PrevPage int
NextPage int
HasPrev bool
HasMore bool
Total int64
}
// FavoritesGet 我的收藏
func (d Deps) FavoritesGet(c *gin.Context) {
ctx := d.ctx(c)
page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
if page < 1 {
page = 1
}
size := d.Settings.PageSizeDefault()
favs, total, err := d.Post.ListFavorites(ctx.UserID(), page, size)
if err != nil {
chrome := d.chrome(ctx, "收藏 · "+d.Settings.SiteBranding().Name, "", "")
chrome.Error = err.Error()
ctx.HTML(http.StatusOK, "favorites/list", favoritesData{PageChrome: chrome})
return
}
items := make([]favItem, 0, len(favs))
pl := d.permalink()
for _, f := range favs {
title := f.Post.Title
author := strings.TrimSpace(f.Post.User.Nickname)
if author == "" {
author = f.Post.User.Username
}
board := ""
if f.Post.Board.ID > 0 {
board = f.Post.Board.Name
}
items = append(items, favItem{
PostID: f.PostID, Title: title, Href: pl.PostPath(f.PostID), AuthorName: author, BoardName: board,
CreatedLabel: formatTime(f.CreatedAt),
})
}
chrome := d.chrome(ctx, "收藏 · "+d.Settings.SiteBranding().Name, "", "")
hasMore := int64(page*size) < total
ctx.HTML(http.StatusOK, "favorites/list", favoritesData{
PageChrome: chrome,
Items: items,
Page: page, PrevPage: page - 1, NextPage: page + 1,
HasPrev: page > 1, HasMore: hasMore, Total: total,
})
}