作者 庄敏学

文章恢复

@@ -1225,6 +1225,60 @@ @@ -1225,6 +1225,60 @@
1225 ] 1225 ]
1226 } 1226 }
1227 }, 1227 },
  1228 + "v1/system/article/history/{id}": {
  1229 + "get": {
  1230 + "summary": "管理后台帖子历史详情",
  1231 + "operationId": "SystemArticleGetHistory",
  1232 + "responses": {
  1233 + "200": {
  1234 + "description": "A successful response.",
  1235 + "schema": {
  1236 + "$ref": "#/definitions/SystemArticleGetHistoryResponse"
  1237 + }
  1238 + }
  1239 + },
  1240 + "parameters": [
  1241 + {
  1242 + "name": "id",
  1243 + "in": "path",
  1244 + "required": true,
  1245 + "type": "string"
  1246 + }
  1247 + ],
  1248 + "requestBody": {},
  1249 + "tags": [
  1250 + "article"
  1251 + ]
  1252 + }
  1253 + },
  1254 + "v1/system/article/restore": {
  1255 + "post": {
  1256 + "summary": "管理后台文章恢复",
  1257 + "operationId": "SystemArticleRestore",
  1258 + "responses": {
  1259 + "200": {
  1260 + "description": "A successful response.",
  1261 + "schema": {
  1262 + "$ref": "#/definitions/SystemArticleRestoreResponse"
  1263 + }
  1264 + }
  1265 + },
  1266 + "parameters": [
  1267 + {
  1268 + "name": "body",
  1269 + "in": "body",
  1270 + "required": true,
  1271 + "schema": {
  1272 + "$ref": "#/definitions/SystemArticleRestoreRequest"
  1273 + }
  1274 + }
  1275 + ],
  1276 + "requestBody": {},
  1277 + "tags": [
  1278 + "article"
  1279 + ]
  1280 + }
  1281 + },
1228 "v1/system/article/search": { 1282 "v1/system/article/search": {
1229 "post": { 1283 "post": {
1230 "summary": "管理后台获取文章列表", 1284 "summary": "管理后台获取文章列表",
@@ -4891,6 +4945,125 @@ @@ -4891,6 +4945,125 @@
4891 "total" 4945 "total"
4892 ] 4946 ]
4893 }, 4947 },
  4948 + "SystemArticleGetHistoryRequest": {
  4949 + "type": "object",
  4950 + "properties": {
  4951 + "id": {
  4952 + "type": "integer",
  4953 + "format": "int64",
  4954 + "description": "id"
  4955 + },
  4956 + "": {
  4957 + "type": "integer",
  4958 + "format": "int64"
  4959 + }
  4960 + },
  4961 + "title": "SystemArticleGetHistoryRequest",
  4962 + "required": [
  4963 + "id"
  4964 + ]
  4965 + },
  4966 + "SystemArticleGetHistoryResponse": {
  4967 + "type": "object",
  4968 + "properties": {
  4969 + "id": {
  4970 + "type": "integer",
  4971 + "format": "int64",
  4972 + "description": " id"
  4973 + },
  4974 + "articleId": {
  4975 + "type": "integer",
  4976 + "format": "int64",
  4977 + "description": " 文章ID"
  4978 + },
  4979 + "title": {
  4980 + "type": "string",
  4981 + "description": " 标题"
  4982 + },
  4983 + "createdAt": {
  4984 + "type": "integer",
  4985 + "format": "int64",
  4986 + "description": " 文章的发布时间"
  4987 + },
  4988 + "section": {
  4989 + "type": "array",
  4990 + "items": {
  4991 + "$ref": "#/definitions/ArticleSection"
  4992 + },
  4993 + "description": " 文章的文本内容"
  4994 + },
  4995 + "images": {
  4996 + "type": "array",
  4997 + "items": {
  4998 + "type": "string"
  4999 + },
  5000 + "description": " 图片"
  5001 + },
  5002 + "whoRead": {
  5003 + "type": "array",
  5004 + "items": {
  5005 + "type": "integer",
  5006 + "format": "int64"
  5007 + },
  5008 + "description": " 谁可查看"
  5009 + },
  5010 + "whoReadInfo": {
  5011 + "type": "array",
  5012 + "items": {
  5013 + "$ref": "#/definitions/UserShowName"
  5014 + },
  5015 + "description": " 谁可查看"
  5016 + },
  5017 + "whoReview": {
  5018 + "type": "array",
  5019 + "items": {
  5020 + "type": "integer",
  5021 + "format": "int64"
  5022 + },
  5023 + "description": " 谁可评论"
  5024 + },
  5025 + "whoReviewInfo": {
  5026 + "type": "array",
  5027 + "items": {
  5028 + "$ref": "#/definitions/UserShowName"
  5029 + },
  5030 + "description": " 谁可评论"
  5031 + },
  5032 + "location": {
  5033 + "$ref": "#/definitions/Location",
  5034 + "description": " 定位坐标"
  5035 + },
  5036 + "targetUser": {
  5037 + "type": "integer",
  5038 + "format": "int32",
  5039 + "description": " 分发方式 [0分发给所有人、1分发给指定的人]"
  5040 + },
  5041 + "tags": {
  5042 + "type": "array",
  5043 + "items": {
  5044 + "type": "integer",
  5045 + "format": "int64"
  5046 + },
  5047 + "description": " 标签"
  5048 + }
  5049 + },
  5050 + "title": "SystemArticleGetHistoryResponse",
  5051 + "required": [
  5052 + "id",
  5053 + "articleId",
  5054 + "title",
  5055 + "createdAt",
  5056 + "section",
  5057 + "images",
  5058 + "whoRead",
  5059 + "whoReadInfo",
  5060 + "whoReview",
  5061 + "whoReviewInfo",
  5062 + "location",
  5063 + "targetUser",
  5064 + "tags"
  5065 + ]
  5066 + },
