作者 tangxvhui

Merge branch 'dev-tangxvhui' into dev

@@ -8,6 +8,30 @@ info( @@ -8,6 +8,30 @@ info(
8 version: "v1" 8 version: "v1"
9 ) 9 )
10 10
  11 +// 小程序接口
  12 +@server(
  13 + prefix: v1/mini
  14 + group: article
  15 + jwt: MiniAuth
  16 +)
  17 +service Core {
  18 + @doc "小程序创建发布内容"
  19 + @handler MiniCreateArticle
  20 + post /article (MiniArticleCreateRequest) returns (MiniArticleCreateResponse)
  21 + @doc "小程序获取我发布的文章"
  22 + @handler MiniArticleSearchMe
  23 + post /article/search/me (MiniArticleSearchMeRequest) returns (MiniArticleSearchMeResponse)
  24 + @doc "小程序获取文章内容详情"
  25 + @handler MiniGetArticle
  26 + get /article/:id (MiniArticleGetRequest) returns (MiniArticleGetResponse)
  27 + @doc "小程序获取文章的点赞人员列表"
  28 + @handler MiniUserLikeArticle
  29 + post /article/user_like/list (MiniUserLikeArticleRequest) returns (MiniUserLikeArticleResponse)
  30 + @doc "小程序人员操作点赞文章/评论"
  31 + @handler MiniSetUserLike
  32 + post /article/user_like/set (MiniSetUserLikeRequset) returns (MiniSetUserLikeResponse)
  33 +}
  34 +
11 // 坐标地点描述 35 // 坐标地点描述
12 type Location { 36 type Location {
13 Longitude float64 `json:"longitude,optional"` //经度 37 Longitude float64 `json:"longitude,optional"` //经度
@@ -96,20 +120,38 @@ type ( @@ -96,20 +120,38 @@ type (
96 } 120 }
97 ) 121 )
98 122
99 -// 小程序接口  
100 -@server(  
101 - prefix: v1/mini  
102 - group: article  
103 - jwt: MiniAuth 123 +//获取列表,文章有哪些人进行了点赞
  124 +type (
  125 + MiniUserLikeArticleRequest {
  126 + ArticleId int64 `json:"articleId"` // 文章id
  127 + CompanyId int64 `json:"-"` //公司id
  128 + Page int `json:"page"` //分页,第几页
  129 + Size int `json:"size"` //分页,每页几条
  130 + }
  131 + MiniUserLikeArticleResponse {
  132 + Total int64 `json:"total"` //总数
  133 + List []WhichUserLikeArticle `json:"list"` //列表
  134 + }
  135 + WhichUserLikeArticle {
  136 + ArticleId int64 `json:"articleId"` // 文章id
  137 + UserId int64 `json:"userId"` // 人员id
  138 + Name string `json:"name"` // 人员名称
  139 + Avatar string `json:"avatar"` // 人员头像
  140 + CreatedAt int64 `json:"createdAt"` // 点赞记录的时间
  141 + }
104 ) 142 )
105 -service Core {  
106 - @doc "小程序创建发布内容"  
107 - @handler MiniCreateArticle  
108 - post /article (MiniArticleCreateRequest) returns (MiniArticleCreateResponse)  
109 - @doc "小程序获取我发布的文章"  
110 - @handler MiniArticleSearchMe  
111 - post /article/search/me (MiniArticleSearchMeRequest) returns (MiniArticleSearchMeResponse)  
112 - @doc "小程序获取文章内容详情"  
113 - @handler MiniGetArticle  
114 - get /article/:id (MiniArticleGetRequest) returns (MiniArticleGetResponse)  
115 -}  
  143 +
  144 +// 人员点赞文章/评论
  145 +type (
  146 + MiniSetUserLikeRequset {
  147 + ArticleId int64 `json:"articleId"` //文章id
  148 + CommentId int64 `json:"commentId"` //评论id
  149 + UserId int64 `json:"-"` //操作人
  150 + Flag int `json:"flag"` //点赞标志 1、点赞 2 、取消点赞
  151 + }
  152 + MiniSetUserLikeResponse {
  153 + ArticleId int64 `json:"articleId"` //文章id
  154 + CommentId int64 `json:"commentId"` //评论id
  155 + Count int `json:"count"` //现有的点赞数量
  156 + }
  157 +)
  1 +package article
  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/article"
  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 +)
  12 +
  13 +func MiniSetUserLikeHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  14 + return func(w http.ResponseWriter, r *http.Request) {
  15 + var req types.MiniSetUserLikeRequset
  16 + if err := httpx.Parse(r, &req); err != nil {
  17 + httpx.ErrorCtx(r.Context(), w, err)
  18 + return
  19 + }
  20 +
  21 + l := article.NewMiniSetUserLikeLogic(r.Context(), svcCtx)
  22 + token := contextdata.GetUserTokenFromCtx(r.Context())
  23 + req.UserId = token.UserId
  24 + resp, err := l.MiniSetUserLike(&req)
  25 + if err != nil {
  26 + httpx.ErrorCtx(r.Context(), w, err)
  27 + } else {
  28 + httpx.OkJsonCtx(r.Context(), w, resp)
  29 + }
  30 + }
  31 +}
  1 +package article
  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/article"
  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 +)
  12 +
  13 +func MiniUserLikeArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  14 + return func(w http.ResponseWriter, r *http.Request) {
  15 + var req types.MiniUserLikeArticleRequest
  16 + if err := httpx.Parse(r, &req); err != nil {
  17 + httpx.ErrorCtx(r.Context(), w, err)
  18 + return
  19 + }
  20 +
  21 + l := article.NewMiniUserLikeArticleLogic(r.Context(), svcCtx)
  22 + token := contextdata.GetUserTokenFromCtx(r.Context())
  23 + req.CompanyId = token.CompanyId
  24 + resp, err := l.MiniUserLikeArticle(&req)
  25 + if err != nil {
  26 + httpx.ErrorCtx(r.Context(), w, err)
  27 + } else {
  28 + httpx.OkJsonCtx(r.Context(), w, resp)
  29 + }
  30 + }
  31 +}
