wp-go/internal/pkg/cache/posts.go

90 lines
2.3 KiB
Go
Raw Normal View History

2023-01-12 12:42:16 +00:00
package cache
import (
"context"
"fmt"
2023-01-21 11:31:23 +00:00
"github.com/fthvgb1/wp-go/helper/slice"
"github.com/fthvgb1/wp-go/internal/pkg/logs"
"github.com/fthvgb1/wp-go/internal/pkg/models"
2023-02-06 12:50:25 +00:00
"github.com/fthvgb1/wp-go/internal/plugins"
2023-01-12 12:42:16 +00:00
"github.com/gin-gonic/gin"
"time"
)
func GetPostById(ctx context.Context, id uint64) (models.Posts, error) {
return postsCache.GetCache(ctx, id, time.Second, ctx, id)
}
func GetPostsByIds(ctx context.Context, ids []uint64) ([]models.Posts, error) {
return postsCache.GetCacheBatch(ctx, ids, time.Second, ctx, ids)
}
func SearchPost(ctx context.Context, key string, args ...any) (r []models.Posts, total int, err error) {
ids, err := searchPostIdsCache.GetCache(ctx, key, time.Second, args...)
if err != nil {
return
}
total = ids.Length
r, err = GetPostsByIds(ctx, ids.Ids)
return
}
func PostLists(ctx context.Context, key string, args ...any) (r []models.Posts, total int, err error) {
ids, err := postListIdsCache.GetCache(ctx, key, time.Second, args...)
if err != nil {
return
}
total = ids.Length
r, err = GetPostsByIds(ctx, ids.Ids)
return
}
func GetMaxPostId(ctx *gin.Context) (uint64, error) {
2023-01-20 10:10:13 +00:00
return maxPostIdCache.GetCache(ctx, time.Second, ctx)
2023-01-12 12:42:16 +00:00
}
2023-02-06 14:56:36 +00:00
func RecentPosts(ctx context.Context, n int, project bool) (r []models.Posts) {
2023-02-06 12:50:25 +00:00
nn := n
if nn <= 5 {
nn = 10
}
r, err := recentPostsCaches.GetCache(ctx, time.Second, ctx, nn)
2023-01-12 12:42:16 +00:00
if n < len(r) {
r = r[:n]
}
2023-02-06 14:56:36 +00:00
if project {
2023-02-06 12:50:25 +00:00
r = slice.Map(r, func(t models.Posts) models.Posts {
if t.PostPassword != "" {
plugins.PasswordProjectTitle(&t)
}
return t
})
}
2023-01-12 12:42:16 +00:00
logs.ErrPrintln(err, "get recent post")
return
}
func GetContextPost(ctx context.Context, id uint64, date time.Time) (prev, next models.Posts, err error) {
postCtx, err := postContextCache.GetCache(ctx, id, time.Second, ctx, date)
if err != nil {
return models.Posts{}, models.Posts{}, err
}
prev = postCtx.Prev
next = postCtx.Next
return
}
func GetMonthPostIds(ctx context.Context, year, month string, page, limit int, order string) (r []models.Posts, total int, err error) {
res, err := monthPostsCache.GetCache(ctx, fmt.Sprintf("%s%s", year, month), time.Second, ctx, year, month)
if err != nil {
return
}
if order == "desc" {
2023-01-21 11:31:23 +00:00
res = slice.Reverse(res)
2023-01-12 12:42:16 +00:00
}
total = len(res)
2023-01-21 11:31:23 +00:00
rr := slice.Pagination(res, page, limit)
2023-01-12 12:42:16 +00:00
r, err = GetPostsByIds(ctx, rr)
return
}