作者 tangxvhui

新添加接口

@@ -56,6 +56,17 @@ service Core { @@ -56,6 +56,17 @@ service Core {
56 @handler SystemArticleCommentSearch 56 @handler SystemArticleCommentSearch
57 post /article_comment/search (SystemArticleCommentSearchRequest) returns (SystemArticleCommentSearchResponse) 57 post /article_comment/search (SystemArticleCommentSearchRequest) returns (SystemArticleCommentSearchResponse)
58 58
  59 + @doc "管理后台查看所有的评论"
  60 + @handler SystemListAticleComment
  61 + post /article_comment/list (SystemListCommentRequest)returns (SystemListCommentResponse)
  62 +
  63 + @doc "管理后台评论的详情"
  64 + @handler SystemGetAticleComment
  65 + get /article_comment/:id (SystemGetCommentRequest)returns (SystemGetCommentResponse)
  66 +
  67 + @doc "管理后台变更评论的显示状态"
  68 + @handler SystemEditAticleCommentShow
  69 + post /article_comment/edit_show (SystemEditCommentShowRequest)returns (SystemEditCommentShowResponse)
59 } 70 }
60 71
61 //评论的填写人 72 //评论的填写人
@@ -240,3 +251,69 @@ type ( @@ -240,3 +251,69 @@ type (
240 Show int `json:"show"` // 显示状态 251 Show int `json:"show"` // 显示状态
241 } 252 }
242 ) 253 )
  254 +
  255 +// 管理后台 评论管理列表
  256 +type (
  257 + SystemListCommentRequest {
  258 + Page int `json:"page"`
  259 + Size int `json:"size"`
  260 + CompanyId int64 `json:",optional"` //
  261 + TopId int64 `json:"topId"` // 文章顶层ID
  262 + FromUser string `json:"fromUser,optional"` // 用户
  263 + Show int `json:"show,optional"` // 显示状态
  264 + BeginTime int64 `json:"beginTime,optional"` // 填写评论的开始时间
  265 + EndTime int64 `json:"endTime,optional"` // 填写评论的结束时间
  266 + ArticleTitle string `json:"articleTitle,optional"` //
  267 + Content string `json:"content,optional"` //
  268 + }
  269 + SystemListCommentResponse {
  270 + Total int `json:"total"`
  271 + List []SystemCommentItem `json:"list"`
  272 + }
  273 + SystemCommentItem {
  274 + Id int64 `json:"id"` //评论id
  275 + ArticleTitle string `json:"articleTitle"` //文章标题
  276 + FromUserId int64 `json:"fromUserId"` //填写评论的人
  277 + FromUser CommentAuthor `json:"fromUser"` //填写评论的人
  278 + CreatedAt int64 `json:"createdAt"` //评论的填写时间
  279 + Content string `json:"content"` //评论的内容
  280 + Show int `json:"show"` //是否展示 [1显示] [2不显示]
  281 + CountReply int `json:"countReplay"` //回复数量
  282 + CountUserLove int `json:"countUserLove"` //用户点赞数量
  283 + CountAdminLove int `json:"countAdminLove"` //运营点赞数量
  284 + }
  285 +)
  286 +
  287 +// 管理后台获取评论详情
  288 +type (
  289 + SystemGetCommentRequest {
  290 + CompanyId int64 `path:",optional"`
  291 + Id int64 `path:"id"`
  292 + }
  293 +
  294 + SystemGetCommentResponse {
  295 + Id int64 `json:"id"` //评论id
  296 + ArticleTitle string `json:"articleTitle"` //文章标题
  297 + FromUserId int64 `json:"fromUserId"` //填写评论的人
  298 + FromUser CommentAuthor `json:"fromUser"` //填写评论的人
  299 + CreatedAt int64 `json:"createdAt"` //评论的填写时间
  300 + SectionContent string `json:"sectionContent"` //引用的段落内容
  301 + Content string `json:"content"` // 评论的内容
  302 + Show int `json:"show"` //是否展示 [1显示] [2不显示]
  303 + CountReply int `json:"countReplay"` //回复数量
  304 + CountUserLove int `json:"countUserLove"` //用户点赞数量
  305 + CountAdminLove int `json:"countAdminLove"` //运营点赞数量
  306 + }
  307 +)
  308 +
  309 +type (
  310 + SystemEditCommentShowRequest {
  311 + CompanyId int64 `json:",optional"`
  312 + Id []int64 `json:"id"`
  313 + Show int `json:"show"`
  314 + }
  315 +
  316 + SystemEditCommentShowResponse {
  317 + Id []int64 `json:"id"`
  318 + }
  319 +)
  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 SystemEditAticleCommentShowHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  15 + return func(w http.ResponseWriter, r *http.Request) {
  16 + var req types.SystemEditCommentShowRequest
  17 + if err := httpx.Parse(r, &req); err != nil {
  18 + httpx.ErrorCtx(r.Context(), w, err)
  19 + return
  20 + }
  21 +
  22 + l := comment.NewSystemEditAticleCommentShowLogic(r.Context(), svcCtx)
  23 + token := contextdata.GetUserTokenFromCtx(r.Context())
  24 + req.CompanyId = token.CompanyId
  25 + resp, err := l.SystemEditAticleCommentShow(&req)
  26 + result.HttpResult(r, w, resp, err)
  27 + }
  28 +}
  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 SystemGetAticleCommentHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  15 + return func(w http.ResponseWriter, r *http.Request) {
  16 + var req types.SystemGetCommentRequest
  17 + if err := httpx.Parse(r, &req); err != nil {
  18 + httpx.ErrorCtx(r.Context(), w, err)
  19 + return
  20 + }
  21 +
  22 + l := comment.NewSystemGetAticleCommentLogic(r.Context(), svcCtx)
  23 + token := contextdata.GetUserTokenFromCtx(r.Context())
  24 + req.CompanyId = token.CompanyId
  25 + resp, err := l.SystemGetAticleComment(&req)
  26 + result.HttpResult(r, w, resp, err)
  27 + }
  28 +}
  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 SystemListAticleCommentHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  15 + return func(w http.ResponseWriter, r *http.Request) {
  16 + var req types.SystemListCommentRequest
  17 + if err := httpx.Parse(r, &req); err != nil {
  18 + httpx.ErrorCtx(r.Context(), w, err)
  19 + return
  20 + }
  21 +
  22 + l := comment.NewSystemListAticleCommentLogic(r.Context(), svcCtx)
  23 + token := contextdata.GetUserTokenFromCtx(r.Context())
  24 + req.CompanyId = token.CompanyId
  25 + resp, err := l.SystemListAticleComment(&req)
  26 + result.HttpResult(r, w, resp, err)
  27 + }
  28 +}
