作者 郑周

1. 新增功能 我的-点赞和收藏

@@ -62,12 +62,12 @@ type ( @@ -62,12 +62,12 @@ type (
62 DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID 62 DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
63 Content string `json:"content"` // 消息内容 63 Content string `json:"content"` // 消息内容
64 CreatedAt int64 `json:"createdAt"` // 创建时间 64 CreatedAt int64 `json:"createdAt"` // 创建时间
65 - User *User `json:"user"` // 操作人 65 + User *SimpleUser `json:"user"` // 操作人
66 Article *SimpleArticle `json:"article"` // 文章 66 Article *SimpleArticle `json:"article"` // 文章
67 Comment *Comment `json:"comment"` // 评论(不一定是自己,可能是被人@到) 67 Comment *Comment `json:"comment"` // 评论(不一定是自己,可能是被人@到)
68 } 68 }
69 69
70 - User { 70 + SimpleUser {
71 Id int64 `json:"id"` 71 Id int64 `json:"id"`
72 CompanyId int64 `json:"companyId,omitempty"` // 公司ID 72 CompanyId int64 `json:"companyId,omitempty"` // 公司ID
73 CompanyName string `json:"companyName,omitempty"` // 公司名称 73 CompanyName string `json:"companyName,omitempty"` // 公司名称
@@ -77,11 +77,10 @@ type ( @@ -77,11 +77,10 @@ type (
77 } 77 }
78 78
79 79
80 - SimpleArticle { 80 + SimpleArticle {
81 Id int64 `json:"id"` 81 Id int64 `json:"id"`
82 Title string `json:"title"` // 文章标题 82 Title string `json:"title"` // 文章标题
83 CountLove int `json:"countLove"` // 点赞数量 83 CountLove int `json:"countLove"` // 点赞数量
84 CountComment int `json:"countComment"` // 评论数量 84 CountComment int `json:"countComment"` // 评论数量
85 } 85 }
86 ) 86 )
87 -  
@@ -51,6 +51,9 @@ service Core { @@ -51,6 +51,9 @@ service Core {
51 @doc "取消关注" 51 @doc "取消关注"
52 @handler miniUserUnFollow 52 @handler miniUserUnFollow
53 post /mini/user/unfollow (FollowRequest) 53 post /mini/user/unfollow (FollowRequest)
  54 + @doc "我点赞的文章或评论"
  55 + @handler miniMyLike
  56 + post /user/mylike (MiniMyLikeRequest)returns (MiniMyLikeResponse)
54 } 57 }
55 58
56 type( 59 type(
@@ -153,6 +156,38 @@ type( @@ -153,6 +156,38 @@ type(
153 ) 156 )
154 157
155 158
  159 +
  160 +// 我点赞的文章或评论
  161 +type (
  162 + MiniMyLikeRequest{
  163 + Page int `json:"page"`
  164 + Size int `json:"size"`
  165 + }
  166 +
  167 + MiniMyLikeResponse {
  168 + List []MyLikeItem `json:"list"`
  169 + Total int64 `json:"total"`
  170 + }
  171 +
  172 + MyLikeItem {
  173 + UserId int64 `json:"userId"` // 发布人id
  174 + ArticleId int64 `json:"articleId"` // 文章id
  175 + CommentId int64 `json:"commentId"` // 评论id
  176 + CreatedAt int64 `json:"createdAt"` // 创建时间
  177 + User *SimpleUser `json:"user"` // 发布人
  178 + Article *SimpleArticle `json:"article"` // 文章
  179 + Comment *SimpleComment `json:"comment"` // 评论
  180 + }
  181 +
  182 + SimpleComment {
  183 + Id int64 `json:"id"`
  184 + Content string `json:"content"` // 评论内容
  185 + CountLove int `json:"countLove"` // 点赞数量
  186 + CountComment int `json:"countComment"` // 评论数量
  187 + }
  188 +)
  189 +
  190 +
156 // 后台接口 191 // 后台接口
157 //@server( 192 //@server(
158 // prefix: v1 193 // prefix: v1
@@ -147,6 +147,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { @@ -147,6 +147,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
147 Path: "/mini/user/unfollow", 147 Path: "/mini/user/unfollow",
148 Handler: user.MiniUserUnFollowHandler(serverCtx), 148 Handler: user.MiniUserUnFollowHandler(serverCtx),
149 }, 149 },
  150 + {
  151 + Method: http.MethodPost,
  152 + Path: "/user/mylike",
  153 + Handler: user.MiniMyLikeHandler(serverCtx),
  154 + },
150 }, 155 },
151 rest.WithJwt(serverCtx.Config.MiniAuth.AccessSecret), 156 rest.WithJwt(serverCtx.Config.MiniAuth.AccessSecret),
152 rest.WithPrefix("/v1"), 157 rest.WithPrefix("/v1"),
  1 +package user
  2 +
  3 +import (
  4 + "github.com/zeromicro/go-zero/rest/httpx"
  5 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  6 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result"
  7 + "net/http"
  8 +
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/user"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  11 +)
  12 +
  13 +func MiniMyLikeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  14 + return func(w http.ResponseWriter, r *http.Request) {
  15 + var req types.MiniMyLikeRequest
  16 + if err := httpx.Parse(r, &req); err != nil {
  17 + httpx.ErrorCtx(r.Context(), w, err)
  18 + return
  19 + }
  20 +
  21 + l := user.NewMiniMyLikeLogic(r.Context(), svcCtx)
  22 + resp, err := l.MiniMyLike(&req)
  23 + result.HttpResult(r, w, resp, err)
  24 + }
  25 +}