@@ -192,6 +192,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { @@ -192,6 +192,16 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
192 Path: "/article/:id", 192 Path: "/article/:id",
193 Handler: article.MiniGetArticleHandler(serverCtx), 193 Handler: article.MiniGetArticleHandler(serverCtx),
194 }, 194 },
  195 + {
  196 + Method: http.MethodPost,
  197 + Path: "/article/user_like/list",
  198 + Handler: article.MiniUserLikeArticleHandler(serverCtx),
  199 + },
  200 + {
  201 + Method: http.MethodPost,
  202 + Path: "/article/user_like/set",
  203 + Handler: article.MiniSetUserLikeHandler(serverCtx),
  204 + },
195 }, 205 },
196 rest.WithJwt(serverCtx.Config.MiniAuth.AccessSecret), 206 rest.WithJwt(serverCtx.Config.MiniAuth.AccessSecret),
197 rest.WithPrefix("/v1/mini"), 207 rest.WithPrefix("/v1/mini"),
  1 +package article
  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 MiniSetUserLikeLogic struct {
  16 + logx.Logger
  17 + ctx context.Context
  18 + svcCtx *svc.ServiceContext
  19 +}
  20 +
  21 +func NewMiniSetUserLikeLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MiniSetUserLikeLogic {
  22 + return &MiniSetUserLikeLogic{
  23 + Logger: logx.WithContext(ctx),
  24 + ctx: ctx,
  25 + svcCtx: svcCtx,
  26 + }
  27 +}
  28 +
  29 +// 设置点赞操作
  30 +func (l *MiniSetUserLikeLogic) MiniSetUserLike(req *types.MiniSetUserLikeRequset) (resp *types.MiniSetUserLikeResponse, err error) {
  31 + //取消点赞文章
  32 + if req.Flag == 2 && req.CommentId == 0 {
  33 + return l.cancelSetUserLikeArticle(req)
  34 + }
  35 + // 取消点赞评论
  36 + if req.Flag == 2 && req.CommentId > 0 {
  37 + return l.cancelSetUserLikeComment(req)
  38 + }
  39 + // 设置点赞文章
  40 + if req.Flag == 1 && req.CommentId == 0 {
  41 + return l.setUserLikeArticle(req)
  42 + }
  43 + // 设置点赞评论
  44 + if req.Flag == 1 && req.CommentId > 0 {
  45 + return l.setUserLikeComment(req)
  46 + }
  47 +
  48 + return nil, xerr.NewErrMsg("操作失败")
  49 +}
  50 +
  51 +// 取消文章点赞
  52 +func (l *MiniSetUserLikeLogic) cancelSetUserLikeArticle(req *types.MiniSetUserLikeRequset) (resp *types.MiniSetUserLikeResponse, err error) {
  53 + var conn = l.svcCtx.DefaultDBConn()
  54 +
  55 + // 检查id
  56 + userInfo, err := l.svcCtx.UserRepository.FindOne(l.ctx, conn, req.UserId)
  57 + if err != nil {
  58 + //无法确认 文章的id
  59 + return nil, xerr.NewErrMsgErr("无法确认操作人员信息", err)
  60 + }
  61 + articleInfo, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.ArticleId)
  62 + if err != nil {
  63 + //无法确认 文章的id
  64 + return nil, xerr.NewErrMsgErr("取消点赞标识失败", err)
  65 + }
  66 + if userInfo.CompanyId != articleInfo.CompanyId {
  67 + // 公司无法对应
  68 + return nil, xerr.NewErrMsg("没有操作权限")
  69 + }
  70 + queryOption := domain.NewQueryOptions().
  71 + WithFindOnly().
  72 + MustWithKV("articleId", req.ArticleId).
  73 + MustWithKV("commentId", req.CommentId).
  74 + MustWithKV("userId", req.UserId)
  75 + _, flagList, err := l.svcCtx.UserLoveFlagRepository.Find(l.ctx, conn, queryOption)
  76 + if err != nil {
  77 + return nil, xerr.NewErrMsgErr("取消点赞标识失败", err)
  78 + }
  79 + if len(flagList) == 0 {
  80 + //没有记录
  81 + resp = &types.MiniSetUserLikeResponse{
  82 + ArticleId: req.ArticleId,
  83 + CommentId: req.CommentId,
  84 + Count: articleInfo.CountLove,
  85 + }
  86 + return resp, nil
  87 + }
  88 + flagInfo := flagList[0]
  89 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error {
  90 + // 去除点赞标识
  91 + _, err = l.svcCtx.UserLoveFlagRepository.Delete(ctx, c, flagInfo)
  92 + if err != nil {
  93 + return err
  94 + }
  95 + // 减少文章的点赞数量
  96 + err = l.svcCtx.ArticleRepository.IncreaseCountLove(ctx, c, -1, articleInfo)
  97 + if err != nil {
  98 + return err
  99 + }
  100 + return nil
  101 + }, true)
  102 + if err != nil {
  103 + return nil, xerr.NewErrMsgErr("取消点赞标识失败", err)
  104 + }
  105 + articleInfo, err = l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.ArticleId)
  106 + if err == nil {
  107 + return nil, xerr.NewErrMsgErr("获取点赞数量失败", err)
  108 + }
  109 + resp = &types.MiniSetUserLikeResponse{
  110 + ArticleId: req.ArticleId,
  111 + CommentId: req.CommentId,
  112 + Count: articleInfo.CountLove,
  113 + }
  114 + return resp, nil
  115 +}
  116 +
  117 +// 取消评论点赞
  118 +func (l *MiniSetUserLikeLogic) cancelSetUserLikeComment(req *types.MiniSetUserLikeRequset) (resp *types.MiniSetUserLikeResponse, err error) {
  119 + var conn = l.svcCtx.DefaultDBConn()
  120 + // 检查id
  121 + userInfo, err := l.svcCtx.UserRepository.FindOne(l.ctx, conn, req.UserId)
  122 + if err != nil {
  123 + //无法确认 文章的id
  124 + return nil, xerr.NewErrMsgErr("无法确认操作人员信息", err)
  125 + }
  126 + articleInfo, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.ArticleId)
  127 + if err != nil {
  128 + //无法确认 文章的id
  129 + return nil, xerr.NewErrMsgErr("取消点赞标识失败", err)
  130 + }
  131 + if userInfo.CompanyId != articleInfo.CompanyId {
  132 + // 文章和人员的公司无法对应
  133 + return nil, xerr.NewErrMsg("没有操作权限")
  134 + }
  135 + commentInfo, err := l.svcCtx.ArticleCommentRepository.FindOne(l.ctx, conn, req.CommentId)
  136 + if err != nil {
  137 + return nil, xerr.NewErrMsgErr("无法确认评论信息", err)
  138 + }
  139 + if commentInfo.ArticleId != articleInfo.Id {
  140 + return nil, xerr.NewErrMsg("评论和文章不能对应")
  141 + }
  142 +
  143 + queryOption := domain.NewQueryOptions().
  144 + WithFindOnly().
  145 + MustWithKV("articleId", req.ArticleId).
  146 + MustWithKV("commentId", req.CommentId).
  147 + MustWithKV("userId", req.UserId)
  148 + _, flagList, err := l.svcCtx.UserLoveFlagRepository.Find(l.ctx, conn, queryOption)
  149 + if err != nil {
  150 + return nil, xerr.NewErrMsgErr("取消点赞标识失败", err)
  151 + }
  152 + if len(flagList) == 0 {
  153 + //没有记录
  154 + resp = &types.MiniSetUserLikeResponse{
  155 + ArticleId: req.ArticleId,
  156 + CommentId: req.CommentId,
  157 + Count: commentInfo.CountUserLove,
  158 + }
  159 + return resp, nil
  160 + }
  161 + flagInfo := flagList[0]
  162 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error {
  163 + // 去除点赞标识
  164 + _, err = l.svcCtx.UserLoveFlagRepository.Delete(ctx, c, flagInfo)
  165 + if err != nil {
  166 + return err
  167 + }
  168 + // 减少评论的点赞数量
  169 + err = l.svcCtx.ArticleCommentRepository.IncreaseCountUserLove(ctx, c, -1, commentInfo)
  170 + if err != nil {
  171 + return err
  172 + }
  173 + return nil
  174 + }, true)
  175 + if err != nil {
  176 + return nil, xerr.NewErrMsgErr("取消点赞标识失败", err)
  177 + }
  178 + commentInfo, err = l.svcCtx.ArticleCommentRepository.FindOne(l.ctx, conn, req.CommentId)
  179 + if err != nil {
  180 + return nil, xerr.NewErrMsgErr("获取评论的点赞数量失败", err)
  181 + }
  182 + resp = &types.MiniSetUserLikeResponse{
  183 + ArticleId: req.ArticleId,
  184 + CommentId: req.CommentId,
  185 + Count: commentInfo.CountUserLove,
  186 + }
  187 + return resp, nil
  188 +}
  189 +
  190 +// 设置文章点赞
  191 +func (l *MiniSetUserLikeLogic) setUserLikeArticle(req *types.MiniSetUserLikeRequset) (resp *types.MiniSetUserLikeResponse, err error) {
  192 + var conn = l.svcCtx.DefaultDBConn()
  193 +
  194 + // 检查id
  195 + userInfo, err := l.svcCtx.UserRepository.FindOne(l.ctx, conn, req.UserId)
  196 + if err != nil {
  197 + //无法确认 文章的id
  198 + return nil, xerr.NewErrMsgErr("无法确认操作人员信息", err)
  199 + }
  200 + articleInfo, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.ArticleId)
  201 + if err != nil {
  202 + //无法确认 文章的id
  203 + return nil, xerr.NewErrMsgErr("设置点赞标识失败", err)
  204 + }
  205 + if userInfo.CompanyId != articleInfo.CompanyId {
  206 + // 公司无法对应
  207 + return nil, xerr.NewErrMsg("没有操作权限")
  208 + }
  209 + queryOption := domain.NewQueryOptions().
  210 + WithFindOnly().
  211 + MustWithKV("articleId", req.ArticleId).
  212 + MustWithKV("commentId", req.CommentId).
  213 + MustWithKV("userId", req.UserId)
  214 + _, flagList, err := l.svcCtx.UserLoveFlagRepository.Find(l.ctx, conn, queryOption)
  215 + if err != nil {
  216 + return nil, xerr.NewErrMsgErr("设置点赞标识失败", err)
  217 + }
  218 + if len(flagList) > 0 {
  219 + //已经有记录
  220 + resp = &types.MiniSetUserLikeResponse{
  221 + ArticleId: req.ArticleId,
  222 + CommentId: req.CommentId,
  223 + Count: articleInfo.CountLove,
  224 + }
  225 + return resp, nil
  226 + }
  227 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error {
  228 + flagInfo := domain.UserLoveFlag{
  229 + Id: 0,
  230 + ArticleId: req.ArticleId,
  231 + CommentId: req.CommentId,
  232 + UserId: req.UserId,
  233 + }
  234 + // 去除点赞标识
  235 + _, err = l.svcCtx.UserLoveFlagRepository.Insert(ctx, c, &flagInfo)
  236 + if err != nil {
  237 + return err
  238 + }
  239 + // 增加文章的点赞数量
  240 + err = l.svcCtx.ArticleRepository.IncreaseCountLove(ctx, c, 1, articleInfo)
  241 + if err != nil {
  242 + return err
  243 + }
  244 + return nil
  245 + }, true)
  246 + if err != nil {
  247 + return nil, xerr.NewErrMsgErr("设置点赞标识失败", err)
  248 + }
  249 + articleInfo, err = l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.ArticleId)
  250 + if err == nil {
  251 + return nil, xerr.NewErrMsgErr("获取点赞数量失败", err)
  252 + }
  253 + resp = &types.MiniSetUserLikeResponse{
  254 + ArticleId: req.ArticleId,
  255 + CommentId: req.CommentId,
  256 + Count: articleInfo.CountLove,
  257 + }
  258 + return resp, nil
  259 +}
  260 +
  261 +// 设置评论点赞
  262 +func (l *MiniSetUserLikeLogic) setUserLikeComment(req *types.MiniSetUserLikeRequset) (resp *types.MiniSetUserLikeResponse, err error) {
  263 + var conn = l.svcCtx.DefaultDBConn()
  264 + // 检查id
  265 + userInfo, err := l.svcCtx.UserRepository.FindOne(l.ctx, conn, req.UserId)
  266 + if err != nil {
  267 + //无法确认 文章的id
  268 + return nil, xerr.NewErrMsgErr("无法确认操作人员信息", err)
  269 + }
  270 + articleInfo, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.ArticleId)
  271 + if err != nil {
  272 + //无法确认 文章的id
  273 + return nil, xerr.NewErrMsgErr("设置点赞标识失败", err)
  274 + }
  275 + if userInfo.CompanyId != articleInfo.CompanyId {
  276 + // 文章和人员的公司无法对应
  277 + return nil, xerr.NewErrMsg("没有操作权限")
  278 + }
  279 + commentInfo, err := l.svcCtx.ArticleCommentRepository.FindOne(l.ctx, conn, req.CommentId)
  280 + if err != nil {
  281 + return nil, xerr.NewErrMsgErr("无法确认评论信息", err)
  282 + }
  283 + if commentInfo.ArticleId != articleInfo.Id {
  284 + return nil, xerr.NewErrMsg("评论和文章不能对应")
  285 + }
  286 +
  287 + queryOption := domain.NewQueryOptions().
  288 + WithFindOnly().
  289 + MustWithKV("articleId", req.ArticleId).
  290 + MustWithKV("commentId", req.CommentId).
  291 + MustWithKV("userId", req.UserId)
  292 + _, flagList, err := l.svcCtx.UserLoveFlagRepository.Find(l.ctx, conn, queryOption)
  293 + if err != nil {
  294 + return nil, xerr.NewErrMsgErr("设置点赞标识失败", err)
  295 + }
  296 + if len(flagList) > 0 {
  297 + //已经有记录
  298 + resp = &types.MiniSetUserLikeResponse{
  299 + ArticleId: req.ArticleId,
  300 + CommentId: req.CommentId,
  301 + Count: commentInfo.CountUserLove,
  302 + }
  303 + return resp, nil
  304 + }
  305 +
  306 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error {
  307 + flagInfo := domain.UserLoveFlag{
  308 + Id: 0,
  309 + ArticleId: req.ArticleId,
  310 + CommentId: req.CommentId,
  311 + UserId: req.UserId,
  312 + }
  313 + // 设置赞标识
  314 + _, err = l.svcCtx.UserLoveFlagRepository.Insert(ctx, c, &flagInfo)
  315 + if err != nil {
  316 + return err
  317 + }
  318 + // 增加评论的点赞数量
  319 + err = l.svcCtx.ArticleCommentRepository.IncreaseCountUserLove(ctx, c, 1, commentInfo)
  320 + if err != nil {
  321 + return err
  322 + }
  323 + return nil
  324 + }, true)
  325 + if err != nil {
  326 + return nil, xerr.NewErrMsgErr("设置点赞标识失败", err)
  327 + }
  328 + commentInfo, err = l.svcCtx.ArticleCommentRepository.FindOne(l.ctx, conn, req.CommentId)
  329 + if err != nil {
  330 + return nil, xerr.NewErrMsgErr("获取评论的点赞数量失败", err)
  331 + }
  332 + resp = &types.MiniSetUserLikeResponse{
  333 + ArticleId: req.ArticleId,
  334 + CommentId: req.CommentId,
  335 + Count: commentInfo.CountUserLove,
  336 + }
  337 + return resp, nil
  338 +}
  1 +package article
  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 MiniUserLikeArticleLogic struct {
  15 + logx.Logger
  16 + ctx context.Context
  17 + svcCtx *svc.ServiceContext
  18 +}
  19 +
  20 +func NewMiniUserLikeArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext) *MiniUserLikeArticleLogic {
  21 + return &MiniUserLikeArticleLogic{
  22 + Logger: logx.WithContext(ctx),
  23 + ctx: ctx,
  24 + svcCtx: svcCtx,
  25 + }
  26 +}
  27 +
  28 +// 获取点赞的人员列表
  29 +func (l *MiniUserLikeArticleLogic) MiniUserLikeArticle(req *types.MiniUserLikeArticleRequest) (resp *types.MiniUserLikeArticleResponse, err error) {
  30 + var conn = l.svcCtx.DefaultDBConn()
  31 + queryOption := domain.NewQueryOptions().
  32 + WithOffsetLimit(req.Page, req.Size).
  33 + MustWithKV("articleId", req.ArticleId).
  34 + MustWithKV("commentId", 0)
  35 + cnt, flagList, err := l.svcCtx.UserLoveFlagRepository.Find(l.ctx, conn, queryOption)
  36 + if err != nil {
  37 + return nil, xerr.NewErrMsgErr("获取人员列表失败", err)
  38 + }
  39 + uidList := []int64{}
  40 + for _, val := range flagList {
  41 + uidList = append(uidList, val.UserId)
  42 + }
  43 + queryOption = domain.NewQueryOptions().
  44 + WithFindOnly().
  45 + MustWithKV("ids", uidList)
  46 +
  47 + // 获取人员列表
  48 + _, userList, err := l.svcCtx.UserRepository.Find(l.ctx, conn, queryOption)
  49 + if err != nil {
  50 + return nil, xerr.NewErrMsgErr("获取人员列表失败", err)
  51 + }
  52 + userMap := map[int64]*domain.User{}
  53 + for i := range userList {
  54 + if userList[i].CompanyId != req.CompanyId {
  55 + return nil, xerr.NewErrMsg("操作失败")
  56 + }
  57 + userMap[userList[i].Id] = userList[i]
  58 + }
  59 + resp = &types.MiniUserLikeArticleResponse{
  60 + Total: cnt,
  61 + List: make([]types.WhichUserLikeArticle, len(flagList)),
  62 + }
  63 + for i, val := range flagList {
  64 + item := types.WhichUserLikeArticle{
  65 + ArticleId: val.ArticleId,
  66 + UserId: val.UserId,
  67 + Name: "[用户已被清除]",
  68 + Avatar: "",
  69 + CreatedAt: val.CreatedAt,
  70 + }
  71 + if u, ok := userMap[val.UserId]; ok {
  72 + item.Name = u.Name
  73 + item.Avatar = u.Avatar
  74 + }
  75 + resp.List[i] = item
  76 + }
  77 + return resp, nil
  78 +}