4894 "SystemArticleGetRequest": { 5067 "SystemArticleGetRequest": {
4895 "type": "object", 5068 "type": "object",
4896 "properties": { 5069 "properties": {
@@ -5002,6 +5175,13 @@ @@ -5002,6 +5175,13 @@
5002 "type": "integer", 5175 "type": "integer",
5003 "format": "int32", 5176 "format": "int32",
5004 "description": " 评论的展示状态(0显示、1不显示)" 5177 "description": " 评论的展示状态(0显示、1不显示)"
  5178 + },
  5179 + "tags": {
  5180 + "type": "array",
  5181 + "items": {
  5182 + "$ref": "#/definitions/ArticleTagItem"
  5183 + },
  5184 + "description": "标签"
5005 } 5185 }
5006 }, 5186 },
5007 "title": "SystemArticleGetResponse", 5187 "title": "SystemArticleGetResponse",
@@ -5021,7 +5201,8 @@ @@ -5021,7 +5201,8 @@
5021 "countLove", 5201 "countLove",
5022 "countComment", 5202 "countComment",
5023 "countRead", 5203 "countRead",
5024 - "show" 5204 + "show",
  5205 + "tags"
5025 ] 5206 ]
5026 }, 5207 },
5027 "SystemArticleHistory": { 5208 "SystemArticleHistory": {
@@ -5114,6 +5295,45 @@ @@ -5114,6 +5295,45 @@
5114 "list" 5295 "list"
5115 ] 5296 ]
5116 }, 5297 },
  5298 + "SystemArticleRestoreRequest": {
  5299 + "type": "object",
  5300 + "properties": {
  5301 + "id": {
  5302 + "type": "integer",
  5303 + "format": "int64",
  5304 + "description": "ID"
  5305 + },
  5306 + "AccessToken": {
  5307 + "type": "string",
  5308 + "description": " 授权token"
  5309 + }
  5310 + },
  5311 + "title": "SystemArticleRestoreRequest",
  5312 + "required": [
  5313 + "id",
  5314 + "x-mmm-accesstoken"
  5315 + ]
  5316 + },
  5317 + "SystemArticleRestoreResponse": {
  5318 + "type": "object",
  5319 + "properties": {
  5320 + "id": {
  5321 + "type": "integer",
  5322 + "format": "int64",
  5323 + "description": "ID"
  5324 + },
  5325 + "articleId": {
  5326 + "type": "integer",
  5327 + "format": "int64",
  5328 + "description": "文章ID"
  5329 + }
  5330 + },
  5331 + "title": "SystemArticleRestoreResponse",
  5332 + "required": [
  5333 + "id",
  5334 + "articleId"
  5335 + ]
  5336 + },