@@ -69,6 +69,21 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { @@ -69,6 +69,21 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
69 Path: "/article_comment/search", 69 Path: "/article_comment/search",
70 Handler: comment.SystemArticleCommentSearchHandler(serverCtx), 70 Handler: comment.SystemArticleCommentSearchHandler(serverCtx),
71 }, 71 },
  72 + {
  73 + Method: http.MethodPost,
  74 + Path: "/article_comment/list",
  75 + Handler: comment.SystemListAticleCommentHandler(serverCtx),
  76 + },
  77 + {
  78 + Method: http.MethodGet,
  79 + Path: "/article_comment/:id",
  80 + Handler: comment.SystemGetAticleCommentHandler(serverCtx),
  81 + },
  82 + {
  83 + Method: http.MethodPost,
  84 + Path: "/article_comment/edit_show",
  85 + Handler: comment.SystemEditAticleCommentShowHandler(serverCtx),
  86 + },
72 }..., 87 }...,
73 ), 88 ),
74 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret), 89 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret),
  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/db/transaction"
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"
  11 +
  12 + "github.com/zeromicro/go-zero/core/logx"
  13 +)
  14 +
  15 +type SystemEditAticleCommentShowLogic struct {
  16 + logx.Logger
  17 + ctx context.Context
  18 + svcCtx *svc.ServiceContext
  19 +}
  20 +
  21 +func NewSystemEditAticleCommentShowLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemEditAticleCommentShowLogic {
  22 + return &SystemEditAticleCommentShowLogic{
  23 + Logger: logx.WithContext(ctx),
  24 + ctx: ctx,
  25 + svcCtx: svcCtx,
  26 + }
  27 +}
  28 +
  29 +func (l *SystemEditAticleCommentShowLogic) SystemEditAticleCommentShow(req *types.SystemEditCommentShowRequest) (resp *types.SystemEditCommentShowResponse, err error) {
  30 +
  31 + resp = &types.SystemEditCommentShowResponse{
  32 + Id: []int64{},
  33 + }
  34 + if req.Show == 1 {
  35 + for _, val := range req.Id {
  36 + err = l.enableShow(val, req.CompanyId)
  37 + if err != nil {
  38 + err = xerr.NewErrMsgErr("操作失败", err)
  39 + } else {
  40 + resp.Id = append(resp.Id, val)
  41 + }
  42 + }
  43 + }
  44 + if req.Show == 2 {
  45 + for _, val := range req.Id {
  46 + err = l.disableShow(val, req.CompanyId)
  47 + if err != nil {
  48 + err = xerr.NewErrMsgErr("操作失败", err)
  49 + } else {
  50 + resp.Id = append(resp.Id, val)
  51 + }
  52 + }
  53 + }
  54 +
  55 + return
  56 +}
  57 +
  58 +func (l *SystemEditAticleCommentShowLogic) disableShow(commentId int64, companyId int64) error {
  59 + var conn = l.svcCtx.DefaultDBConn()
  60 + commetInfo, err := l.svcCtx.ArticleCommentRepository.FindOne(l.ctx, conn, commentId)
  61 + if err != nil {
  62 + return xerr.NewErrMsgErr("删除评论信息失败", err)
  63 + }
  64 + if commetInfo.CompanyId != commentId {
  65 + return xerr.NewErrMsg("没有操作权限")
  66 + }
  67 + if commetInfo.Show == domain.CommentShowDisable {
  68 + return nil
  69 + }
  70 + commetInfo.Show = domain.CommentShowDisable
  71 + // 变更回复数量
  72 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error {
  73 + _, err = l.svcCtx.ArticleCommentRepository.Update(ctx, c, commetInfo)
  74 + if err != nil {
  75 + return err
  76 + }
  77 + // 减少上级评论的回复数量
  78 + if commetInfo.Pid != 0 {
  79 + err = l.svcCtx.ArticleCommentRepository.IncreaseCountReply(l.ctx, c, -1, commetInfo.Pid)
  80 + if err != nil {
  81 + return err
  82 + }
  83 + }
  84 + // 减少最顶层的评论回复计数
  85 + if commetInfo.TopId != 0 && commetInfo.Pid != commetInfo.TopId {
  86 + err = l.svcCtx.ArticleCommentRepository.IncreaseCountReply(l.ctx, c, -1, commetInfo.TopId)
  87 + if err != nil {
  88 + return err
  89 + }
  90 + }
  91 + //减少加段落评论计数
  92 + if commetInfo.SectionId > 0 {
  93 + err = l.svcCtx.ArticleSectionRepository.IncreaseCountComment(ctx, c, -1, commetInfo.SectionId)
  94 + if err != nil {
  95 + return err
  96 + }
  97 + }
  98 + // 减少文章的评论数
  99 + err = l.svcCtx.ArticleRepository.IncreaseCountComment(ctx, c, -1, commetInfo.ArticleId)
  100 + if err != nil {
  101 + return err
  102 + }
  103 + return nil
  104 + }, true)
  105 +
  106 + if err != nil {
  107 + return xerr.NewErrMsgErr("删除评论信息失败", err)
  108 + }
  109 + return nil
  110 +}
  111 +
  112 +func (l *SystemEditAticleCommentShowLogic) enableShow(commentId int64, companyId int64) error {
  113 + var conn = l.svcCtx.DefaultDBConn()
  114 + commetInfo, err := l.svcCtx.ArticleCommentRepository.FindOne(l.ctx, conn, commentId)
  115 + if err != nil {
  116 + return xerr.NewErrMsgErr("删除评论信息失败", err)
  117 + }
  118 + if commetInfo.CompanyId != commentId {
  119 + return xerr.NewErrMsg("没有操作权限")
  120 + }
  121 + if commetInfo.Show == domain.CommentShowEnable {
  122 + return nil
  123 + }
  124 + commetInfo.Show = domain.CommentShowEnable
  125 + // 变更回复数量
  126 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error {
  127 + _, err = l.svcCtx.ArticleCommentRepository.Update(ctx, c, commetInfo)
  128 + if err != nil {
  129 + return err
  130 + }
  131 + // 增加上级评论的回复数量
  132 + if commetInfo.Pid != 0 {
  133 + err = l.svcCtx.ArticleCommentRepository.IncreaseCountReply(l.ctx, c, 1, commetInfo.Pid)
  134 + if err != nil {
  135 + return err
  136 + }
  137 + }
  138 + // 增加最顶层的评论回复计数
  139 + if commetInfo.TopId != 0 && commetInfo.Pid != commetInfo.TopId {
  140 + err = l.svcCtx.ArticleCommentRepository.IncreaseCountReply(l.ctx, c, 1, commetInfo.TopId)
  141 + if err != nil {
  142 + return err
  143 + }
  144 + }
  145 + //增加加段落评论计数
  146 + if commetInfo.SectionId > 0 {
  147 + err = l.svcCtx.ArticleSectionRepository.IncreaseCountComment(ctx, c, 1, commetInfo.SectionId)
  148 + if err != nil {
  149 + return err
  150 + }
  151 + }
  152 + // 增加文章的评论数
  153 + err = l.svcCtx.ArticleRepository.IncreaseCountComment(ctx, c, 1, commetInfo.ArticleId)
  154 + if err != nil {
  155 + return err
  156 + }
  157 + return nil
  158 + }, true)
  159 +
  160 + if err != nil {
  161 + return xerr.NewErrMsgErr("删除评论信息失败", err)
  162 + }
  163 + return nil
  164 +}
  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/pkg/xerr"
  9 +
  10 + "github.com/zeromicro/go-zero/core/logx"
  11 +)
  12 +
  13 +type SystemGetAticleCommentLogic struct {
  14 + logx.Logger
  15 + ctx context.Context
  16 + svcCtx *svc.ServiceContext
  17 +}
  18 +
  19 +func NewSystemGetAticleCommentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemGetAticleCommentLogic {
  20 + return &SystemGetAticleCommentLogic{
  21 + Logger: logx.WithContext(ctx),
  22 + ctx: ctx,
  23 + svcCtx: svcCtx,
  24 + }
  25 +}
  26 +
  27 +func (l *SystemGetAticleCommentLogic) SystemGetAticleComment(req *types.SystemGetCommentRequest) (resp *types.SystemGetCommentResponse, err error) {
  28 + var conn = l.svcCtx.DefaultDBConn()
  29 +
  30 + commentInfo, err := l.svcCtx.ArticleCommentRepository.FindOne(l.ctx, conn, req.Id)
  31 + if err != nil {
  32 + return nil, xerr.NewErrMsgErr("获取评论详情失败", err)
  33 + }
  34 + if commentInfo.CompanyId != req.CompanyId {
  35 + return nil, xerr.NewErrMsg("没有查看权限")
  36 + }
  37 + resp = &types.SystemGetCommentResponse{
  38 + Id: commentInfo.Id,
  39 + FromUserId: commentInfo.FromUserId,
  40 + FromUser: types.CommentAuthor{
  41 + Id: commentInfo.FromUserId,
  42 + Name: commentInfo.FromUser.Name,
  43 + Avatar: commentInfo.FromUser.Avatar,
  44 + Position: commentInfo.FromUser.Position,
  45 + Company: commentInfo.FromUser.Company,
  46 + },
  47 + CreatedAt: commentInfo.CreatedAt,
  48 + SectionContent: commentInfo.SectionContent,
  49 + Content: commentInfo.Content,
  50 + Show: int(commentInfo.Show),
  51 + CountReply: commentInfo.CountReply,
  52 + CountUserLove: commentInfo.CountUserLove,
  53 + CountAdminLove: commentInfo.CountAdminLove,
  54 + }
  55 + return resp, nil
  56 +}
  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/pkg/xerr"
  9 +
  10 + "github.com/zeromicro/go-zero/core/logx"
  11 +)
  12 +
  13 +type SystemListAticleCommentLogic struct {
  14 + logx.Logger
  15 + ctx context.Context
  16 + svcCtx *svc.ServiceContext
  17 +}
  18 +
  19 +func NewSystemListAticleCommentLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemListAticleCommentLogic {
  20 + return &SystemListAticleCommentLogic{
  21 + Logger: logx.WithContext(ctx),
  22 + ctx: ctx,
  23 + svcCtx: svcCtx,
  24 + }
  25 +}
  26 +
  27 +// 管理后台评论列表
  28 +func (l *SystemListAticleCommentLogic) SystemListAticleComment(req *types.SystemListCommentRequest) (resp *types.SystemListCommentResponse, err error) {
  29 + var conn = l.svcCtx.DefaultDBConn()
  30 +
  31 + cnt, commentList, err := l.svcCtx.ArticleCommentRepository.CustomSearchBy(l.ctx, conn, req.CompanyId, req.Page, req.Size,
  32 + req.ArticleTitle, req.Content, req.FromUser, req.Show,
  33 + )
  34 + if err != nil {
  35 + return nil, xerr.NewErrMsgErr("获取评论详情失败", err)
  36 + }
  37 +
  38 + resp = &types.SystemListCommentResponse{
  39 + Total: cnt,
  40 + List: make([]types.SystemCommentItem, len(commentList)),
  41 + }
  42 +
  43 + for i, val := range commentList {
  44 + resp.List[i] = types.SystemCommentItem{
  45 + Id: val.Id,
  46 + ArticleTitle: val.ArticleTitle,
  47 + FromUserId: val.FromUserId,
  48 + FromUser: types.CommentAuthor{
  49 + Id: val.FromUser.Id,
  50 + Name: val.FromUser.Name,
  51 + Avatar: val.FromUser.Avatar,
  52 + Position: val.FromUser.Position,
  53 + Company: val.FromUser.Company,
  54 + },
  55 + CreatedAt: val.CreatedAt,
  56 + Content: val.Content,
  57 + Show: val.Show,
  58 + CountReply: val.CountReply,
  59 + CountUserLove: val.CountUserLove,
  60 + CountAdminLove: val.CountAdminLove,
  61 + }
  62 + }
  63 +
  64 + return resp, nil
  65 +}