@@ -349,3 +349,36 @@ type ArticleSearchMe struct { @@ -349,3 +349,36 @@ type ArticleSearchMe struct {
349 CountComment int `json:"CountComment"` //评论数量 349 CountComment int `json:"CountComment"` //评论数量
350 Show int `json:"show"` //是否隐藏 [0显示、1不显示] 350 Show int `json:"show"` //是否隐藏 [0显示、1不显示]
351 } 351 }
  352 +
  353 +type MiniUserLikeArticleRequest struct {
  354 + ArticleId int64 `json:"articleId"` // 文章id
  355 + CompanyId int64 `json:"-"` //公司id
  356 + Page int `json:"page"` //分页,第几页
  357 + Size int `json:"size"` //分页,每页几条
  358 +}
  359 +
  360 +type MiniUserLikeArticleResponse struct {
  361 + Total int64 `json:"total"` //总数
  362 + List []WhichUserLikeArticle `json:"list"` //列表
  363 +}
  364 +
  365 +type WhichUserLikeArticle struct {
  366 + ArticleId int64 `json:"articleId"` // 文章id
  367 + UserId int64 `json:"userId"` // 人员id
  368 + Name string `json:"name"` // 人员名称
  369 + Avatar string `json:"avatar"` // 人员头像
  370 + CreatedAt int64 `json:"createdAt"` // 点赞记录的时间
  371 +}
  372 +
  373 +type MiniSetUserLikeRequset struct {
  374 + ArticleId int64 `json:"articleId"` //文章id
  375 + CommentId int64 `json:"commentId"` //评论id
  376 + UserId int64 `json:"-"` //操作人
  377 + Flag int `json:"flag"` //点赞标志 1、点赞 2 、取消点赞
  378 +}
  379 +
  380 +type MiniSetUserLikeResponse struct {
  381 + ArticleId int64 `json:"articleId"` //文章id
  382 + CommentId int64 `json:"commentId"` //评论id
  383 + Count int `json:"count"` //现有的点赞数量
  384 +}