5117 "SystemArticleSearch": { 5337 "SystemArticleSearch": {
5118 "type": "object", 5338 "type": "object",
5119 "properties": { 5339 "properties": {
@@ -5263,6 +5483,14 @@ @@ -5263,6 +5483,14 @@
5263 "format": "int64", 5483 "format": "int64",
5264 "description": "结束时间" 5484 "description": "结束时间"
5265 }, 5485 },
  5486 + "tags": {
  5487 + "type": "array",
  5488 + "items": {
  5489 + "type": "integer",
  5490 + "format": "int64"
  5491 + },
  5492 + "description": "标签"
  5493 + },
5266 "page": { 5494 "page": {
5267 "type": "integer", 5495 "type": "integer",
5268 "format": "int32", 5496 "format": "int32",
@@ -5358,6 +5586,14 @@ @@ -5358,6 +5586,14 @@
5358 "type": "integer", 5586 "type": "integer",
5359 "format": "int32", 5587 "format": "int32",
5360 "description": "分发方式 [0分发给所有人、1分发给指定的人]" 5588 "description": "分发方式 [0分发给所有人、1分发给指定的人]"
  5589 + },
  5590 + "tags": {
  5591 + "type": "array",
  5592 + "items": {
  5593 + "type": "integer",
  5594 + "format": "int64"
  5595 + },
  5596 + "description": " 标签"
5361 } 5597 }
5362 }, 5598 },
5363 "title": "SystemArticleUpdateRequest", 5599 "title": "SystemArticleUpdateRequest",
@@ -5370,7 +5606,8 @@ @@ -5370,7 +5606,8 @@
5370 "whoRead", 5606 "whoRead",
5371 "whoReview", 5607 "whoReview",
5372 "location", 5608 "location",
5373 - "targetUser" 5609 + "targetUser",
  5610 + "tags"
