作者 庄敏学

标签下拉列表|文章内评论列表

@@ -723,6 +723,24 @@ @@ -723,6 +723,24 @@
723 ] 723 ]
724 } 724 }
725 }, 725 },
  726 + "v1/mini/show/home_page": {
  727 + "get": {
  728 + "summary": "小程序首页数据展示",
  729 + "operationId": "MiniShowHomePage",
  730 + "responses": {
  731 + "200": {
  732 + "description": "A successful response.",
  733 + "schema": {
  734 + "$ref": "#/definitions/MiniHomePageRespose"
  735 + }
  736 + }
  737 + },
  738 + "requestBody": {},
  739 + "tags": [
  740 + "article"
  741 + ]
  742 + }
  743 + },
726 "v1/mini/user/apply-join-company": { 744 "v1/mini/user/apply-join-company": {
727 "post": { 745 "post": {
728 "summary": "用户申请加入公司", 746 "summary": "用户申请加入公司",
@@ -1361,6 +1379,34 @@ @@ -1361,6 +1379,34 @@
1361 ] 1379 ]
1362 } 1380 }
1363 }, 1381 },
  1382 + "v1/system/article_comment/search": {
  1383 + "post": {
  1384 + "summary": "管理后台文章评论列表",
  1385 + "operationId": "SystemArticleCommentSearch",
  1386 + "responses": {
  1387 + "200": {
  1388 + "description": "A successful response.",
  1389 + "schema": {
  1390 + "$ref": "#/definitions/SystemArticleCommentSearchResponse"
  1391 + }
  1392 + }
  1393 + },
  1394 + "parameters": [
  1395 + {
  1396 + "name": "body",
  1397 + "in": "body",
  1398 + "required": true,
  1399 + "schema": {
  1400 + "$ref": "#/definitions/SystemArticleCommentSearchRequest"
  1401 + }
  1402 + }
  1403 + ],
  1404 + "requestBody": {},
  1405 + "tags": [
  1406 + "comment"
  1407 + ]
  1408 + }
  1409 + },
1364 "v1/system/article_comment/search/me": { 1410 "v1/system/article_comment/search/me": {
1365 "post": { 1411 "post": {
1366 "summary": "小程序获取回复@人可选列表", 1412 "summary": "小程序获取回复@人可选列表",
@@ -1443,6 +1489,24 @@ @@ -1443,6 +1489,24 @@
1443 ] 1489 ]
1444 } 1490 }
1445 }, 1491 },
  1492 + "v1/system/article_tag/options": {
  1493 + "get": {
  1494 + "summary": "后台标签下拉列表",
  1495 + "operationId": "Options",
  1496 + "responses": {
  1497 + "200": {
  1498 + "description": "A successful response.",
  1499 + "schema": {
  1500 + "$ref": "#/definitions/TagOptionsResponse"
  1501 + }
  1502 + }
  1503 + },
  1504 + "requestBody": {},
  1505 + "tags": [
  1506 + "tags"
  1507 + ]
  1508 + }
  1509 + },
1446 "v1/system/article_tag/search": { 1510 "v1/system/article_tag/search": {
1447 "post": { 1511 "post": {
1448 "summary": "后台搜索标签", 1512 "summary": "后台搜索标签",
@@ -2308,6 +2372,52 @@ @@ -2308,6 +2372,52 @@
2308 "totalComment" 2372 "totalComment"
2309 ] 2373 ]
2310 }, 2374 },
  2375 + "ArticleTagCount": {
  2376 + "type": "object",
  2377 + "properties": {
  2378 + "tagGroup": {
  2379 + "type": "string",
  2380 + "description": " 标签分组"
  2381 + },
  2382 + "tagId": {
  2383 + "type": "integer",
  2384 + "format": "int64",
  2385 + "description": " 标签id"
  2386 + },
  2387 + "tagImage": {
  2388 + "type": "string",
  2389 + "description": " 对应的图标"
  2390 + },
  2391 + "tagName": {
  2392 + "type": "string",
  2393 + "description": " 标签名称"
  2394 + },
  2395 + "tagRemark": {
  2396 + "type": "string",
  2397 + "description": " 标签备注"
  2398 + },
  2399 + "totalArticle": {
  2400 + "type": "integer",
  2401 + "format": "int32",
  2402 + "description": " 总的文章数量"
  2403 + },
  2404 + "readArticle": {
  2405 + "type": "integer",
  2406 + "format": "int32",
  2407 + "description": " 已读的标签数量"
  2408 + }
  2409 + },
  2410 + "title": "ArticleTagCount",
  2411 + "required": [
  2412 + "tagGroup",
  2413 + "tagId",
  2414 + "tagImage",
  2415 + "tagName",
  2416 + "tagRemark",
  2417 + "totalArticle",
  2418 + "readArticle"
  2419 + ]
  2420 + },
2311 "ArticleTagGroup": { 2421 "ArticleTagGroup": {
2312 "type": "object", 2422 "type": "object",
2313 "properties": { 2423 "properties": {
@@ -4033,6 +4143,35 @@ @@ -4033,6 +4143,35 @@
4033 }, 4143 },
4034 "title": "MiniGetArticleCommentResponse" 4144 "title": "MiniGetArticleCommentResponse"
4035 }, 4145 },
  4146 + "MiniHomePageRequest": {
  4147 + "type": "object",
  4148 + "properties": {
  4149 + "": {
  4150 + "type": "integer",
  4151 + "format": "int64"
  4152 + },
  4153 + "": {
  4154 + "type": "integer",
  4155 + "format": "int64"
  4156 + }
  4157 + },
  4158 + "title": "MiniHomePageRequest"
  4159 + },
  4160 + "MiniHomePageRespose": {
  4161 + "type": "object",
  4162 + "properties": {
  4163 + "tags": {
  4164 + "type": "array",
  4165 + "items": {
  4166 + "$ref": "#/definitions/ArticleTagCount"
  4167 + }
  4168 + }
  4169 + },
  4170 + "title": "MiniHomePageRespose",
  4171 + "required": [
  4172 + "tags"
  4173 + ]
  4174 + },