@@ -194,6 +194,11 @@ func (repository *ArticleCommentRepository) DomainModelToModel(from *domain.Arti @@ -194,6 +194,11 @@ func (repository *ArticleCommentRepository) DomainModelToModel(from *domain.Arti
194 return to, nil 194 return to, nil
195 } 195 }
196 196
  197 +// TODO 点赞数量变动
  198 +func (repository *ArticleCommentRepository) IncreaseCountUserLove(ctx context.Context, conn transaction.Conn, incr int, dm *domain.ArticleComment) error {
  199 + return nil
  200 +}
  201 +
197 func NewArticleCommentRepository(cache *cache.CachedRepository) domain.ArticleCommentRepository { 202 func NewArticleCommentRepository(cache *cache.CachedRepository) domain.ArticleCommentRepository {
198 return &ArticleCommentRepository{CachedRepository: cache} 203 return &ArticleCommentRepository{CachedRepository: cache}
199 } 204 }
@@ -198,6 +198,24 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (* @@ -198,6 +198,24 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (*
198 return to, nil 198 return to, nil
199 } 199 }
200 200
  201 +// 点赞数量变动
  202 +func (repository *ArticleRepository) IncreaseCountLove(ctx context.Context, conn transaction.Conn, incr int, article *domain.Article) error {
  203 + //
  204 + return nil
  205 +}
  206 +
  207 +// 浏览数量变动
  208 +func (repository *ArticleRepository) IncreaseCountRead(ctx context.Context, conn transaction.Conn, incr int, article *domain.Article) error {
  209 + //
  210 + return nil
  211 +}
  212 +
  213 +// 评论数量变动
  214 +func (repository *ArticleRepository) IncreaseCountComment(ctx context.Context, conn transaction.Conn, incr int, article *domain.Article) error {
  215 + //
  216 + return nil
  217 +}
  218 +
