Files

108 lines
3.2 KiB
Go

package post
import (
"context"
"time"
"bsm/full/module/base/cms/internal/models"
pb "bsm/full/module/base/cms/pb"
"git.apinb.com/bsm-sdk/core/errcode"
"git.apinb.com/bsm-sdk/core/printer"
)
// 文章列表
func Fetch(ctx context.Context, in *pb.PostListRequest) (reply *pb.PostListReply, err error) {
if in.GetPage() <= 0 {
in.Page = 1
}
if in.GetSize() <= 0 {
in.Size = 10
}
if in.GetSize() > 50 {
in.Size = 50
}
list, cnt, err := models.PostList(in.Page, in.Size, in.CategoryIdentity, in.Keyword, int64(in.Type))
if err != nil {
printer.Error(err.Error())
return nil, errcode.ErrDB
}
var res = pb.PostListReply{
Count: cnt,
Data: make([]*pb.PostItem, 0),
}
for _, val := range list {
var (
accessoryData = make([]*pb.AccessoryItem, 0)
accessories = make([]string, 0)
categoryData = make([]*pb.CategoryItem, 0)
categories = make([]string, 0)
TagsData = make([]*pb.TagsItem, 0)
tagsIdentityArray = make([]string, 0)
)
for _, accessory := range val.Accessories {
accessoryData = append(accessoryData, &pb.AccessoryItem{
Identity: accessory.Identity,
Title: accessory.Title,
FilePath: accessory.FilePath,
})
accessories = append(accessories, accessory.Identity)
}
for _, category := range val.Categories {
categoryData = append(categoryData, &pb.CategoryItem{
Id: int64(category.Category.ID),
Identity: category.Category.Identity,
ParentId: int64(category.Category.ParentId),
Title: category.Category.Title,
CoverPath: category.Category.CoverPath,
Intro: category.Category.Intro,
})
categories = append(categories, category.CategoryIdentity)
}
for _, tags := range val.Tags {
TagsData = append(TagsData, &pb.TagsItem{
Id: int64(tags.Tags.ID),
Identity: tags.TagsIdentity,
Title: tags.Tags.Title,
Intro: tags.Tags.Intro,
CoverPath: tags.Tags.CoverPath,
})
tagsIdentityArray = append(tagsIdentityArray, tags.TagsIdentity)
}
res.Data = append(res.Data, &pb.PostItem{
Identity: val.Identity,
OwnerId: int64(val.OwnerID),
OwnerIdentity: val.OwnerIdentity,
Title: val.Title,
CoverPath: val.CoverPath,
Author: val.Author,
AuthorIdentity: val.AuthorIdentity,
Content: val.Content,
TargetUrl: val.TargetUrl,
SourceUrl: val.SourceUrl,
Hits: val.Hits,
HasAccessory: val.HasAccessory,
CreatedAt: val.CreatedAt.Format(time.DateTime),
UpdatedAt: val.UpdatedAt.Format(time.DateTime),
Description: val.Description,
LikeHits: val.LikeHits,
UnlikeHits: val.UnlikeHits,
CommentHits: val.CommentHits,
PostType: val.Types,
Key: val.Hash,
Hash: val.Hash,
AccessoryData: accessoryData,
AccessoryIdentityArray: accessories,
CategoryData: categoryData,
CategoryIdentityArray: categories,
TagsData: TagsData,
TagsIdentityArray: tagsIdentityArray,
})
}
return &res, nil
}