system_search_article_logic.go 2.9 KB
package article

import (
	"context"

	"github.com/samber/lo"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"

	"github.com/zeromicro/go-zero/core/logx"
)

type SystemSearchArticleLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewSystemSearchArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemSearchArticleLogic {
	return &SystemSearchArticleLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

func (l *SystemSearchArticleLogic) SystemSearchArticle(req *types.SystemArticleSearchRequest) (resp *types.SystemArticleSearchResponse, err error) {
	var conn = l.svcCtx.DefaultDBConn()
	queryOptions := domain.NewQueryOptions().
		WithOffsetLimit(req.Page, req.Size).
		WithKV("title", req.Title).
		WithKV("authorId", req.Author).
		WithKV("tags", req.Tags).
		WithKV("beginCreatedAt", req.BeginTime).
		WithKV("endCreatedAt", req.EndTime).
		WithKV("orderMode", req.OrderMode)

	total, articles, err := l.svcCtx.ArticleRepository.Find(l.ctx, conn, req.CompanyId, queryOptions)
	if err != nil {
		return nil, xerr.NewErrMsgErr("搜索帖子异常", err)
	}
	resp = &types.SystemArticleSearchResponse{
		Total: int(total),
		List:  make([]types.SystemArticleSearch, 0),
	}
	authorIds := make([]int64, 0)
	lo.ForEach(articles, func(item *domain.Article, index int) {
		authorIds = append(authorIds, item.AuthorId)
	})
	//查询用户数据,重新赋值更新用户名称
	_, users, _ := l.svcCtx.UserRepository.Find(l.ctx, conn, domain.NewQueryOptions().WithFindOnly().WithKV("ids", authorIds))
	//获取标签
	_, tags, _ := l.svcCtx.ArticleTagRepository.Find(l.ctx, conn, req.CompanyId, domain.NewQueryOptions())
	lo.ForEach(articles, func(item *domain.Article, index int) {
		//发布人
		author := item.Author.Name
		for _, user := range users {
			if user.Id == item.AuthorId {
				author = user.Name
			}
		}
		//标签
		articleTags := make([]string, 0)
		lo.ForEach(item.Tags, func(tagId int64, index int) {
			for _, t := range tags {
				if t.Id == tagId {
					articleTags = append(articleTags, t.Name)
				}
			}
		})
		resp.List = append(resp.List, types.SystemArticleSearch{
			Id:           item.Id,
			Title:        item.Title,
			AuthorId:     item.AuthorId,
			Author:       author,
			Images:       item.GetImages(),
			CreatedAt:    item.CreatedAt,
			UpdatedAt:    item.UpdatedAt,
			CountLove:    item.CountLove,
			CountComment: item.CountComment,
			Show:         int(item.Show),
			Tags:         articleTags,
			TargetUser:   int(item.TargetUser),
			Source:       item.Source,
			Operator: types.Operator{
				Id:   item.Operator.Id,
				Name: item.Operator.Name,
			},
			Cover: item.GetCover(),
		})
	})
	return
}