4036 "MiniListArticleCommentRequest": { 4175 "MiniListArticleCommentRequest": {
4037 "type": "object", 4176 "type": "object",
4038 "properties": { 4177 "properties": {
@@ -4330,21 +4469,6 @@ @@ -4330,21 +4469,6 @@
4330 "$ref": "#/definitions/UserItem", 4469 "$ref": "#/definitions/UserItem",
4331 "description": " 用户信息" 4470 "description": " 用户信息"
4332 }, 4471 },
4333 - "totalArticle": {  
4334 - "type": "integer",  
4335 - "format": "int64",  
4336 - "description": " 累计信息发布"  
4337 - },  
4338 - "totalLoved": {  
4339 - "type": "integer",  
4340 - "format": "int64",  
4341 - "description": " 累计收到的赞"  
4342 - },  
4343 - "totalAccepted": {  
4344 - "type": "integer",  
4345 - "format": "int64",  
4346 - "description": " 累计被采纳"  
4347 - },  
4348 "accounts": { 4472 "accounts": {
4349 "type": "array", 4473 "type": "array",
4350 "items": { 4474 "items": {
@@ -4363,9 +4487,6 @@ @@ -4363,9 +4487,6 @@
4363 "title": "MiniUserInfoResponse", 4487 "title": "MiniUserInfoResponse",
4364 "required": [ 4488 "required": [
4365 "user", 4489 "user",
4366 - "totalArticle",  
4367 - "totalLoved",  
4368 - "totalAccepted",  
4369 "accounts", 4490 "accounts",
4370 "auths" 4491 "auths"
4371 ] 4492 ]
@@ -4891,6 +5012,87 @@ @@ -4891,6 +5012,87 @@
4891 "value" 5012 "value"
4892 ] 5013 ]
4893 }, 5014 },
  5015 + "SystemArticleCommentSearchItem": {
  5016 + "type": "object",
  5017 + "properties": {
  5018 + "id": {
  5019 + "type": "integer",
  5020 + "format": "int64"
  5021 + },
  5022 + "pid": {
  5023 + "type": "integer",
  5024 + "format": "int64"
  5025 + },
  5026 + "topId": {
  5027 + "type": "integer",
  5028 + "format": "int64"
  5029 + },
  5030 + "articleId": {
  5031 + "type": "integer",
  5032 + "format": "int64",
  5033 + "description": " 文章id"
  5034 + },
  5035 + "sectionId": {
  5036 + "type": "integer",
  5037 + "format": "int64",
  5038 + "description": " 段落id"
  5039 + },
  5040 + "fromUserId": {
  5041 + "type": "integer",
  5042 + "format": "int64",
  5043 + "description": " 填写评论的人"
  5044 + },
  5045 + "fromUser": {
  5046 + "$ref": "#/definitions/CommentAuthor",
  5047 + "description": " 填写评论的人"
  5048 + },
  5049 + "countReply": {
  5050 + "type": "integer",
  5051 + "format": "int32",
  5052 + "description": " 回复数量"
  5053 + },
  5054 + "countUserLove": {
  5055 + "type": "integer",
  5056 + "format": "int32",
  5057 + "description": " 用户点赞数量"
  5058 + },
  5059 + "countAdminLove": {
  5060 + "type": "integer",
  5061 + "format": "int32",
  5062 + "description": " 运营点赞数量"
  5063 + },
  5064 + "createdAt": {
  5065 + "type": "integer",
  5066 + "format": "int64",
  5067 + "description": " 评论时间"
  5068 + },
  5069 + "content": {
  5070 + "type": "string",
  5071 + "description": " 评论的内容"
  5072 + },
  5073 + "show": {
  5074 + "type": "integer",
  5075 + "format": "int32",
  5076 + "description": " 显示状态"
  5077 + }
  5078 + },
  5079 + "title": "SystemArticleCommentSearchItem",
  5080 + "required": [
  5081 + "id",
  5082 + "pid",
  5083 + "topId",
  5084 + "articleId",
  5085 + "sectionId",
  5086 + "fromUserId",
  5087 + "fromUser",
  5088 + "countReply",
  5089 + "countUserLove",
  5090 + "countAdminLove",
  5091 + "createdAt",
  5092 + "content",
  5093 + "show"
  5094 + ]
  5095 + },
4894 "SystemArticleCommentSearchMeRequest": { 5096 "SystemArticleCommentSearchMeRequest": {
4895 "type": "object", 5097 "type": "object",
4896 "properties": { 5098 "properties": {
@@ -4945,6 +5147,76 @@ @@ -4945,6 +5147,76 @@
4945 "total" 5147 "total"
4946 ] 5148 ]
4947 }, 5149 },
  5150 + "SystemArticleCommentSearchRequest": {
  5151 + "type": "object",
  5152 + "properties": {
  5153 + "page": {
  5154 + "type": "integer",
  5155 + "format": "int32"
  5156 + },
  5157 + "size": {
  5158 + "type": "integer",
  5159 + "format": "int32"
  5160 + },
  5161 + "articleId": {
  5162 + "type": "integer",
  5163 + "format": "int64",
  5164 + "description": " 文章ID"
  5165 + },
  5166 + "topId": {
  5167 + "type": "integer",
  5168 + "format": "int64",
  5169 + "description": " 文章顶层ID"
  5170 + },
  5171 + "authorId": {
  5172 + "type": "integer",
  5173 + "format": "int64",
  5174 + "description": " 用户"
  5175 + },
  5176 + "show": {
  5177 + "type": "integer",
  5178 + "format": "int32",
  5179 + "description": " 显示状态"
  5180 + },
  5181 + "beginTime": {
  5182 + "type": "integer",
  5183 + "format": "int64",
  5184 + "description": " 开始时间"
  5185 + },
  5186 + "endTime": {
  5187 + "type": "integer",
  5188 + "format": "int64",
  5189 + "description": " 结束时间"
  5190 + }
  5191 + },
  5192 + "title": "SystemArticleCommentSearchRequest",
  5193 + "required": [
  5194 + "page",
  5195 + "size",
  5196 + "articleId",
  5197 + "topId"
  5198 + ]
  5199 + },
  5200 + "SystemArticleCommentSearchResponse": {
  5201 + "type": "object",
  5202 + "properties": {
  5203 + "total": {
  5204 + "type": "integer",
  5205 + "format": "int64"
  5206 + },
  5207 + "list": {
  5208 + "type": "array",
  5209 + "items": {
  5210 + "$ref": "#/definitions/SystemArticleCommentSearchItem"
  5211 + }
  5212 + }
  5213 + },
  5214 + "title": "SystemArticleCommentSearchResponse",
  5215 + "required": [
  5216 + "total",
  5217 + "list"
  5218 + ]
  5219 + },
4948 "SystemArticleGetHistoryRequest": { 5220 "SystemArticleGetHistoryRequest": {
4949 "type": "object", 5221 "type": "object",
4950 "properties": { 5222 "properties": {
@@ -5578,14 +5850,10 @@ @@ -5578,14 +5850,10 @@
5578 }, 5850 },
5579 "description": " 评论人" 5851 "description": " 评论人"
5580 }, 5852 },
5581 - "location": {  
5582 - "$ref": "#/definitions/Location",  
5583 - "description": " 坐标"  
5584 - },  
5585 "targetUser": { 5853 "targetUser": {
5586 "type": "integer", 5854 "type": "integer",
5587 "format": "int32", 5855 "format": "int32",
5588 - "description": "分发方式 [0分发给所有人、1分发给指定的人]" 5856 + "description": " 分发方式 [0分发给所有人、1分发给指定的人]"
5589 }, 5857 },
5590 "tags": { 5858 "tags": {
5591 "type": "array", 5859 "type": "array",
@@ -5594,6 +5862,10 @@ @@ -5594,6 +5862,10 @@
5594 "format": "int64" 5862 "format": "int64"
5595 }, 5863 },
5596 "description": " 标签" 5864 "description": " 标签"
  5865 + },
  5866 + "AccessToken": {
  5867 + "type": "string",
  5868 + "description": " 授权token"
5597 } 5869 }
5598 }, 5870 },
5599 "title": "SystemArticleUpdateRequest", 5871 "title": "SystemArticleUpdateRequest",
@@ -5605,9 +5877,9 @@ @@ -5605,9 +5877,9 @@
5605 "images", 5877 "images",
5606 "whoRead", 5878 "whoRead",
5607 "whoReview", 5879 "whoReview",
5608 - "location",  
5609 "targetUser", 5880 "targetUser",
5610 - "tags" 5881 + "tags",
  5882 + "x-mmm-accesstoken"