201 func NewArticleRepository(cache *cache.CachedRepository) domain.ArticleRepository { 219 func NewArticleRepository(cache *cache.CachedRepository) domain.ArticleRepository {
202 return &ArticleRepository{CachedRepository: cache} 220 return &ArticleRepository{CachedRepository: cache}
203 } 221 }
@@ -120,6 +120,15 @@ func (repository *UserLoveFlagRepository) Find(ctx context.Context, conn transac @@ -120,6 +120,15 @@ func (repository *UserLoveFlagRepository) Find(ctx context.Context, conn transac
120 ) 120 )
121 queryFunc := func() (interface{}, error) { 121 queryFunc := func() (interface{}, error) {
122 tx = tx.Model(&ms).Order("id desc") 122 tx = tx.Model(&ms).Order("id desc")
  123 + if v, ok := queryOptions["articleId"]; ok {
  124 + tx = tx.Where("article_id=?", v)
  125 + }
  126 + if v, ok := queryOptions["commentId"]; ok {
  127 + tx = tx.Where("comment_id=?", v)
  128 + }
  129 + if v, ok := queryOptions["userId"]; ok {
  130 + tx = tx.Where("user_id=?", v)
  131 + }
123 if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil { 132 if total, tx = transaction.PaginationAndCount(ctx, tx, queryOptions, &ms); tx.Error != nil {
124 return dms, tx.Error 133 return dms, tx.Error
125 } 134 }
@@ -37,6 +37,9 @@ type ArticleRepository interface { @@ -37,6 +37,9 @@ type ArticleRepository interface {
37 UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) 37 UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error)
38 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*Article, error) 38 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*Article, error)
39 Find(ctx context.Context, conn transaction.Conn, companyId int64, queryOptions map[string]interface{}) (int64, []*Article, error) 39 Find(ctx context.Context, conn transaction.Conn, companyId int64, queryOptions map[string]interface{}) (int64, []*Article, error)
  40 + IncreaseCountLove(ctx context.Context, conn transaction.Conn, incr int, dm *Article) error //点赞数量变动
  41 + IncreaseCountComment(ctx context.Context, conn transaction.Conn, incr int, dm *Article) error //评论数量变动
  42 + IncreaseCountRead(ctx context.Context, conn transaction.Conn, incr int, dm *Article) error //浏览数量变动
40 } 43 }
41 44
42 type ArticleTarget int 45 type ArticleTarget int
@@ -46,4 +46,5 @@ type ArticleCommentRepository interface { @@ -46,4 +46,5 @@ type ArticleCommentRepository interface {
46 Delete(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error) 46 Delete(ctx context.Context, conn transaction.Conn, dm *ArticleComment) (*ArticleComment, error)
47 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ArticleComment, error) 47 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ArticleComment, error)
48 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleComment, error) 48 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleComment, error)
  49 + IncreaseCountUserLove(ctx context.Context, conn transaction.Conn, incr int, dm *ArticleComment) error //点赞数量变动
49 } 50 }