5374 ] 5611 ]
5375 }, 5612 },
5376 "SystemArticleUpdateResponse": { 5613 "SystemArticleUpdateResponse": {
@@ -5419,7 +5656,8 @@ @@ -5419,7 +5656,8 @@
5419 "tags": { 5656 "tags": {
5420 "type": "array", 5657 "type": "array",
5421 "items": { 5658 "items": {
5422 - "type": "string" 5659 + "type": "integer",
  5660 + "format": "int64"
5423 }, 5661 },
5424 "description": "标签" 5662 "description": "标签"
5425 }, 5663 },
@@ -105,4 +105,7 @@ service Core { @@ -105,4 +105,7 @@ service Core {
105 @handler SystemArticleSearchMe 105 @handler SystemArticleSearchMe
106 post /article/search/me (SystemArticleSearchMeRequest) returns (SystemArticleSearchMeResponse) 106 post /article/search/me (SystemArticleSearchMeRequest) returns (SystemArticleSearchMeResponse)
107 107
  108 + @doc "管理后台文章恢复"
  109 + @handler SystemArticleRestore
  110 + post /article/restore (SystemArticleRestoreRequest) returns (SystemArticleRestoreResponse)
108 } 111 }
@@ -398,8 +398,9 @@ type ( @@ -398,8 +398,9 @@ type (
398 WhoRead []int64 `json:"whoRead"` // 谁可以看 398 WhoRead []int64 `json:"whoRead"` // 谁可以看
399 WhoReview []int64 `json:"whoReview"` // 评论人 399 WhoReview []int64 `json:"whoReview"` // 评论人
400 Location Location `json:"location"` // 坐标 400 Location Location `json:"location"` // 坐标
401 - TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 401 + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
402 Tags []int64 `json:"tags"` // 标签 402 Tags []int64 `json:"tags"` // 标签
  403 + AccessToken string `header:"x-mmm-accesstoken"` // 授权token
403 } 404 }
404 SystemArticleUpdateResponse { 405 SystemArticleUpdateResponse {
405 Id int64 `json:"id"` //id 406 Id int64 `json:"id"` //id
@@ -408,7 +409,7 @@ type ( @@ -408,7 +409,7 @@ type (
408 Images []string `json:"images"` //图片 409 Images []string `json:"images"` //图片
409 CreatedAt int64 `json:"createdAt"` //文章的创建日期 410 CreatedAt int64 `json:"createdAt"` //文章的创建日期
410 CountLove int `json:"countLove"` //点赞数量 411 CountLove int `json:"countLove"` //点赞数量
411 - CountComment int `json:"CountComment"` //评论数量 412 + CountComment int `json:"countComment"` //评论数量
412 Show int `json:"show"` //是否隐藏 [0显示、1不显示] 413 Show int `json:"show"` //是否隐藏 [0显示、1不显示]
413 Tags []int64 `json:"tags"` //标签 414 Tags []int64 `json:"tags"` //标签
414 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 415 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
@@ -440,8 +441,6 @@ type ( @@ -440,8 +441,6 @@ type (
440 Id int64 `json:"id"` // id 441 Id int64 `json:"id"` // id
441 ArticleId int64 `json:"articleId"` // 文章ID 442 ArticleId int64 `json:"articleId"` // 文章ID
442 Title string `json:"title"` // 标题 443 Title string `json:"title"` // 标题
443 - AuthorId int64 `json:"authorId"` // 发布人id  
444 - Author ArticleAuthor `json:"author"` // 发布人  
445 CreatedAt int64 `json:"createdAt"` // 文章的发布时间 444 CreatedAt int64 `json:"createdAt"` // 文章的发布时间
446 Section []ArticleSection `json:"section"` // 文章的文本内容 445 Section []ArticleSection `json:"section"` // 文章的文本内容
447 Images []string `json:"images"` // 图片 446 Images []string `json:"images"` // 图片
@@ -450,10 +449,15 @@ type ( @@ -450,10 +449,15 @@ type (
450 WhoReview []int64 `json:"whoReview"` // 谁可评论 449 WhoReview []int64 `json:"whoReview"` // 谁可评论
451 WhoReviewInfo []UserShowName `json:"whoReviewInfo"` // 谁可评论 450 WhoReviewInfo []UserShowName `json:"whoReviewInfo"` // 谁可评论
452 Location Location `json:"location"` // 定位坐标 451 Location Location `json:"location"` // 定位坐标
453 - CountLove int `json:"countLove"` // 点赞数量  
454 - CountComment int `json:"countComment"` // 评论数量  
455 - CountRead int `json:"countRead"` // 浏览数量  
456 - Show int `json:"show"` // 评论的展示状态(0显示、1不显示)  
457 - TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 452 + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
  453 + Tags []int64 `json:"tags"` // 标签
  454 + }
  455 + SystemArticleRestoreRequest {
  456 + Id int64 `json:"id"` //ID
  457 + AccessToken string `header:"x-mmm-accesstoken"` // 授权token
  458 + }
  459 + SystemArticleRestoreResponse {
  460 + Id int64 `json:"id"` //ID
  461 + ArticleId int64 `json:"articleId"` //文章ID
458 } 462 }
459 ) 463 )
  1 +package article
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result"
  5 + "net/http"
  6 +
  7 + "github.com/zeromicro/go-zero/rest/httpx"
  8 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/article"
  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 +
  13 +func SystemArticleRestoreHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  14 + return func(w http.ResponseWriter, r *http.Request) {
  15 + var req types.SystemArticleRestoreRequest
  16 + if err := httpx.Parse(r, &req); err != nil {
  17 + result.ParamErrorResult(r, w, err)
  18 + return
  19 + }
  20 +
  21 + l := article.NewSystemArticleRestoreLogic(r.Context(), svcCtx)
  22 + resp, err := l.SystemArticleRestore(&req)
  23 + result.HttpResult(r, w, resp, err)
  24 + }
  25 +}
@@ -18,7 +18,7 @@ func SystemUpdateArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { @@ -18,7 +18,7 @@ func SystemUpdateArticleHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
18 return 18 return
19 } 19 }
20 l := article.NewSystemUpdateArticleLogic(r.Context(), svcCtx) 20 l := article.NewSystemUpdateArticleLogic(r.Context(), svcCtx)
21 - resp, err := l.SystemUpdateArticle(&req, r.Header.Get("x-mmm-accesstoken")) 21 + resp, err := l.SystemUpdateArticle(&req)
22 result.HttpResult(r, w, resp, err) 22 result.HttpResult(r, w, resp, err)
23 } 23 }
24 } 24 }
@@ -401,6 +401,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { @@ -401,6 +401,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
401 Path: "/article/search/me", 401 Path: "/article/search/me",
402 Handler: article.SystemArticleSearchMeHandler(serverCtx), 402 Handler: article.SystemArticleSearchMeHandler(serverCtx),
403 }, 403 },
  404 + {
  405 + Method: http.MethodPost,
  406 + Path: "/article/restore",
  407 + Handler: article.SystemArticleRestoreHandler(serverCtx),
  408 + },