@@ -168,6 +168,66 @@ type SystemArticleCommentSearchItem struct { @@ -168,6 +168,66 @@ type SystemArticleCommentSearchItem struct {
168 Show int `json:"show"` // 显示状态 168 Show int `json:"show"` // 显示状态
169 } 169 }
170 170
  171 +type SystemListCommentRequest struct {
  172 + Page int `json:"page"`
  173 + Size int `json:"size"`
  174 + CompanyId int64 `json:",optional"` //
  175 + TopId int64 `json:"topId"` // 文章顶层ID
  176 + FromUser string `json:"fromUser,optional"` // 用户
  177 + Show int `json:"show,optional"` // 显示状态
  178 + BeginTime int64 `json:"beginTime,optional"` // 填写评论的开始时间
  179 + EndTime int64 `json:"endTime,optional"` // 填写评论的结束时间
  180 + ArticleTitle string `json:"articleTitle,optional"` //
  181 + Content string `json:"content,optional"` //
  182 +}
  183 +
  184 +type SystemListCommentResponse struct {
  185 + Total int `json:"total"`
  186 + List []SystemCommentItem `json:"list"`
  187 +}
  188 +
  189 +type SystemCommentItem struct {
  190 + Id int64 `json:"id"` //评论id
  191 + ArticleTitle string `json:"articleTitle"` //文章标题
  192 + FromUserId int64 `json:"fromUserId"` //填写评论的人
  193 + FromUser CommentAuthor `json:"fromUser"` //填写评论的人
  194 + CreatedAt int64 `json:"createdAt"` //评论的填写时间
  195 + Content string `json:"content"` //评论的内容
  196 + Show int `json:"show"` //是否展示 [1显示] [2不显示]
  197 + CountReply int `json:"countReplay"` //回复数量
  198 + CountUserLove int `json:"countUserLove"` //用户点赞数量
  199 + CountAdminLove int `json:"countAdminLove"` //运营点赞数量
  200 +}
  201 +
  202 +type SystemGetCommentRequest struct {
  203 + CompanyId int64 `path:",optional"`
  204 + Id int64 `path:"id"`
  205 +}
  206 +
  207 +type SystemGetCommentResponse struct {
  208 + Id int64 `json:"id"` //评论id
  209 + ArticleTitle string `json:"articleTitle"` //文章标题
  210 + FromUserId int64 `json:"fromUserId"` //填写评论的人
  211 + FromUser CommentAuthor `json:"fromUser"` //填写评论的人
  212 + CreatedAt int64 `json:"createdAt"` //评论的填写时间
  213 + SectionContent string `json:"sectionContent"` //引用的段落内容
  214 + Content string `json:"content"` // 评论的内容
  215 + Show int `json:"show"` //是否展示 [1显示] [2不显示]
  216 + CountReply int `json:"countReplay"` //回复数量
  217 + CountUserLove int `json:"countUserLove"` //用户点赞数量
  218 + CountAdminLove int `json:"countAdminLove"` //运营点赞数量
  219 +}
  220 +
  221 +type SystemEditCommentShowRequest struct {
  222 + CompanyId int64 `json:",optional"`
  223 + Id []int64 `json:"id"`
  224 + Show int `json:"show"`
  225 +}
  226 +
  227 +type SystemEditCommentShowResponse struct {
  228 + Id []int64 `json:"id"`
  229 +}
  230 +
