94 lines
2.3 KiB
Go
94 lines
2.3 KiB
Go
package wiki
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
filePb "sundynix-micro-go/app/file/rpc/file"
|
|
"sundynix-micro-go/app/plant/api/internal/svc"
|
|
"sundynix-micro-go/app/plant/api/internal/types"
|
|
plantPb "sundynix-micro-go/app/plant/rpc/plant"
|
|
|
|
"github.com/zeromicro/go-zero/core/logx"
|
|
)
|
|
|
|
type GetWikiDetailLogic struct {
|
|
logx.Logger
|
|
ctx context.Context
|
|
svcCtx *svc.ServiceContext
|
|
}
|
|
|
|
// 百科详情
|
|
func NewGetWikiDetailLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetWikiDetailLogic {
|
|
return &GetWikiDetailLogic{
|
|
Logger: logx.WithContext(ctx),
|
|
ctx: ctx,
|
|
svcCtx: svcCtx,
|
|
}
|
|
}
|
|
|
|
func (l *GetWikiDetailLogic) GetWikiDetail(req *types.IdPathReq) (interface{}, error) {
|
|
userId := fmt.Sprintf("%v", l.ctx.Value("userId"))
|
|
result, err := l.svcCtx.PlantRpc.GetWikiDetail(l.ctx, &plantPb.IdReq{Id: req.Id})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if result == nil || result.Wiki == nil {
|
|
return nil, nil
|
|
}
|
|
|
|
// 通过 FileRpc 获取图片
|
|
imgList := fetchWikiImages(l.ctx, l.svcCtx, result.Wiki.OssIds)
|
|
|
|
_ = userId
|
|
return map[string]interface{}{
|
|
"wiki": result.Wiki,
|
|
"imgList": imgList,
|
|
"classIds": result.Wiki.ClassIds,
|
|
"relatedWikiIds": result.Wiki.RelatedWikiIds,
|
|
}, nil
|
|
}
|
|
|
|
func fetchWikiImages(ctx context.Context, svcCtx *svc.ServiceContext, ossIds []string) []map[string]interface{} {
|
|
if len(ossIds) == 0 {
|
|
return []map[string]interface{}{}
|
|
}
|
|
resp, err := svcCtx.FileRpc.GetFilesByIds(ctx, &filePb.GetFilesByIdsReq{Ids: ossIds})
|
|
if err != nil || resp == nil {
|
|
return []map[string]interface{}{}
|
|
}
|
|
// 按 ossIds 顺序排列
|
|
fileMap := make(map[string]*filePb.FileInfo)
|
|
for _, f := range resp.Files {
|
|
fileMap[f.Id] = f
|
|
}
|
|
var list []map[string]interface{}
|
|
for _, id := range ossIds {
|
|
if f, ok := fileMap[id]; ok {
|
|
list = append(list, map[string]interface{}{
|
|
"id": f.Id, "name": f.Name, "url": f.Url, "tag": f.Tag,
|
|
"key": f.Key, "suffix": f.Suffix, "md5": f.Md5,
|
|
"createdAt": unixToRFC3339(f.CreatedAt),
|
|
"updatedAt": unixToRFC3339(f.CreatedAt),
|
|
"createdAtStr": unixToShort(f.CreatedAt),
|
|
})
|
|
}
|
|
}
|
|
return list
|
|
}
|
|
|
|
func unixToRFC3339(ts int64) string {
|
|
if ts == 0 {
|
|
return ""
|
|
}
|
|
return time.Unix(ts, 0).Format(time.RFC3339)
|
|
}
|
|
|
|
func unixToShort(ts int64) string {
|
|
if ts == 0 {
|
|
return ""
|
|
}
|
|
return time.Unix(ts, 0).Format("2006-01-02 15:04:05")
|
|
}
|