5611 ] 5883 ]
5612 }, 5884 },
5613 "SystemArticleUpdateResponse": { 5885 "SystemArticleUpdateResponse": {
@@ -5643,7 +5915,7 @@ @@ -5643,7 +5915,7 @@
5643 "format": "int32", 5915 "format": "int32",
5644 "description": "点赞数量" 5916 "description": "点赞数量"
5645 }, 5917 },
5646 - "CountComment": { 5918 + "countComment": {
5647 "type": "integer", 5919 "type": "integer",
5648 "format": "int32", 5920 "format": "int32",
5649 "description": "评论数量" 5921 "description": "评论数量"
@@ -5675,7 +5947,7 @@ @@ -5675,7 +5947,7 @@
5675 "images", 5947 "images",
5676 "createdAt", 5948 "createdAt",
5677 "countLove", 5949 "countLove",
5678 - "CountComment", 5950 + "countComment",
5679 "show", 5951 "show",
5680 "tags", 5952 "tags",
5681 "targetUser" 5953 "targetUser"
@@ -6368,6 +6640,71 @@ @@ -6368,6 +6640,71 @@
6368 "list" 6640 "list"
6369 ] 6641 ]
6370 }, 6642 },
  6643 + "TagOptionValue": {
  6644 + "type": "object",
  6645 + "properties": {
  6646 + "label": {
  6647 + "type": "string",
  6648 + "description": " 名称"
  6649 + },
  6650 + "value": {
  6651 + "type": "integer",
  6652 + "format": "int64",
  6653 + "description": " 标签ID"
  6654 + }
  6655 + },
  6656 + "title": "TagOptionValue",
  6657 + "required": [
  6658 + "label",
  6659 + "value"
  6660 + ]
  6661 + },
  6662 + "TagOptions": {
  6663 + "type": "object",
  6664 + "properties": {
  6665 + "label": {
  6666 + "type": "string",
  6667 + "description": " 分组名称"
  6668 + },
  6669 + "options": {
  6670 + "type": "array",
  6671 + "items": {
  6672 + "$ref": "#/definitions/TagOptionValue"
  6673 + }
  6674 + }
  6675 + },
  6676 + "title": "TagOptions",
  6677 + "required": [
  6678 + "label",
  6679 + "options"
  6680 + ]
  6681 + },
  6682 + "TagOptionsRequest": {
  6683 + "type": "object",
  6684 + "properties": {
  6685 + "": {
  6686 + "type": "integer",
  6687 + "format": "int64",
  6688 + "description": " 公司ID"
  6689 + }
  6690 + },
  6691 + "title": "TagOptionsRequest"
  6692 + },
  6693 + "TagOptionsResponse": {
  6694 + "type": "object",
  6695 + "properties": {
  6696 + "options": {
  6697 + "type": "array",
  6698 + "items": {
  6699 + "$ref": "#/definitions/TagOptions"
  6700 + }
  6701 + }
  6702 + },
  6703 + "title": "TagOptionsResponse",
  6704 + "required": [
  6705 + "options"
  6706 + ]
  6707 + },