404 }, 409 },
405 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret), 410 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret),
406 rest.WithPrefix("/v1/system"), 411 rest.WithPrefix("/v1/system"),
@@ -2,6 +2,9 @@ package article @@ -2,6 +2,9 @@ package article
2 2
3 import ( 3 import (
4 "context" 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/xerr"
5 8
6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc" 9 "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" 10 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
@@ -24,7 +27,67 @@ func NewSystemArticleGetHistoryLogic(ctx context.Context, svcCtx *svc.ServiceCon @@ -24,7 +27,67 @@ func NewSystemArticleGetHistoryLogic(ctx context.Context, svcCtx *svc.ServiceCon
24 } 27 }
25 28
26 func (l *SystemArticleGetHistoryLogic) SystemArticleGetHistory(req *types.SystemArticleGetHistoryRequest) (resp *types.SystemArticleGetHistoryResponse, err error) { 29 func (l *SystemArticleGetHistoryLogic) SystemArticleGetHistory(req *types.SystemArticleGetHistoryRequest) (resp *types.SystemArticleGetHistoryResponse, err error) {
27 - //var conn = l.svcCtx.DefaultDBConn()  
28 - 30 + var conn = l.svcCtx.DefaultDBConn()
  31 + backup, err := l.svcCtx.ArticleBackupRepository.FindOne(l.ctx, conn, req.Id)
  32 + if err != nil {
  33 + return nil, xerr.NewErrMsgErr("获取编辑历史记录失败", err)
  34 + }
  35 + resp = &types.SystemArticleGetHistoryResponse{
  36 + Id: backup.Id,
  37 + ArticleId: backup.ArticleId,
  38 + Title: backup.Title,
  39 + CreatedAt: backup.CreatedAt,
  40 + Section: make([]types.ArticleSection, 0),
  41 + Images: make([]string, 0),
  42 + WhoRead: backup.WhoRead,
  43 + WhoReadInfo: make([]types.UserShowName, 0),
  44 + WhoReview: backup.WhoReview,
  45 + WhoReviewInfo: make([]types.UserShowName, 0),
  46 + Location: types.Location{
  47 + Longitude: backup.Location.Longitude,
  48 + Latitude: backup.Location.Latitude,
  49 + Descript: backup.Location.Descript,
  50 + },
  51 + TargetUser: int(backup.TargetUser),
  52 + Tags: backup.Tags,
  53 + }
  54 + //文章段落内容
  55 + lo.ForEach(backup.Section, func(item domain.ArticleSection, index int) {
  56 + resp.Section = append(resp.Section, types.ArticleSection{
  57 + Id: item.Id,
  58 + Content: item.Content,
  59 + SortBy: item.SortBy,
  60 + TotalComment: item.TotalComment,
  61 + })
  62 + })
  63 + //图片
  64 + lo.ForEach(backup.Images, func(item domain.Image, index int) {
  65 + resp.Images = append(resp.Images, item.Url)
  66 + })
  67 + //用户
  68 + userIds := lo.Union(resp.WhoRead, resp.WhoReview)
  69 + if len(userIds) > 0 {
  70 + _, users, err := l.svcCtx.UserRepository.Find(l.ctx, conn, domain.NewQueryOptions().WithKV("ids", userIds))
  71 + if err != nil {
  72 + return nil, xerr.NewErrMsgErr("获取帖子异常", err)
  73 + }
  74 + userSlices := make(map[int64]types.UserShowName)
  75 + lo.ForEach(users, func(user *domain.User, index int) {
  76 + userSlices[user.Id] = types.UserShowName{
  77 + Id: int(user.Id),
  78 + Name: user.Name,
  79 + }
  80 + })
  81 + lo.ForEach(resp.WhoRead, func(userId int64, index int) {
  82 + if value, ok := userSlices[userId]; ok {
  83 + resp.WhoReadInfo = append(resp.WhoReadInfo, value)
  84 + }
  85 + })
  86 + lo.ForEach(resp.WhoReview, func(userId int64, index int) {
  87 + if value, ok := userSlices[userId]; ok {
  88 + resp.WhoReviewInfo = append(resp.WhoReviewInfo, value)
  89 + }
  90 + })
  91 + }
29 return 92 return
30 } 93 }
  1 +package article
  2 +
  3 +import (
  4 + "context"
  5 + "github.com/samber/lo"
  6 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
  7 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
  8 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/gateway/authlib"
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"
  11 +
  12 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  13 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  14 +
  15 + "github.com/zeromicro/go-zero/core/logx"
  16 +)
  17 +
  18 +type SystemArticleRestoreLogic struct {
  19 + logx.Logger
  20 + ctx context.Context
  21 + svcCtx *svc.ServiceContext
  22 +}
  23 +
  24 +func NewSystemArticleRestoreLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemArticleRestoreLogic {
  25 + return &SystemArticleRestoreLogic{
  26 + Logger: logx.WithContext(ctx),
  27 + ctx: ctx,
  28 + svcCtx: svcCtx,
  29 + }
  30 +}
  31 +
  32 +func (l *SystemArticleRestoreLogic) SystemArticleRestore(req *types.SystemArticleRestoreRequest) (resp *types.SystemArticleRestoreResponse, err error) {
  33 + var conn = l.svcCtx.DefaultDBConn()
  34 + backup, err := l.svcCtx.ArticleBackupRepository.FindOne(l.ctx, conn, req.Id)
  35 + if err != nil {
  36 + return nil, xerr.NewErrMsgErr("获取编辑历史记录失败", err)
  37 + }
  38 + article, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, backup.ArticleId)
  39 + if err != nil {
  40 + return nil, xerr.NewErrMsgErr("获取文章失败", err)
  41 + }
  42 + article.Version = article.Version + 1
  43 + article.Images = backup.Images
  44 + article.Title = backup.Title
  45 + articleSections := make([]domain.ArticleSection, 0)
  46 + lo.ForEach(backup.Section, func(item domain.ArticleSection, index int) {
  47 + articleSections = append(articleSections, domain.ArticleSection{
  48 + Id: item.Id,
  49 + CompanyId: item.CompanyId,
  50 + Version: article.Version,
  51 + ArticleId: article.Id,
  52 + Content: item.Content,
  53 + SortBy: item.SortBy,
  54 + })
  55 + })
  56 + //获取当前用户信息
  57 + userToken := contextdata.GetUserTokenFromCtx(l.ctx)
  58 + userMe, err := l.svcCtx.ApiAuthService.MeInfo(l.ctx, authlib.RequestUserMeQuery{Token: req.AccessToken})
  59 + if err != nil {
  60 + return nil, xerr.NewErrMsgErr("获取当前用户信息失败", err)
  61 + }
  62 + err = transaction.UseTrans(l.ctx, conn.DB(), func(ctx context.Context, c transaction.Conn) error {
  63 + //保存文章
  64 + _, err = l.svcCtx.ArticleRepository.Update(ctx, c, article)
  65 + if err != nil {
  66 + return xerr.NewErrMsgErr("恢复文章版本失败", err)
  67 + }
  68 + //保存段落
  69 + updateSectionIds := []int64{}
  70 + for _, item := range articleSections {
  71 + section, err := l.svcCtx.ArticleSectionRepository.FindOne(ctx, c, item.Id)
  72 + if err == nil && section.Id > 0 {
  73 + section.Content = item.Content
  74 + section.SortBy = item.SortBy
  75 + section.Version = item.Version
  76 + _, err = l.svcCtx.ArticleSectionRepository.Update(ctx, c, section)
  77 + if err != nil {
  78 + return xerr.NewErrMsgErr("恢复文章版本失败", err)
  79 + }
  80 + } else {
  81 + _, err = l.svcCtx.ArticleSectionRepository.Insert(ctx, c, &item)
  82 + if err != nil {
  83 + return xerr.NewErrMsgErr("恢复文章版本失败", err)
  84 + }
  85 + }
  86 + updateSectionIds = append(updateSectionIds, item.Id)
  87 + }
  88 + if len(updateSectionIds) > 0 {
  89 + err = l.svcCtx.ArticleSectionRepository.DeleteBy(ctx, c, domain.NewQueryOptions().WithKV("articleId", article.Id).WithKV("notIds", updateSectionIds))
  90 + if err != nil {
  91 + return xerr.NewErrMsgErr("保存文章内容失败", err)
  92 + }
  93 + }
  94 + //备份数据
  95 + newBackUp := article.MakeBackup(domain.UserSimple{
  96 + Id: userToken.UserId,
  97 + Name: userMe.User.NickName,
  98 + Avatar: userMe.User.Avatar,
  99 + CompanyId: userToken.CompanyId,
  100 + Company: userMe.CurrentCompany.Name,
  101 + }, articleSections)
  102 + newBackUp.Action = "恢复"
  103 + _, err = l.svcCtx.ArticleBackupRepository.Insert(ctx, c, newBackUp)
  104 + if err != nil {
  105 + return xerr.NewErrMsgErr("恢复文章版本失败", err)
  106 + }
  107 + return nil
  108 + }, true)
  109 + resp = &types.SystemArticleRestoreResponse{
  110 + Id: req.Id,
  111 + ArticleId: article.Id,
  112 + }
  113 + return
  114 +}
@@ -29,7 +29,7 @@ func NewSystemUpdateArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext @@ -29,7 +29,7 @@ func NewSystemUpdateArticleLogic(ctx context.Context, svcCtx *svc.ServiceContext
29 } 29 }
30 } 30 }
31 31
32 -func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleUpdateRequest, accessToken string) (resp *types.SystemArticleUpdateResponse, err error) { 32 +func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleUpdateRequest) (resp *types.SystemArticleUpdateResponse, err error) {
33 var conn = l.svcCtx.DefaultDBConn() 33 var conn = l.svcCtx.DefaultDBConn()
34 userToken := contextdata.GetUserTokenFromCtx(l.ctx) 34 userToken := contextdata.GetUserTokenFromCtx(l.ctx)
35 article, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.Id) 35 article, err := l.svcCtx.ArticleRepository.FindOne(l.ctx, conn, req.Id)
@@ -84,7 +84,7 @@ func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleU @@ -84,7 +84,7 @@ func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleU
84 article.Summary = req.Section[0].Content[0:stringIndex] 84 article.Summary = req.Section[0].Content[0:stringIndex]
85 } 85 }
86 //获取当前用户信息 86 //获取当前用户信息
87 - userMe, err := l.svcCtx.ApiAuthService.MeInfo(l.ctx, authlib.RequestUserMeQuery{Token: accessToken}) 87 + userMe, err := l.svcCtx.ApiAuthService.MeInfo(l.ctx, authlib.RequestUserMeQuery{Token: req.AccessToken})
88 if err != nil { 88 if err != nil {
89 return nil, xerr.NewErrMsgErr("获取当前用户信息失败", err) 89 return nil, xerr.NewErrMsgErr("获取当前用户信息失败", err)
90 } 90 }
@@ -932,8 +932,9 @@ type SystemArticleUpdateRequest struct { @@ -932,8 +932,9 @@ type SystemArticleUpdateRequest struct {
932 WhoRead []int64 `json:"whoRead"` // 谁可以看 932 WhoRead []int64 `json:"whoRead"` // 谁可以看
933 WhoReview []int64 `json:"whoReview"` // 评论人 933 WhoReview []int64 `json:"whoReview"` // 评论人
934 Location Location `json:"location"` // 坐标 934 Location Location `json:"location"` // 坐标
935 - TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 935 + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
936 Tags []int64 `json:"tags"` // 标签 936 Tags []int64 `json:"tags"` // 标签
  937 + AccessToken string `header:"x-mmm-accesstoken"` // 授权token
937 } 938 }
938 939
939 type SystemArticleUpdateResponse struct { 940 type SystemArticleUpdateResponse struct {
@@ -943,7 +944,7 @@ type SystemArticleUpdateResponse struct { @@ -943,7 +944,7 @@ type SystemArticleUpdateResponse struct {
943 Images []string `json:"images"` //图片 944 Images []string `json:"images"` //图片
944 CreatedAt int64 `json:"createdAt"` //文章的创建日期 945 CreatedAt int64 `json:"createdAt"` //文章的创建日期
945 CountLove int `json:"countLove"` //点赞数量 946 CountLove int `json:"countLove"` //点赞数量
946 - CountComment int `json:"CountComment"` //评论数量 947 + CountComment int `json:"countComment"` //评论数量
947 Show int `json:"show"` //是否隐藏 [0显示、1不显示] 948 Show int `json:"show"` //是否隐藏 [0显示、1不显示]
948 Tags []int64 `json:"tags"` //标签 949 Tags []int64 `json:"tags"` //标签
949 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 950 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
@@ -979,8 +980,6 @@ type SystemArticleGetHistoryResponse struct { @@ -979,8 +980,6 @@ type SystemArticleGetHistoryResponse struct {
979 Id int64 `json:"id"` // id 980 Id int64 `json:"id"` // id
980 ArticleId int64 `json:"articleId"` // 文章ID 981 ArticleId int64 `json:"articleId"` // 文章ID
981 Title string `json:"title"` // 标题 982 Title string `json:"title"` // 标题
982 - AuthorId int64 `json:"authorId"` // 发布人id  
983 - Author ArticleAuthor `json:"author"` // 发布人  
984 CreatedAt int64 `json:"createdAt"` // 文章的发布时间 983 CreatedAt int64 `json:"createdAt"` // 文章的发布时间
985 Section []ArticleSection `json:"section"` // 文章的文本内容 984 Section []ArticleSection `json:"section"` // 文章的文本内容
986 Images []string `json:"images"` // 图片 985 Images []string `json:"images"` // 图片
@@ -989,11 +988,18 @@ type SystemArticleGetHistoryResponse struct { @@ -989,11 +988,18 @@ type SystemArticleGetHistoryResponse struct {
989 WhoReview []int64 `json:"whoReview"` // 谁可评论 988 WhoReview []int64 `json:"whoReview"` // 谁可评论
990 WhoReviewInfo []UserShowName `json:"whoReviewInfo"` // 谁可评论 989 WhoReviewInfo []UserShowName `json:"whoReviewInfo"` // 谁可评论
991 Location Location `json:"location"` // 定位坐标 990 Location Location `json:"location"` // 定位坐标
992 - CountLove int `json:"countLove"` // 点赞数量  
993 - CountComment int `json:"countComment"` // 评论数量  
994 - CountRead int `json:"countRead"` // 浏览数量  
995 - Show int `json:"show"` // 评论的展示状态(0显示、1不显示)  
996 - TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 991 + TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
  992 + Tags []int64 `json:"tags"` // 标签
  993 +}
  994 +
  995 +type SystemArticleRestoreRequest struct {
  996 + Id int64 `json:"id"` //ID
  997 + AccessToken string `header:"x-mmm-accesstoken"` // 授权token
  998 +}
  999 +
  1000 +type SystemArticleRestoreResponse struct {
  1001 + Id int64 `json:"id"` //ID
  1002 + ArticleId int64 `json:"articleId"` //文章ID
997 } 1003 }
998 1004
999 type RoleGetRequest struct { 1005 type RoleGetRequest struct {