@@ -169,7 +169,7 @@ func (l *MiniBusinessLogic) MiniBusiness(req *types.MessageBusinessRequest) (res @@ -169,7 +169,7 @@ func (l *MiniBusinessLogic) MiniBusiness(req *types.MessageBusinessRequest) (res
169 } 169 }
170 170
171 if v, ok := userIdMap[item.UserId]; ok { 171 if v, ok := userIdMap[item.UserId]; ok {
172 - to.User = &types.User{ 172 + to.User = &types.SimpleUser{
173 Id: v.Id, 173 Id: v.Id,
174 CompanyId: v.CompanyId, 174 CompanyId: v.CompanyId,
175 Position: v.Position, 175 Position: v.Position,
  1 +package user
  2 +
  3 +import (
  4 + "context"
  5 + "github.com/samber/lo"
  6 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
  7 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata"
  8 +
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  11 +
  12 + "github.com/zeromicro/go-zero/core/logx"
  13 +)
  14 +
  15 +type MiniMyLikeLogic struct {
  16 + logx.Logger
  17 + ctx context.Context
  18 + svcCtx *svc.ServiceContext
  19 +}
  20 +
  21 +func NewMiniMyLikeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MiniMyLikeLogic {
  22 + return &MiniMyLikeLogic{
  23 + Logger: logx.WithContext(ctx),
  24 + ctx: ctx,
  25 + svcCtx: svcCtx,
  26 + }
  27 +}
  28 +
  29 +func (l *MiniMyLikeLogic) MiniMyLike(req *types.MiniMyLikeRequest) (resp *types.MiniMyLikeResponse, err error) {
  30 + var userToken = contextdata.GetUserTokenFromCtx(l.ctx)
  31 + var conn = l.svcCtx.DefaultDBConn()
  32 +
  33 + total, list, err := l.svcCtx.UserLoveFlagRepository.Find(l.ctx, conn, domain.NewQueryOptions().
  34 + WithOffsetLimit(req.Page, req.Size).
  35 + WithKV("userId", userToken.UserId))
  36 + if err != nil {
  37 + return nil, err
  38 + }
  39 +
  40 + resp = &types.MiniMyLikeResponse{}
  41 + resp.Total = total
  42 + resp.List = make([]types.MyLikeItem, 0)
  43 + if total == 0 || len(list) == 0 {
  44 + return resp, nil
  45 + }
  46 +
  47 + var userMap = make(map[int64]*domain.User)
  48 + var articleMap = make(map[int64]*domain.Article)
  49 + var commentMap = make(map[int64]*domain.Comment)
  50 +
  51 + lo.ForEach(list, func(item *domain.UserLoveFlag, index int) {
  52 + var (
  53 + user *domain.User
  54 + article *domain.Article
  55 + comment *domain.Comment
  56 + )
  57 +
  58 + if item.CommentId != 0 { // 点赞评论
  59 + user, _ = domain.LazyLoad(userMap, l.ctx, conn, item.CommentAuthor, l.svcCtx.UserRepository.FindOne)
  60 + article, _ = domain.LazyLoad(articleMap, l.ctx, conn, item.ArticleId, l.svcCtx.ArticleRepository.FindOne)
  61 + comment, _ = domain.LazyLoad(commentMap, l.ctx, conn, item.CommentId, l.svcCtx.CommentRepository.FindOne)
  62 + } else {
  63 + user, _ = domain.LazyLoad(userMap, l.ctx, conn, item.ArticleAuthor, l.svcCtx.UserRepository.FindOne)
  64 + article, _ = domain.LazyLoad(articleMap, l.ctx, conn, item.ArticleId, l.svcCtx.ArticleRepository.FindOne)
  65 + }
  66 +
  67 + resp.List = append(resp.List, NewItemSimple(item, user, article, comment))
  68 + })
  69 +
  70 + return
  71 +}
  72 +
  73 +func NewItemSimple(love *domain.UserLoveFlag, user *domain.User, article *domain.Article, comment *domain.Comment) types.MyLikeItem {
  74 + item := types.MyLikeItem{
  75 + UserId: love.UserId,
  76 + ArticleId: love.ArticleId,
  77 + CommentId: love.CommentId,
  78 + CreatedAt: love.CreatedAt,
  79 + }
  80 +
  81 + if user != nil {
  82 + item.User = &types.SimpleUser{
  83 + Id: user.Id,
  84 + CompanyId: user.CompanyId,
  85 + Name: user.Name,
  86 + Avatar: user.Avatar,
  87 + Position: user.Position,
  88 + }
  89 + }
  90 +
  91 + if article != nil {
  92 + item.Article = &types.SimpleArticle{
  93 + Id: article.Id,
  94 + Title: article.Title,
  95 + CountLove: article.CountLove,
  96 + CountComment: article.CountComment,
  97 + }
  98 + }
  99 +
  100 + if comment != nil {
  101 + item.Comment = &types.SimpleComment{
  102 + Id: comment.Id,
  103 + //Content: comment.Content,
  104 + //CountLove: comment.CountLove,
  105 + //CountComment: comment.CountComment,
  106 + }
  107 + }
  108 +
  109 + return item
  110 +}
@@ -53,12 +53,12 @@ type MessageBusinessItem struct { @@ -53,12 +53,12 @@ type MessageBusinessItem struct {
53 DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID 53 DiscussionOpinionId int64 `json:"discussionOpinionId"` // 观点ID
54 Content string `json:"content"` // 消息内容 54 Content string `json:"content"` // 消息内容
55 CreatedAt int64 `json:"createdAt"` // 创建时间 55 CreatedAt int64 `json:"createdAt"` // 创建时间
56 - User *User `json:"user"` // 操作人 56 + User *SimpleUser `json:"user"` // 操作人
57 Article *SimpleArticle `json:"article"` // 文章 57 Article *SimpleArticle `json:"article"` // 文章
58 Comment *Comment `json:"comment"` // 评论(不一定是自己,可能是被人@到) 58 Comment *Comment `json:"comment"` // 评论(不一定是自己,可能是被人@到)
59 } 59 }
60 60
61 -type User struct { 61 +type SimpleUser struct {
62 Id int64 `json:"id"` 62 Id int64 `json:"id"`
63 CompanyId int64 `json:"companyId,omitempty"` // 公司ID 63 CompanyId int64 `json:"companyId,omitempty"` // 公司ID
64 CompanyName string `json:"companyName,omitempty"` // 公司名称 64 CompanyName string `json:"companyName,omitempty"` // 公司名称
@@ -251,6 +251,33 @@ type UserFollowItem struct { @@ -251,6 +251,33 @@ type UserFollowItem struct {
251 MutualFollowed bool `json:"mutualFollowed"` // 互相关注标识 251 MutualFollowed bool `json:"mutualFollowed"` // 互相关注标识
252 } 252 }
253 253
  254 +type MiniMyLikeRequest struct {
  255 + Page int `json:"page"`
  256 + Size int `json:"size"`
  257 +}
  258 +
  259 +type MiniMyLikeResponse struct {
  260 + List []MyLikeItem `json:"list"`
  261 + Total int64 `json:"total"`
  262 +}
  263 +
  264 +type MyLikeItem struct {
  265 + UserId int64 `json:"userId"` // 发布人id
  266 + ArticleId int64 `json:"articleId"` // 文章id
  267 + CommentId int64 `json:"commentId"` // 评论id
  268 + CreatedAt int64 `json:"createdAt"` // 创建时间
  269 + User *SimpleUser `json:"user"` // 发布人
  270 + Article *SimpleArticle `json:"article"` // 文章
  271 + Comment *SimpleComment `json:"comment"` // 评论
  272 +}
  273 +
  274 +type SimpleComment struct {
  275 + Id int64 `json:"id"`
  276 + Content string `json:"content"` // 评论内容
  277 + CountLove int `json:"countLove"` // 点赞数量
  278 + CountComment int `json:"countComment"` // 评论数量
  279 +}
  280 +
254 type CompanySearchRequest struct { 281 type CompanySearchRequest struct {
255 Page int `json:"page"` 282 Page int `json:"page"`
256 Size int `json:"size"` 283 Size int `json:"size"`
@@ -120,7 +120,7 @@ func (repository *MessageBusinessRepository) Find(ctx context.Context, conn tran @@ -120,7 +120,7 @@ func (repository *MessageBusinessRepository) Find(ctx context.Context, conn tran
120 total int64 120 total int64
121 ) 121 )
122 queryFunc := func() (interface{}, error) { 122 queryFunc := func() (interface{}, error) {
123 - tx = tx.Model(&ms).Order("created_at desc") 123 + tx = tx.Model(&ms).Order("id desc")
124 if v, ok := queryOptions["companyId"]; ok { 124 if v, ok := queryOptions["companyId"]; ok {
125 tx.Where("company_id = ?", v) 125 tx.Where("company_id = ?", v)
126 } 126 }
@@ -120,7 +120,7 @@ func (repository *MessageSystemRepository) Find(ctx context.Context, conn transa @@ -120,7 +120,7 @@ func (repository *MessageSystemRepository) Find(ctx context.Context, conn transa
120 total int64 120 total int64
121 ) 121 )
122 queryFunc := func() (interface{}, error) { 122 queryFunc := func() (interface{}, error) {
123 - tx = tx.Model(&ms).Order("created_at desc") // 创建时间降序 123 + tx = tx.Model(&ms).Order("id desc")
124 if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { 124 if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil {
125 return dms, tx.Error 125 return dms, tx.Error
126 } 126 }