6371 "UserFollowItem": { 6708 "UserFollowItem": {
6372 "type": "object", 6709 "type": "object",
6373 "properties": { 6710 "properties": {
@@ -32,7 +32,11 @@ service Core { @@ -32,7 +32,11 @@ service Core {
32 32
33 @doc "后台搜索标签" 33 @doc "后台搜索标签"
34 @handler SearchTag 34 @handler SearchTag
35 - post/article_tag/search (TagListRequest) returns (TagListResponse) 35 + post /article_tag/search (TagListRequest) returns (TagListResponse)
  36 +
  37 + @doc "后台标签下拉列表"
  38 + @handler Options
  39 + get /article_tag/options (TagOptionsRequest) returns (TagOptionsResponse)
36 } 40 }
37 41
38 // 创建标签 42 // 创建标签
@@ -118,3 +122,21 @@ type ( @@ -118,3 +122,21 @@ type (
118 Id int64 `json:"id"` 122 Id int64 `json:"id"`
119 } 123 }
120 ) 124 )
  125 +
  126 +//标签下拉列表
  127 +type (
  128 + TagOptionsRequest {
  129 + CompanyId int64 `path:",optional"` // 公司ID
  130 + }
  131 + TagOptionsResponse {
  132 + Options []TagOptions `json:"options"`
  133 + }
  134 + TagOptions {
  135 + Label string `json:"label"` // 分组名称
  136 + Options []TagOptionValue `json:"options"`
  137 + }
  138 + TagOptionValue {
  139 + Label string `json:"label"` // 名称
  140 + Value int64 `json:"value"` // 标签ID
  141 + }
  142 +)
@@ -387,6 +387,9 @@ type ( @@ -387,6 +387,9 @@ type (
387 Tags []string `json:"tags"` //标签 387 Tags []string `json:"tags"` //标签
388 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 388 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
389 } 389 }
  390 +)
  391 +// 管理后台编辑文章
  392 +type (
390 //编辑 393 //编辑
391 SystemArticleUpdateRequest { 394 SystemArticleUpdateRequest {
392 Id int64 `json:"id"` 395 Id int64 `json:"id"`
@@ -397,7 +400,6 @@ type ( @@ -397,7 +400,6 @@ type (
397 Images []string `json:"images"` // 图片 400 Images []string `json:"images"` // 图片
398 WhoRead []int64 `json:"whoRead"` // 谁可以看 401 WhoRead []int64 `json:"whoRead"` // 谁可以看
399 WhoReview []int64 `json:"whoReview"` // 评论人 402 WhoReview []int64 `json:"whoReview"` // 评论人
400 - Location Location `json:"location"` // 坐标  
401 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 403 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
402 Tags []int64 `json:"tags"` // 标签 404 Tags []int64 `json:"tags"` // 标签
403 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 405 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
@@ -414,6 +416,9 @@ type ( @@ -414,6 +416,9 @@ type (
414 Tags []int64 `json:"tags"` //标签 416 Tags []int64 `json:"tags"` //标签
415 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 417 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
416 } 418 }
  419 +)
  420 +// 管理后台编辑历史列表
  421 +type (
417 //历史 422 //历史
418 SystemArticleHistoryRequest { 423 SystemArticleHistoryRequest {
419 ArticleId int64 `json:"articleId"` //文章ID 424 ArticleId int64 `json:"articleId"` //文章ID
@@ -433,6 +438,9 @@ type ( @@ -433,6 +438,9 @@ type (
433 Action string `json:"action"` //编辑类型 438 Action string `json:"action"` //编辑类型
434 UpdatedAt int64 `json:"updatedAt"` //编辑时间 439 UpdatedAt int64 `json:"updatedAt"` //编辑时间
435 } 440 }
  441 +)
  442 +// 管理后台历史记录详情
  443 +type (
436 SystemArticleGetHistoryRequest { 444 SystemArticleGetHistoryRequest {
437 Id int64 `path:"id"` //id 445 Id int64 `path:"id"` //id
438 CompanyId int64 `path:",optional"` 446 CompanyId int64 `path:",optional"`
@@ -452,6 +460,9 @@ type ( @@ -452,6 +460,9 @@ type (
452 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 460 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
453 Tags []int64 `json:"tags"` // 标签 461 Tags []int64 `json:"tags"` // 标签
454 } 462 }
  463 +)
  464 +// 管理后台文章恢复
  465 +type (
455 SystemArticleRestoreRequest { 466 SystemArticleRestoreRequest {
456 Id int64 `json:"id"` //ID 467 Id int64 `json:"id"` //ID
457 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 468 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
@@ -15,7 +15,6 @@ info( @@ -15,7 +15,6 @@ info(
15 jwt: MiniAuth 15 jwt: MiniAuth
16 ) 16 )
17 service Core { 17 service Core {
18 -  
19 @doc "小程序填写文章的评论" 18 @doc "小程序填写文章的评论"
20 @handler MiniCreateArticleComment 19 @handler MiniCreateArticleComment
21 post /article_comment (MiniCreateArticleCommentRequest) returns (MiniCreateArticleCommentResponse) 20 post /article_comment (MiniCreateArticleCommentRequest) returns (MiniCreateArticleCommentResponse)
@@ -52,6 +51,11 @@ service Core { @@ -52,6 +51,11 @@ service Core {
52 @doc "小程序获取回复@人可选列表" 51 @doc "小程序获取回复@人可选列表"
53 @handler SystemArticleCommentSearchMe 52 @handler SystemArticleCommentSearchMe
54 post /article_comment/search/me (SystemArticleCommentSearchMeRequest) returns (SystemArticleCommentSearchMeResponse) 53 post /article_comment/search/me (SystemArticleCommentSearchMeRequest) returns (SystemArticleCommentSearchMeResponse)
  54 +
  55 + @doc "管理后台文章评论列表"
  56 + @handler SystemArticleCommentSearch
  57 + post /article_comment/search (SystemArticleCommentSearchRequest) returns (SystemArticleCommentSearchResponse)
  58 +
55 } 59 }
56 60
57 //评论的填写人 61 //评论的填写人
@@ -204,3 +208,35 @@ type ( @@ -204,3 +208,35 @@ type (
204 Total int64 `json:"total"` 208 Total int64 `json:"total"`
205 } 209 }
206 ) 210 )
  211 +// 文章里的评论列表
  212 +type (
  213 + SystemArticleCommentSearchRequest {
  214 + Page int `json:"page"`
  215 + Size int `json:"size"`
  216 + ArticleId int64 `json:"articleId"` // 文章ID
  217 + TopId int64 `json:"topId"` // 文章顶层ID
  218 + AuthorId int64 `json:"authorId,optional"` // 用户
  219 + Show int `json:"show,optional"` // 显示状态
  220 + BeginTime int64 `json:"beginTime,optional"` // 开始时间
  221 + EndTime int64 `json:"endTime,optional"` // 结束时间
  222 + }
  223 + SystemArticleCommentSearchResponse {
  224 + Total int64 `json:"total"`
  225 + List []SystemArticleCommentSearchItem `json:"list"`
  226 + }
  227 + SystemArticleCommentSearchItem {
  228 + Id int64 `json:"id"`
  229 + Pid int64 `json:"pid"`
  230 + TopId int64 `json:"topId"`
  231 + ArtitcleId int64 `json:"articleId"` // 文章id
  232 + SectionId int64 `json:"sectionId"` // 段落id
  233 + FromUserId int64 `json:"fromUserId"` // 填写评论的人
  234 + FromUser CommentAuthor `json:"fromUser"` // 填写评论的人
  235 + CountReply int `json:"countReply"` // 回复数量
  236 + CountUserLove int `json:"countUserLove"` // 用户点赞数量
  237 + CountAdminLove int `json:"countAdminLove"` // 运营点赞数量
  238 + CreatedAt int64 `json:"createdAt"` // 评论时间
  239 + Content string `json:"content"` // 评论的内容
  240 + Show int `json:"show"` // 显示状态
  241 + }
  242 +)
  1 +package comment
  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/comment"
  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 SystemArticleCommentSearchHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  14 + return func(w http.ResponseWriter, r *http.Request) {
  15 + var req types.SystemArticleCommentSearchRequest
  16 + if err := httpx.Parse(r, &req); err != nil {
  17 + httpx.ErrorCtx(r.Context(), w, err)
  18 + return
  19 + }
  20 +
  21 + l := comment.NewSystemArticleCommentSearchLogic(r.Context(), svcCtx)
  22 + resp, err := l.SystemArticleCommentSearch(&req)
  23 + result.HttpResult(r, w, resp, err)
  24 + }
  25 +}
@@ -64,6 +64,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { @@ -64,6 +64,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
64 Path: "/article_comment/search/me", 64 Path: "/article_comment/search/me",
65 Handler: comment.SystemArticleCommentSearchMeHandler(serverCtx), 65 Handler: comment.SystemArticleCommentSearchMeHandler(serverCtx),
66 }, 66 },
  67 + {
  68 + Method: http.MethodPost,
  69 + Path: "/article_comment/search",
  70 + Handler: comment.SystemArticleCommentSearchHandler(serverCtx),
  71 + },
67 }..., 72 }...,
68 ), 73 ),
69 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret), 74 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret),
@@ -114,6 +119,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { @@ -114,6 +119,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
114 Path: "/article_tag/search", 119 Path: "/article_tag/search",
115 Handler: tags.SearchTagHandler(serverCtx), 120 Handler: tags.SearchTagHandler(serverCtx),
116 }, 121 },
  122 + {
  123 + Method: http.MethodGet,
  124 + Path: "/article_tag/options",
  125 + Handler: tags.OptionsHandler(serverCtx),
  126 + },
117 }, 127 },
118 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret), 128 rest.WithJwt(serverCtx.Config.SystemAuth.AccessSecret),
119 rest.WithPrefix("/v1/system"), 129 rest.WithPrefix("/v1/system"),
  1 +package tags
  2 +
  3 +import (
  4 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata"
  5 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/result"
  6 + "net/http"
  7 +
  8 + "github.com/zeromicro/go-zero/rest/httpx"
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/logic/tags"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  11 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  12 +)
  13 +
  14 +func OptionsHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
  15 + return func(w http.ResponseWriter, r *http.Request) {
  16 + var req types.TagOptionsRequest
  17 + if err := httpx.Parse(r, &req); err != nil {
  18 + httpx.ErrorCtx(r.Context(), w, err)
  19 + return
  20 + }
  21 +
  22 + l := tags.NewOptionsLogic(r.Context(), svcCtx)
  23 + token := contextdata.GetUserTokenFromCtx(r.Context())
  24 + req.CompanyId = token.CompanyId
  25 + resp, err := l.Options(&req)
  26 + result.HttpResult(r, w, resp, err)
  27 + }
  28 +}
