system_search_article_logic.go 2.2 KB
package article

import (
	"context"
	"github.com/jinzhu/now"
	"github.com/samber/lo"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"
	"time"

	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"

	"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.PageNumber, req.PageSize).WithKV("title", req.Title).WithKV("author", req.Author)
	if req.PublishDate != "" {
		publishTime, err := now.ParseInLocation(time.Local, req.PublishDate)
		if err == nil {
			queryOptions.WithKV("beginCreatedAt", now.With(publishTime).BeginningOfDay().Unix())
			queryOptions.WithKV("endCreatedAt", now.With(publishTime).EndOfDay().Unix())
		}
	}
	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),
	}
	lo.ForEach(articles, func(item *domain.Article, index int) {
		images := make([]string, 0)
		lo.ForEach(item.Images, func(img domain.Image, n int) {
			images = append(images, img.Url)
		})
		resp.List = append(resp.List, types.SystemArticleSearch{
			Id:           item.Id,
			Title:        item.Title,
			Author:       item.Author.Name,
			Images:       images,
			CreatedAt:    item.CreatedAt,
			CountLove:    item.CountLove,
			CountComment: item.CountComment,
			Show:         int(item.Show),
			Tags:         nil,
			TargetUser:   int(item.TargetUser),
		})
	})
	return resp, nil
}