正在显示
12 个修改的文件
包含
250 行增加
和
19 行删除
@@ -28,6 +28,10 @@ service Core { | @@ -28,6 +28,10 @@ service Core { | ||
28 | @handler MiniListArticleComment | 28 | @handler MiniListArticleComment |
29 | post /article_comment/list (MiniListArticleCommentRequest) returns (MiniListArticleCommentResponse) | 29 | post /article_comment/list (MiniListArticleCommentRequest) returns (MiniListArticleCommentResponse) |
30 | 30 | ||
31 | + @doc "小程序展示文章的评论列表TOP5" | ||
32 | + @handler MiniTop5ArticleComment | ||
33 | + post /article_comment/top5 (MiniTop5ArticleCommentRequest) returns (MiniTop5ArticleCommentResponse) | ||
34 | + | ||
31 | @doc "小程序展示单个文章的评论" | 35 | @doc "小程序展示单个文章的评论" |
32 | @handler MiniGetArticleComment | 36 | @handler MiniGetArticleComment |
33 | get /article_comment/:id (MiniGetArticleCommentRequest) returns (MiniGetArticleCommentResponse) | 37 | get /article_comment/:id (MiniGetArticleCommentRequest) returns (MiniGetArticleCommentResponse) |
@@ -155,4 +159,16 @@ type ( | @@ -155,4 +159,16 @@ type ( | ||
155 | MiniDeleteArticleCommentResponse { | 159 | MiniDeleteArticleCommentResponse { |
156 | Id int64 `json:"id"` | 160 | Id int64 `json:"id"` |
157 | } | 161 | } |
162 | +) | ||
163 | + | ||
164 | +type ( | ||
165 | + MiniTop5ArticleCommentRequest { | ||
166 | + CompanyId int64 `json:",optional"` | ||
167 | + UserId int64 `json:",optional"` | ||
168 | + ArticleId int64 `json:"articleId"` | ||
169 | + } | ||
170 | + | ||
171 | + MiniTop5ArticleCommentResponse { | ||
172 | + List []ArticleCommentItem `json:"list"` | ||
173 | + } | ||
158 | ) | 174 | ) |
1 | +package comment | ||
2 | + | ||
3 | +import ( | ||
4 | + "net/http" | ||
5 | + | ||
6 | + "github.com/zeromicro/go-zero/rest/httpx" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/comment" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
10 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" | ||
11 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result" | ||
12 | +) | ||
13 | + | ||
14 | +func MiniTop5ArticleCommentHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { | ||
15 | + return func(w http.ResponseWriter, r *http.Request) { | ||
16 | + var req types.MiniTop5ArticleCommentRequest | ||
17 | + if err := httpx.Parse(r, &req); err != nil { | ||
18 | + httpx.ErrorCtx(r.Context(), w, err) | ||
19 | + return | ||
20 | + } | ||
21 | + | ||
22 | + l := comment.NewMiniTop5ArticleCommentLogic(r.Context(), svcCtx) | ||
23 | + token := contextdata.GetUserTokenFromCtx(r.Context()) | ||
24 | + req.CompanyId = token.CompanyId | ||
25 | + req.UserId = token.UserId | ||
26 | + resp, err := l.MiniTop5ArticleComment(&req) | ||
27 | + result.HttpResult(r, w, resp, err) | ||
28 | + } | ||
29 | +} |
@@ -36,6 +36,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | @@ -36,6 +36,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { | ||
36 | Handler: comment.MiniListArticleCommentHandler(serverCtx), | 36 | Handler: comment.MiniListArticleCommentHandler(serverCtx), |
37 | }, | 37 | }, |
38 | { | 38 | { |
39 | + Method: http.MethodPost, | ||
40 | + Path: "/article_comment/top5", | ||
41 | + Handler: comment.MiniTop5ArticleCommentHandler(serverCtx), | ||
42 | + }, | ||
43 | + { | ||
39 | Method: http.MethodGet, | 44 | Method: http.MethodGet, |
40 | Path: "/article_comment/:id", | 45 | Path: "/article_comment/:id", |
41 | Handler: comment.MiniGetArticleCommentHandler(serverCtx), | 46 | Handler: comment.MiniGetArticleCommentHandler(serverCtx), |
@@ -2,6 +2,7 @@ package article | @@ -2,6 +2,7 @@ package article | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "context" | 4 | "context" |
5 | + "text/template" | ||
5 | 6 | ||
6 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" |
7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | 8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" |
@@ -29,6 +30,10 @@ func NewMiniCreateArticleDraftLogic(ctx context.Context, svcCtx *svc.ServiceCont | @@ -29,6 +30,10 @@ func NewMiniCreateArticleDraftLogic(ctx context.Context, svcCtx *svc.ServiceCont | ||
29 | func (l *MiniCreateArticleDraftLogic) MiniCreateArticleDraft(req *types.MiniArticleDraftCreateRequest) (resp *types.MiniArticleDraftCreateResponse, err error) { | 30 | func (l *MiniCreateArticleDraftLogic) MiniCreateArticleDraft(req *types.MiniArticleDraftCreateRequest) (resp *types.MiniArticleDraftCreateResponse, err error) { |
30 | var conn = l.svcCtx.DefaultDBConn() | 31 | var conn = l.svcCtx.DefaultDBConn() |
31 | 32 | ||
33 | + for i := range req.Section { | ||
34 | + req.Section[i] = template.HTMLEscapeString(req.Section[i]) | ||
35 | + } | ||
36 | + | ||
32 | newDraft := domain.ArticleDraft{ | 37 | newDraft := domain.ArticleDraft{ |
33 | Id: 0, | 38 | Id: 0, |
34 | CompanyId: req.CompanyId, | 39 | CompanyId: req.CompanyId, |
@@ -3,6 +3,7 @@ package article | @@ -3,6 +3,7 @@ package article | ||
3 | import ( | 3 | import ( |
4 | "context" | 4 | "context" |
5 | "strings" | 5 | "strings" |
6 | + "text/template" | ||
6 | 7 | ||
7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | 8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" |
8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | 9 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" |
@@ -124,6 +125,8 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | @@ -124,6 +125,8 @@ func (l *MiniCreateArticleLogic) MiniCreateArticle(req *types.MiniArticleCreateR | ||
124 | if len(newStr) == 0 { | 125 | if len(newStr) == 0 { |
125 | continue | 126 | continue |
126 | } | 127 | } |
128 | + newStr = template.HTMLEscapeString(newStr) | ||
129 | + | ||
127 | newSection := domain.ArticleSection{ | 130 | newSection := domain.ArticleSection{ |
128 | Id: 0, | 131 | Id: 0, |
129 | CompanyId: author.CompanyId, | 132 | CompanyId: author.CompanyId, |
@@ -2,6 +2,7 @@ package article | @@ -2,6 +2,7 @@ package article | ||
2 | 2 | ||
3 | import ( | 3 | import ( |
4 | "context" | 4 | "context" |
5 | + "text/template" | ||
5 | 6 | ||
6 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | 7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" |
7 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | 8 | "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" |
@@ -37,6 +38,10 @@ func (l *MiniUpdateArticleDraftLogic) MiniUpdateArticleDraft(req *types.MiniArti | @@ -37,6 +38,10 @@ func (l *MiniUpdateArticleDraftLogic) MiniUpdateArticleDraft(req *types.MiniArti | ||
37 | return nil, xerr.NewErrMsg("更新草稿失败") | 38 | return nil, xerr.NewErrMsg("更新草稿失败") |
38 | } | 39 | } |
39 | } | 40 | } |
41 | + for i := range req.Section { | ||
42 | + req.Section[i] = template.HTMLEscapeString(req.Section[i]) | ||
43 | + } | ||
44 | + | ||
40 | draftInfo.Content = req.Section | 45 | draftInfo.Content = req.Section |
41 | draftInfo.Title = req.Title | 46 | draftInfo.Title = req.Title |
42 | draftInfo.Location = domain.Location{ | 47 | draftInfo.Location = domain.Location{ |
@@ -11,7 +11,6 @@ import ( | @@ -11,7 +11,6 @@ import ( | ||
11 | 11 | ||
12 | "text/template" | 12 | "text/template" |
13 | 13 | ||
14 | - "github.com/samber/lo" | ||
15 | "github.com/zeromicro/go-zero/core/logx" | 14 | "github.com/zeromicro/go-zero/core/logx" |
16 | ) | 15 | ) |
17 | 16 | ||
@@ -50,12 +49,12 @@ func (l *MiniCreateArticleCommentLogic) MiniCreateArticleComment(req *types.Mini | @@ -50,12 +49,12 @@ func (l *MiniCreateArticleCommentLogic) MiniCreateArticleComment(req *types.Mini | ||
50 | return nil, xerr.NewErrMsg("没有评论权限") | 49 | return nil, xerr.NewErrMsg("没有评论权限") |
51 | } | 50 | } |
52 | //查看评论权限, | 51 | //查看评论权限, |
53 | - if len(articleInfo.WhoReview) > 0 { | ||
54 | - ok := lo.IndexOf(articleInfo.WhoReview, req.FromUserId) | ||
55 | - if ok < 0 { | ||
56 | - return nil, xerr.NewErrMsg("没有评论权限") | ||
57 | - } | ||
58 | - } | 52 | + // if len(articleInfo.WhoReview) > 0 { |
53 | + // ok := lo.IndexOf(articleInfo.WhoReview, req.FromUserId) | ||
54 | + // if ok < 0 { | ||
55 | + // return nil, xerr.NewErrMsg("没有评论权限") | ||
56 | + // } | ||
57 | + // } | ||
59 | // 对段落进行评论 | 58 | // 对段落进行评论 |
60 | var selctionInfo *domain.ArticleSection | 59 | var selctionInfo *domain.ArticleSection |
61 | if req.SectionId > 0 { | 60 | if req.SectionId > 0 { |
1 | +package comment | ||
2 | + | ||
3 | +import ( | ||
4 | + "context" | ||
5 | + | ||
6 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" | ||
7 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" | ||
8 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain" | ||
9 | + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" | ||
10 | + | ||
11 | + "github.com/zeromicro/go-zero/core/logx" | ||
12 | +) | ||
13 | + | ||
14 | +type MiniTop5ArticleCommentLogic struct { | ||
15 | + logx.Logger | ||
16 | + ctx context.Context | ||
17 | + svcCtx *svc.ServiceContext | ||
18 | +} | ||
19 | + | ||
20 | +func NewMiniTop5ArticleCommentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MiniTop5ArticleCommentLogic { | ||
21 | + return &MiniTop5ArticleCommentLogic{ | ||
22 | + Logger: logx.WithContext(ctx), | ||
23 | + ctx: ctx, | ||
24 | + svcCtx: svcCtx, | ||
25 | + } | ||
26 | +} | ||
27 | + | ||
28 | +// 获取前5的评论 | ||
29 | +func (l *MiniTop5ArticleCommentLogic) MiniTop5ArticleComment(req *types.MiniTop5ArticleCommentRequest) (resp *types.MiniTop5ArticleCommentResponse, err error) { | ||
30 | + var conn = l.svcCtx.DefaultDBConn() | ||
31 | + commentList, err := l.svcCtx.ArticleCommentRepository.Top5Comment(l.ctx, conn, req.CompanyId, req.ArticleId) | ||
32 | + if err != nil { | ||
33 | + return nil, xerr.NewErrMsgErr("获取评论信息失败", err) | ||
34 | + } | ||
35 | + | ||
36 | + queryOption := domain.NewQueryOptions().WithFindOnly(). | ||
37 | + MustWithKV("articleId", req.ArticleId). | ||
38 | + MustWithKV("userId", req.UserId) | ||
39 | + // 获取我点赞的评论 | ||
40 | + _, userFlagList, err := l.svcCtx.UserLoveFlagRepository.Find(l.ctx, conn, queryOption) | ||
41 | + if err != nil { | ||
42 | + return nil, xerr.NewErrMsgErr("获取评论信息失败", err) | ||
43 | + } | ||
44 | + // 我点赞的 | ||
45 | + flagMap := map[int64]struct{}{} | ||
46 | + for _, val := range userFlagList { | ||
47 | + flagMap[val.CommentId] = struct{}{} | ||
48 | + } | ||
49 | + | ||
50 | + resp = &types.MiniTop5ArticleCommentResponse{ | ||
51 | + List: make([]types.ArticleCommentItem, len(commentList)), | ||
52 | + } | ||
53 | + for i, val := range commentList { | ||
54 | + item := types.ArticleCommentItem{ | ||
55 | + Id: val.Id, | ||
56 | + Pid: val.Pid, | ||
57 | + TopId: val.TopId, | ||
58 | + ArtitcleId: val.ArticleId, | ||
59 | + SectionId: val.SectionId, | ||
60 | + FromUserId: val.FromUserId, | ||
61 | + FromUser: types.CommentAuthor{ | ||
62 | + Id: val.FromUser.Id, | ||
63 | + Name: val.FromUser.Name, | ||
64 | + Avatar: val.FromUser.Avatar, | ||
65 | + Position: val.FromUser.Position, | ||
66 | + Company: val.FromUser.Company, | ||
67 | + }, | ||
68 | + ToUserId: val.ToUserId, | ||
69 | + ToUser: types.CommentAuthor{ | ||
70 | + Id: val.ToUser.Id, | ||
71 | + Name: val.ToUser.Name, | ||
72 | + Avatar: val.ToUser.Avatar, | ||
73 | + Position: val.ToUser.Position, | ||
74 | + Company: val.ToUser.Company, | ||
75 | + }, | ||
76 | + SectionContent: val.SectionContent, | ||
77 | + CountReply: val.CountReply, | ||
78 | + CountUserLove: val.CountUserLove, | ||
79 | + CountAdminLove: val.CountAdminLove, | ||
80 | + AtWho: []types.CommentAtWho{}, | ||
81 | + CreatedAt: val.CreatedAt, | ||
82 | + MeLoveFlag: 0, | ||
83 | + } | ||
84 | + | ||
85 | + if _, ok := flagMap[val.Id]; ok { | ||
86 | + item.MeLoveFlag = 1 | ||
87 | + } | ||
88 | + for _, val2 := range val.AtWho { | ||
89 | + item.AtWho = append(item.AtWho, types.CommentAtWho{ | ||
90 | + Id: val2.Id, | ||
91 | + Name: val2.Name, | ||
92 | + }) | ||
93 | + } | ||
94 | + resp.List[i] = item | ||
95 | + } | ||
96 | + return | ||
97 | +} |
@@ -108,6 +108,16 @@ type MiniDeleteArticleCommentResponse struct { | @@ -108,6 +108,16 @@ type MiniDeleteArticleCommentResponse struct { | ||
108 | Id int64 `json:"id"` | 108 | Id int64 `json:"id"` |
109 | } | 109 | } |
110 | 110 | ||
111 | +type MiniTop5ArticleCommentRequest struct { | ||
112 | + CompanyId int64 `json:",optional"` | ||
113 | + UserId int64 `json:",optional"` | ||
114 | + ArticleId int64 `json:"articleId"` | ||
115 | +} | ||
116 | + | ||
117 | +type MiniTop5ArticleCommentResponse struct { | ||
118 | + List []ArticleCommentItem `json:"list"` | ||
119 | +} | ||
120 | + | ||
111 | type MessageSystemRequest struct { | 121 | type MessageSystemRequest struct { |
112 | Page int `json:"page"` | 122 | Page int `json:"page"` |
113 | Size int `json:"size"` | 123 | Size int `json:"size"` |
@@ -570,16 +580,16 @@ type MiniArticleGetRequest struct { | @@ -570,16 +580,16 @@ type MiniArticleGetRequest struct { | ||
570 | } | 580 | } |
571 | 581 | ||
572 | type MiniArticleGetResponse struct { | 582 | type MiniArticleGetResponse struct { |
573 | - Id int64 `json:"id"` //id | ||
574 | - Title string `json:"title"` //标题 | ||
575 | - AuthorId int64 `json:"authorId"` //发布人id | ||
576 | - Author ArticleAuthor `json:"author"` //发布人 | ||
577 | - CreatedAt int64 `json:"createdAt"` //文章的发布时间 | ||
578 | - Section []ArticleSection `json:"section"` //文章的文本内容 | ||
579 | - Images []string `json:"images"` //图片 | ||
580 | - WhoRead []int64 `json:"whoRead"` //谁可查看 | ||
581 | - WhoReview []int64 `json:"whoReview"` //谁可评论 | ||
582 | - Location Location `json:"location"` //定位坐标 | 583 | + Id int64 `json:"id"` // id |
584 | + Title string `json:"title"` // 标题 | ||
585 | + AuthorId int64 `json:"authorId"` // 发布人id | ||
586 | + Author ArticleAuthor `json:"author"` // 发布人 | ||
587 | + CreatedAt int64 `json:"createdAt"` // 文章的发布时间 | ||
588 | + Section []ArticleSection `json:"section"` // 文章的文本内容 | ||
589 | + Images []string `json:"images"` // 图片 | ||
590 | + WhoRead []int64 `json:"whoRead"` // 谁可查看 | ||
591 | + WhoReview []int64 `json:"whoReview"` // 谁可评论 | ||
592 | + Location Location `json:"location"` // 定位坐标 | ||
583 | CountLove int `json:"countLove"` // 点赞数量 | 593 | CountLove int `json:"countLove"` // 点赞数量 |
584 | CountComment int `json:"countComment"` // 评论数量 | 594 | CountComment int `json:"countComment"` // 评论数量 |
585 | CountRead int `json:"countRead"` // 浏览数量 | 595 | CountRead int `json:"countRead"` // 浏览数量 |
@@ -228,7 +228,10 @@ func (repository *ArticleCommentRepository) IncreaseCountUserLove(ctx context.Co | @@ -228,7 +228,10 @@ func (repository *ArticleCommentRepository) IncreaseCountUserLove(ctx context.Co | ||
228 | ) | 228 | ) |
229 | m = &models.ArticleComment{Id: commnetId} | 229 | m = &models.ArticleComment{Id: commnetId} |
230 | queryFunc := func() (interface{}, error) { | 230 | queryFunc := func() (interface{}, error) { |
231 | - tx = tx.Model(m).Update("count_user_love", gorm.Expr("count_user_love+?", incr)) | 231 | + tx = tx.Model(m).Updates(map[string]interface{}{ |
232 | + "count_user_love": gorm.Expr("count_user_love+?", incr), | ||
233 | + "version": gorm.Expr("version+1"), | ||
234 | + }) | ||
232 | return nil, tx.Error | 235 | return nil, tx.Error |
233 | } | 236 | } |
234 | if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | 237 | if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { |
@@ -247,7 +250,10 @@ func (repository *ArticleCommentRepository) IncreaseCountReply(ctx context.Conte | @@ -247,7 +250,10 @@ func (repository *ArticleCommentRepository) IncreaseCountReply(ctx context.Conte | ||
247 | ) | 250 | ) |
248 | m = &models.ArticleComment{Id: commnetId} | 251 | m = &models.ArticleComment{Id: commnetId} |
249 | queryFunc := func() (interface{}, error) { | 252 | queryFunc := func() (interface{}, error) { |
250 | - tx = tx.Model(m).Update("count_reply", gorm.Expr("count_reply+?", incr)) | 253 | + tx = tx.Model(m).Updates(map[string]interface{}{ |
254 | + "count_reply": gorm.Expr("count_reply+?", incr), | ||
255 | + "version": gorm.Expr("version+1"), | ||
256 | + }) | ||
251 | return nil, tx.Error | 257 | return nil, tx.Error |
252 | } | 258 | } |
253 | if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { | 259 | if _, err = repository.Query(queryFunc, m.CacheKeyFunc()); err != nil { |
@@ -257,6 +263,60 @@ func (repository *ArticleCommentRepository) IncreaseCountReply(ctx context.Conte | @@ -257,6 +263,60 @@ func (repository *ArticleCommentRepository) IncreaseCountReply(ctx context.Conte | ||
257 | 263 | ||
258 | } | 264 | } |
259 | 265 | ||
266 | +// 获取热度前5的 | ||
267 | +// 规则 热门=(回复数+赞数量+运营点赞)Top5 | ||
268 | +func (repository *ArticleCommentRepository) Top5Comment(ctx context.Context, conn transaction.Conn, companyId int64, articleId int64) ([]*domain.ArticleComment, error) { | ||
269 | + | ||
270 | + sql1 := `select | ||
271 | + article_comment.id , | ||
272 | + (article_comment.count_reply +article_comment.count_user_love +article_comment.count_admin_love ) cnt | ||
273 | + from article_comment | ||
274 | + where top_id =0 and article_id =? and deleted_at=0 and show=0 and company_id=? | ||
275 | + order by cnt desc,article_comment.id desc | ||
276 | + limit 5 ` | ||
277 | + db := conn.DB() | ||
278 | + rows, err := db.Raw(sql1, articleId, companyId).Rows() | ||
279 | + if err != nil { | ||
280 | + return nil, err | ||
281 | + } | ||
282 | + defer rows.Close() | ||
283 | + commentIds := []int64{} | ||
284 | + var cid int64 | ||
285 | + var cnt int64 | ||
286 | + for rows.Next() { | ||
287 | + err = rows.Scan(&cid, &cnt) | ||
288 | + if err != nil { | ||
289 | + return nil, err | ||
290 | + } | ||
291 | + commentIds = append(commentIds, cid) | ||
292 | + } | ||
293 | + if len(commentIds) == 0 { | ||
294 | + return nil, nil | ||
295 | + } | ||
296 | + ms := make([]*models.ArticleComment, 0) | ||
297 | + dms := make([]*domain.ArticleComment, 0) | ||
298 | + queryFunc := func() (interface{}, error) { | ||
299 | + tx := db.Model(&ms).Where("id in(?)", commentIds) | ||
300 | + queryOptions := domain.NewQueryOptions().WithFindOnly() | ||
301 | + if _, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { | ||
302 | + return dms, tx.Error | ||
303 | + } | ||
304 | + return dms, nil | ||
305 | + } | ||
306 | + | ||
307 | + if _, err := repository.Query(queryFunc); err != nil { | ||
308 | + return nil, err | ||
309 | + } | ||
310 | + | ||
311 | + for _, item := range ms { | ||
312 | + if dm, err := repository.ModelToDomainModel(item); err != nil { | ||
313 | + return dms, err | ||
314 | + } else { | ||
315 | + dms = append(dms, dm) | ||
316 | + } | ||
317 | + } | ||
318 | + return dms, nil | ||
319 | +} | ||
260 | func NewArticleCommentRepository(cache *cache.CachedRepository) domain.ArticleCommentRepository { | 320 | func NewArticleCommentRepository(cache *cache.CachedRepository) domain.ArticleCommentRepository { |
261 | return &ArticleCommentRepository{CachedRepository: cache} | 321 | return &ArticleCommentRepository{CachedRepository: cache} |
262 | } | 322 | } |
@@ -189,6 +189,7 @@ func (repository *ArticleSectionRepository) IncreaseCountComment(ctx context.Con | @@ -189,6 +189,7 @@ func (repository *ArticleSectionRepository) IncreaseCountComment(ctx context.Con | ||
189 | queryFunc := func() (interface{}, error) { | 189 | queryFunc := func() (interface{}, error) { |
190 | tx = tx.Model(m).Updates(map[string]interface{}{ | 190 | tx = tx.Model(m).Updates(map[string]interface{}{ |
191 | "total_comment": gorm.Expr("total_comment+?", incr), | 191 | "total_comment": gorm.Expr("total_comment+?", incr), |
192 | + "version": gorm.Expr("version+1"), | ||
192 | }) | 193 | }) |
193 | return nil, tx.Error | 194 | return nil, tx.Error |
194 | } | 195 | } |
@@ -59,4 +59,5 @@ type ArticleCommentRepository interface { | @@ -59,4 +59,5 @@ type ArticleCommentRepository interface { | ||
59 | Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleComment, error) | 59 | Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleComment, error) |
60 | IncreaseCountUserLove(ctx context.Context, conn transaction.Conn, incr int, commentId int64) error //点赞数量变动 | 60 | IncreaseCountUserLove(ctx context.Context, conn transaction.Conn, incr int, commentId int64) error //点赞数量变动 |
61 | IncreaseCountReply(ctx context.Context, conn transaction.Conn, incr int, commentId int64) error // 评论回复数量变动 | 61 | IncreaseCountReply(ctx context.Context, conn transaction.Conn, incr int, commentId int64) error // 评论回复数量变动 |
62 | + Top5Comment(ctx context.Context, conn transaction.Conn, companyId int64, articleId int64) ([]*ArticleComment, error) | ||
62 | } | 63 | } |
-
请 注册 或 登录 后发表评论