@@ -8,6 +8,7 @@ import ( @@ -8,6 +8,7 @@ import (
8 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/gateway/authlib" 8 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/gateway/authlib"
9 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata" 9 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/contextdata"
10 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr" 10 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"
  11 + "strings"
11 12
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/svc"
13 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types" 14 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
@@ -45,29 +46,98 @@ func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleU @@ -45,29 +46,98 @@ func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleU
45 Height: 0, 46 Height: 0,
46 }) 47 })
47 } 48 }
  49 + //检查文章可被哪些人查看
  50 + whoRead := []int64{}
  51 + if len(req.WhoRead) > 0 {
  52 + whoRead = lo.Uniq(req.WhoRead)
  53 + var u *domain.User
  54 + for _, val := range whoRead {
  55 + u, err = l.svcCtx.UserRepository.FindOne(l.ctx, conn, val)
  56 + if err != nil {
  57 + return nil, xerr.NewErrMsgErr("文章可查看人设置错误", err)
  58 + }
  59 + if u.CompanyId != article.CompanyId {
  60 + return nil, xerr.NewErrMsg("文章可查看人设置错误")
  61 + }
  62 + }
  63 + }
  64 + //检查文章可被哪些人评论
  65 + whoReview := []int64{}
  66 + if len(req.WhoReview) > 0 {
  67 + whoReview = lo.Uniq(req.WhoReview)
  68 + }
  69 + //有指定可查看人的情况
  70 + if len(whoRead) > 0 {
  71 + if len(whoReview) > 0 {
  72 + // 检查 whoRead 是否 完全包含 whoReview
  73 + ok := lo.Every(whoRead, whoReview)
  74 + if !ok {
  75 + return nil, xerr.NewErrMsg("文章可评论人设置错误")
  76 + }
  77 + }
  78 + if len(whoReview) == 0 {
  79 + //有指定可查看人 ,但未指定可评论人
  80 + return nil, xerr.NewErrMsg("文章可评论人设置错误")
  81 + }
  82 + }
  83 + //没有指定可查看人的情况
  84 + if len(whoRead) == 0 {
  85 + if len(whoReview) > 0 {
  86 + // 未指定可查看人(全员可看),有指定可评论人,
  87 + var u *domain.User
  88 + for _, val := range whoReview {
  89 + u, err = l.svcCtx.UserRepository.FindOne(l.ctx, conn, val)
  90 + if err != nil {
  91 + return nil, xerr.NewErrMsgErr("文章可评论人设置错误", err)
  92 + }
  93 + if u.CompanyId != article.CompanyId {
  94 + return nil, xerr.NewErrMsg("文章可评论人设置错误")
  95 + }
  96 + }
  97 + }
  98 + }
  99 + //验证tag
  100 + if len(req.Tags) > 0 {
  101 + req.Tags = lo.Uniq(req.Tags)
  102 + for _, value := range req.Tags {
  103 + t, err := l.svcCtx.ArticleTagRepository.FindOne(l.ctx, conn, value)
  104 + if err != nil {
  105 + return nil, xerr.NewErrMsgErr("文章标签设置错误", err)
  106 + }
  107 + if t.CompanyId != article.CompanyId {
  108 + return nil, xerr.NewErrMsgErr("文章标签设置错误", err)
  109 + }
  110 + }
  111 + }