171 type MessageSystemRequest struct { 231 type MessageSystemRequest struct {
172 Page int `json:"page"` 232 Page int `json:"page"`
173 Size int `json:"size"` 233 Size int `json:"size"`
@@ -70,3 +70,16 @@ func (m *ArticleComment) CachePrimaryKeyFunc() string { @@ -70,3 +70,16 @@ func (m *ArticleComment) CachePrimaryKeyFunc() string {
70 } 70 }
71 return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key") 71 return fmt.Sprintf("%v:cache:%v:primarykey:%v", domain.ProjectName, m.TableName(), "key")
72 } 72 }
  73 +
  74 +type ArticleCommentShow struct {
  75 + ArticleTitle string //文章标题
  76 + Id int64 //评论id
  77 + FromUserId int64 // 评论填写人的id
  78 + FromUser domain.UserSimple `gorm:"type:jsonb;serializer:json"`
  79 + Content string // 评论内容
  80 + CountReply int // 回复数量
  81 + CountUserLove int // 用户点赞数量
  82 + CountAdminLove int // 运营点赞数量
  83 + Show int // 评论的展示状态(0显示、1不显示)
  84 + CreatedAt int64 // 评论的创建时间
  85 +}
@@ -325,6 +325,88 @@ func (repository *ArticleCommentRepository) Top5Comment(ctx context.Context, con @@ -325,6 +325,88 @@ func (repository *ArticleCommentRepository) Top5Comment(ctx context.Context, con
325 } 325 }
326 return dms, nil 326 return dms, nil
327 } 327 }
  328 +
  329 +func (repository *ArticleCommentRepository) CustomSearchBy(ctx context.Context, conn transaction.Conn, companyId int64, page int, size int,
  330 + articleTitle string, contentLike string, fromUserName string, show int) (int, []*domain.ArticleCommentShow, error) {
  331 + sqlStr := `select
  332 +article.title as article_title ,
  333 +article_comment.id ,
  334 +article_comment.from_user_id ,
  335 +article_comment.from_user,
  336 +article_comment."content" ,
  337 +article_comment.created_at ,
  338 +article_comment.count_reply ,
  339 +article_comment.count_user_love ,
  340 +article_comment.count_admin_love ,
  341 +article_comment."show"
  342 +from article_comment
  343 +join article on article.id = article_comment.article_id
  344 +where 1=1 `
  345 + if size <= 0 {
  346 + size = 20
  347 + }
  348 + if page <= 0 {
  349 + page = 1
  350 + }
  351 +
  352 + where := ""
  353 + condition := []interface{}{}
  354 +
  355 + if len(articleTitle) > 0 {
  356 + where += ` and article.title like ? `
  357 + condition = append(condition, "%"+articleTitle+"%")
  358 + }
  359 + if len(contentLike) > 0 {
  360 + where += ` and article_comment."content" like ? `
  361 + condition = append(condition, "%"+contentLike+"%")
  362 + }
  363 +
  364 + if len(fromUserName) > 0 {
  365 + where += ` and article_comment.from_user ->>'name' like ? `
  366 + condition = append(condition, "%"+fromUserName+"%")
  367 + }
  368 + if show > 0 {
  369 + where += ` and article_comment."show" =? `
  370 + condition = append(condition, show)
  371 + }
  372 +
  373 + countSql := sqlStr + where
  374 +
  375 + var cnt int
  376 + db := conn.DB()
  377 + result := db.Raw(countSql, condition...).Scan(&cnt)
  378 + if result.Error != nil {
  379 + return 0, nil, result.Error
  380 + }
  381 +
  382 + dataSql := sqlStr + where + ` order by article_comment.id desc limit ? offset ? `
  383 + condition = append(condition, size, (page-1)*size)
  384 +
  385 + ms := []models.ArticleCommentShow{}
  386 + result = db.Raw(dataSql, condition...).Scan(&ms)
  387 + if result.Error != nil {
  388 + return 0, nil, result.Error
  389 + }
  390 +
  391 + d := []*domain.ArticleCommentShow{}
  392 + for _, val := range ms {
  393 + d = append(d, &domain.ArticleCommentShow{
  394 + ArticleTitle: val.ArticleTitle,
  395 + Id: val.Id,
  396 + FromUserId: val.FromUserId,
  397 + FromUser: val.FromUser,
  398 + Content: val.Content,
  399 + CountReply: val.CountReply,
  400 + CountUserLove: val.CountUserLove,
  401 + CountAdminLove: val.CountAdminLove,
  402 + Show: val.Show,
  403 + CreatedAt: val.CreatedAt,
  404 + })
  405 + }
  406 + return cnt, d, nil
  407 +
  408 +}
  409 +