48 article.Title = req.Title 112 article.Title = req.Title
49 article.Version = article.Version + 1 113 article.Version = article.Version + 1
50 article.Images = images 114 article.Images = images
51 - article.WhoRead = req.WhoRead  
52 - article.WhoReview = req.WhoReview 115 + article.WhoRead = whoRead
  116 + article.WhoReview = whoReview
53 article.TargetUser = domain.ArticleTarget(req.TargetUser) 117 article.TargetUser = domain.ArticleTarget(req.TargetUser)
54 - article.Location = domain.Location{  
55 - Longitude: req.Location.Longitude,  
56 - Latitude: req.Location.Latitude,  
57 - Descript: req.Location.Descript,  
58 - }  
59 article.Tags = req.Tags 118 article.Tags = req.Tags
60 //文章内容 119 //文章内容
61 articleSections := []domain.ArticleSection{} 120 articleSections := []domain.ArticleSection{}
  121 + sortBy := 1
62 lo.ForEach(req.Section, func(item types.ArticleSection, index int) { 122 lo.ForEach(req.Section, func(item types.ArticleSection, index int) {
63 - articleSections = append(articleSections, domain.ArticleSection{  
64 - Id: item.Id, 123 + strList := strings.Split(item.Content, "\n")
  124 + for key, value := range strList {
  125 + if value == "" {
  126 + continue
  127 + }
  128 + section := domain.ArticleSection{
65 CompanyId: article.CompanyId, 129 CompanyId: article.CompanyId,
66 Version: article.Version, 130 Version: article.Version,
67 ArticleId: article.Id, 131 ArticleId: article.Id,
68 - Content: item.Content,  
69 - SortBy: index + 1,  
70 - }) 132 + Content: value,
  133 + SortBy: sortBy,
  134 + }
  135 + if key == 0 {
  136 + section.Id = item.Id
  137 + }
  138 + articleSections = append(articleSections, section)
  139 + sortBy++
  140 + }
71 }) 141 })
72 //设置内容概要 142 //设置内容概要
73 if len(req.Section) > 0 { 143 if len(req.Section) > 0 {
  1 +package comment
  2 +
  3 +import (
  4 + "context"
  5 + "github.com/samber/lo"
  6 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
  7 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"
  8 +
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  11 +
  12 + "github.com/zeromicro/go-zero/core/logx"
  13 +)
  14 +
  15 +type SystemArticleCommentSearchLogic struct {
  16 + logx.Logger
  17 + ctx context.Context
  18 + svcCtx *svc.ServiceContext
  19 +}
  20 +
  21 +func NewSystemArticleCommentSearchLogic(ctx context.Context, svcCtx *svc.ServiceContext) *SystemArticleCommentSearchLogic {
  22 + return &SystemArticleCommentSearchLogic{
  23 + Logger: logx.WithContext(ctx),
  24 + ctx: ctx,
  25 + svcCtx: svcCtx,
  26 + }
  27 +}
  28 +
  29 +func (l *SystemArticleCommentSearchLogic) SystemArticleCommentSearch(req *types.SystemArticleCommentSearchRequest) (resp *types.SystemArticleCommentSearchResponse, err error) {
  30 + var conn = l.svcCtx.DefaultDBConn()
  31 + queryOptions := domain.NewQueryOptions().
  32 + WithOffsetLimit(req.Page, req.Size).
  33 + WithKV("articleId", req.ArticleId).
  34 + WithKV("topId", req.TopId).
  35 + WithKV("fromUserId", req.AuthorId).
  36 + WithKV("beginCreatedAt", req.BeginTime).
  37 + WithKV("endCreatedAt", req.EndTime)
  38 + total, comments, err := l.svcCtx.ArticleCommentRepository.Find(l.ctx, conn, queryOptions)
  39 + if err != nil {
  40 + return nil, xerr.NewErrMsgErr("获取文章评论失败", err)
  41 + }
  42 + resp = &types.SystemArticleCommentSearchResponse{
  43 + Total: total,
  44 + List: make([]types.SystemArticleCommentSearchItem, 0),
  45 + }
  46 + lo.ForEach(comments, func(item *domain.ArticleComment, index int) {
  47 + resp.List = append(resp.List, types.SystemArticleCommentSearchItem{
  48 + Id: item.Id,
  49 + Pid: item.Pid,
  50 + TopId: item.TopId,
  51 + ArtitcleId: item.ArticleId,
  52 + SectionId: item.SectionId,
  53 + FromUserId: item.FromUserId,
  54 + FromUser: types.CommentAuthor{
  55 + Id: item.FromUser.Id,
  56 + Name: item.FromUser.Name,
  57 + Avatar: item.FromUser.Avatar,
  58 + Company: item.FromUser.Company,
  59 + Position: item.FromUser.Position,
  60 + },
  61 + CountReply: item.CountReply,
  62 + CountUserLove: item.CountUserLove,
  63 + CountAdminLove: item.CountAdminLove,
  64 + CreatedAt: item.CreatedAt,
  65 + Content: item.Content,
  66 + Show: int(item.Show),
  67 + })
  68 + })
  69 + return
  70 +}
  1 +package tags
  2 +
  3 +import (
  4 + "context"
  5 + "github.com/samber/lo"
  6 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
  7 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/pkg/xerr"
  8 +
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/svc"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/api/internal/types"
  11 +
  12 + "github.com/zeromicro/go-zero/core/logx"
  13 +)
  14 +
  15 +type OptionsLogic struct {
  16 + logx.Logger
  17 + ctx context.Context
  18 + svcCtx *svc.ServiceContext
  19 +}
  20 +
  21 +func NewOptionsLogic(ctx context.Context, svcCtx *svc.ServiceContext) *OptionsLogic {
  22 + return &OptionsLogic{
  23 + Logger: logx.WithContext(ctx),
  24 + ctx: ctx,
  25 + svcCtx: svcCtx,
  26 + }
  27 +}
  28 +
  29 +func (l *OptionsLogic) Options(req *types.TagOptionsRequest) (resp *types.TagOptionsResponse, err error) {
  30 + var conn = l.svcCtx.DefaultDBConn()
  31 + queryOption := domain.NewQueryOptions().WithFindOnly()
  32 + _, tagList, err := l.svcCtx.ArticleTagRepository.Find(l.ctx, conn, req.CompanyId, queryOption)
  33 + if err != nil {
  34 + return nil, xerr.NewErrMsgErr("获取标签列表失败", err)
  35 + }
  36 + var group []string
  37 + options := make(map[string][]types.TagOptionValue)
  38 + lo.ForEach(tagList, func(tag *domain.ArticleTag, index int) {
  39 + if _, ok := options[tag.Category]; !ok {
  40 + options[tag.Category] = make([]types.TagOptionValue, 0)
  41 + group = append(group, tag.Category)
  42 + }
  43 + options[tag.Category] = append(options[tag.Category], types.TagOptionValue{
  44 + Label: tag.Name,
  45 + Value: tag.Id,
  46 + })
  47 + })
  48 + resp = &types.TagOptionsResponse{Options: []types.TagOptions{}}
  49 + for _, value := range group {
  50 + ops := []types.TagOptionValue{}
  51 + if _, ok := options[value]; ok {
  52 + ops = options[value]
  53 + }
  54 + resp.Options = append(resp.Options, types.TagOptions{
  55 + Label: value,
  56 + Options: ops,
  57 + })
  58 + }
  59 + return
  60 +}
@@ -136,6 +136,38 @@ type SystemArticleCommentSearchMeResponse struct { @@ -136,6 +136,38 @@ type SystemArticleCommentSearchMeResponse struct {
136 Total int64 `json:"total"` 136 Total int64 `json:"total"`
137 } 137 }
138 138
  139 +type SystemArticleCommentSearchRequest struct {
  140 + Page int `json:"page"`
  141 + Size int `json:"size"`
  142 + ArticleId int64 `json:"articleId"` // 文章ID
  143 + TopId int64 `json:"topId"` // 文章顶层ID
  144 + AuthorId int64 `json:"authorId,optional"` // 用户
  145 + Show int `json:"show,optional"` // 显示状态
  146 + BeginTime int64 `json:"beginTime,optional"` // 开始时间
  147 + EndTime int64 `json:"endTime,optional"` // 结束时间
  148 +}
  149 +
  150 +type SystemArticleCommentSearchResponse struct {
  151 + Total int64 `json:"total"`
  152 + List []SystemArticleCommentSearchItem `json:"list"`
  153 +}
  154 +
  155 +type SystemArticleCommentSearchItem struct {
  156 + Id int64 `json:"id"`
  157 + Pid int64 `json:"pid"`
  158 + TopId int64 `json:"topId"`
  159 + ArtitcleId int64 `json:"articleId"` // 文章id
  160 + SectionId int64 `json:"sectionId"` // 段落id
  161 + FromUserId int64 `json:"fromUserId"` // 填写评论的人
  162 + FromUser CommentAuthor `json:"fromUser"` // 填写评论的人
  163 + CountReply int `json:"countReply"` // 回复数量
  164 + CountUserLove int `json:"countUserLove"` // 用户点赞数量
  165 + CountAdminLove int `json:"countAdminLove"` // 运营点赞数量
  166 + CreatedAt int64 `json:"createdAt"` // 评论时间
  167 + Content string `json:"content"` // 评论的内容
  168 + Show int `json:"show"` // 显示状态
  169 +}
  170 +
139 type MessageSystemRequest struct { 171 type MessageSystemRequest struct {
140 Page int `json:"page"` 172 Page int `json:"page"`
141 Size int `json:"size"` 173 Size int `json:"size"`
@@ -274,6 +306,24 @@ type TagDeleteResponse struct { @@ -274,6 +306,24 @@ type TagDeleteResponse struct {
274 Id int64 `json:"id"` 306 Id int64 `json:"id"`
275 } 307 }
276 308
  309 +type TagOptionsRequest struct {
  310 + CompanyId int64 `path:",optional"` // 公司ID
  311 +}
  312 +
  313 +type TagOptionsResponse struct {
  314 + Options []TagOptions `json:"options"`
  315 +}
  316 +
  317 +type TagOptions struct {
  318 + Label string `json:"label"` // 分组名称
  319 + Options []TagOptionValue `json:"options"`
  320 +}
  321 +
  322 +type TagOptionValue struct {
  323 + Label string `json:"label"` // 名称
  324 + Value int64 `json:"value"` // 标签ID
  325 +}
  326 +
277 type MiniUserLoginRequest struct { 327 type MiniUserLoginRequest struct {
278 LoginType string `json:"loginType"` // 登录类型 wechat-login whchat-phone-login phone-password-login phone-smscode-login 328 LoginType string `json:"loginType"` // 登录类型 wechat-login whchat-phone-login phone-password-login phone-smscode-login
279 WechatAuthCode string `json:"wechatAuthcode,optional"` // 微信登录 授权码 329 WechatAuthCode string `json:"wechatAuthcode,optional"` // 微信登录 授权码
@@ -928,7 +978,6 @@ type SystemArticleUpdateRequest struct { @@ -928,7 +978,6 @@ type SystemArticleUpdateRequest struct {
928 Images []string `json:"images"` // 图片 978 Images []string `json:"images"` // 图片
929 WhoRead []int64 `json:"whoRead"` // 谁可以看 979 WhoRead []int64 `json:"whoRead"` // 谁可以看
930 WhoReview []int64 `json:"whoReview"` // 评论人 980 WhoReview []int64 `json:"whoReview"` // 评论人
931 - Location Location `json:"location"` // 坐标  
932 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 981 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
933 Tags []int64 `json:"tags"` // 标签 982 Tags []int64 `json:"tags"` // 标签
934 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 983 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
@@ -96,7 +96,6 @@ func (repository *ArticleSectionRepository) DeleteBy(ctx context.Context, conn t @@ -96,7 +96,6 @@ func (repository *ArticleSectionRepository) DeleteBy(ctx context.Context, conn t
96 m = &models.ArticleSection{} 96 m = &models.ArticleSection{}
97 ) 97 )
98 queryFunc := func() (interface{}, error) { 98 queryFunc := func() (interface{}, error) {
99 - tx = tx.Where("id = ?", m.Id)  
100 if v, ok := queryOptions["articleId"]; ok { 99 if v, ok := queryOptions["articleId"]; ok {
101 tx = tx.Where("article_id = ?", v) 100 tx = tx.Where("article_id = ?", v)
102 } 101 }
@@ -141,7 +140,7 @@ func (repository *ArticleSectionRepository) Find(ctx context.Context, conn trans @@ -141,7 +140,7 @@ func (repository *ArticleSectionRepository) Find(ctx context.Context, conn trans
141 total int64 140 total int64
142 ) 141 )
143 queryFunc := func() (interface{}, error) { 142 queryFunc := func() (interface{}, error) {
144 - tx = tx.Model(&ms).Order("id desc") 143 + tx = tx.Model(&ms).Order("sort_by")
145 144
146 if v, ok := queryOptions["articleId"]; ok { 145 if v, ok := queryOptions["articleId"]; ok {
147 tx = tx.Where("article_id = ?", v) 146 tx = tx.Where("article_id = ?", v)