328 func NewArticleCommentRepository(cache *cache.CachedRepository) domain.ArticleCommentRepository { 410 func NewArticleCommentRepository(cache *cache.CachedRepository) domain.ArticleCommentRepository {
329 return &ArticleCommentRepository{CachedRepository: cache} 411 return &ArticleCommentRepository{CachedRepository: cache}
330 } 412 }
@@ -312,7 +312,7 @@ func (repository *ArticleRepository) CustomSearchBy(ctx context.Context, conn tr @@ -312,7 +312,7 @@ func (repository *ArticleRepository) CustomSearchBy(ctx context.Context, conn tr
312 tx = tx.Where("article_and_tag.tag_id=?", tagId) 312 tx = tx.Where("article_and_tag.tag_id=?", tagId)
313 } else if len(tagCategory) > 0 { 313 } else if len(tagCategory) > 0 {
314 tx = tx.Joins(`join article_and_tag on article.id = article_and_tag.article_id`) 314 tx = tx.Joins(`join article_and_tag on article.id = article_and_tag.article_id`)
315 - tx = tx.Where(`article_and_tag.tag_id =any(select article_tag.id from article_tag where category =%s )`, tagCategory) 315 + tx = tx.Where(`article_and_tag.tag_id =any(select article_tag.id from article_tag where category =? )`, tagCategory)
316 } 316 }
317 if len(titleLike) > 0 { 317 if len(titleLike) > 0 {
318 tx = tx.Where("article.title like ?", "%"+titleLike+"%") 318 tx = tx.Where("article.title like ?", "%"+titleLike+"%")
@@ -50,6 +50,19 @@ func (show CommentShow) Named() string { @@ -50,6 +50,19 @@ func (show CommentShow) Named() string {
50 return "" 50 return ""
51 } 51 }
52 52
  53 +type ArticleCommentShow struct {
  54 + ArticleTitle string // 文章标题
  55 + Id int64 // 评论id
  56 + FromUserId int64 // 评论填写人的id
  57 + FromUser UserSimple // 评论填写人
  58 + Content string // 评论内容
  59 + CountReply int // 回复数量
  60 + CountUserLove int // 用户点赞数量
  61 + CountAdminLove int // 运营点赞数量
  62 + Show int // 评论的展示状态(0显示、1不显示)
  63 + CreatedAt int64 // 评论的创建时间
  64 +}
  65 +
53 type ArticleCommentRepository interface { 66 type ArticleCommentRepository interface {
54 Insert(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error) 67 Insert(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error)
55 Update(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error) 68 Update(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error)
@@ -60,4 +73,7 @@ type ArticleCommentRepository interface { @@ -60,4 +73,7 @@ type ArticleCommentRepository interface {
60 IncreaseCountUserLove(ctx context.Context, conn transaction.Conn, incr int, commentId int64) error //点赞数量变动 73 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 // 评论回复数量变动 74 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) 75 Top5Comment(ctx context.Context, conn transaction.Conn, companyId int64, articleId int64) ([]*ArticleComment, error)
  76 + // 特定的查询
  77 + CustomSearchBy(ctx context.Context, conn transaction.Conn, companyId int64, page int, size int,
  78 + articleTitle string, contentLike string, fromUserName string, show int) (int, []*ArticleCommentShow, error)
63 } 79 }