作者 yangfu

Merge branch 'dev' into test

正在显示 24 个修改的文件 包含 114 行增加1 行删除
@@ -77,6 +77,7 @@ type ( @@ -77,6 +77,7 @@ type (
77 MeFollowFlag int `json:"meFollowFlag"` // 当前人员对作者的关注标识 (0 没有关注 1有关注) 77 MeFollowFlag int `json:"meFollowFlag"` // 当前人员对作者的关注标识 (0 没有关注 1有关注)
78 Tags []string `json:"tags"` // 文章的标签 78 Tags []string `json:"tags"` // 文章的标签
79 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 79 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
  80 + Cover string `json:"cover"` //封面
80 } 81 }
81 ArticleSection { 82 ArticleSection {
82 Id int64 `json:"id"` //段落id 83 Id int64 `json:"id"` //段落id
@@ -116,6 +117,7 @@ type ( @@ -116,6 +117,7 @@ type (
116 WhoRead []int64 `json:"whoRead"` //谁可查看 117 WhoRead []int64 `json:"whoRead"` //谁可查看
117 IsDel int `json:"isDel"` //是否删除 1-删除 0-否 118 IsDel int `json:"isDel"` //是否删除 1-删除 0-否
118 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除 119 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除
  120 + Cover string `json:"cover"` //封面
119 } 121 }
120 122
121 SystemArticleSearchMeRequest { 123 SystemArticleSearchMeRequest {
@@ -216,6 +218,7 @@ type ( @@ -216,6 +218,7 @@ type (
216 Location Location `json:"location"` 218 Location Location `json:"location"`
217 Action string `json:"action"` 219 Action string `json:"action"`
218 Show int `json:"show"` 220 Show int `json:"show"`
  221 + Cover string `json:"cover"` //封面
219 } 222 }
220 ) 223 )
221 224
@@ -235,6 +238,7 @@ type ( @@ -235,6 +238,7 @@ type (
235 Location Location `json:"location"` 238 Location Location `json:"location"`
236 Action string `json:"action"` 239 Action string `json:"action"`
237 Show int `json:"show"` 240 Show int `json:"show"`
  241 + Cover string `json:"cover"` //封面
238 } 242 }
239 ) 243 )
240 244
@@ -320,6 +324,7 @@ type ( @@ -320,6 +324,7 @@ type (
320 CreatedAt int64 `json:"createdAt"`// 324 CreatedAt int64 `json:"createdAt"`//
321 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本 325 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本
322 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 326 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  327 + Cover string `json:"cover"` //封面
323 } 328 }
324 ) 329 )
325 330
@@ -342,6 +347,7 @@ type ( @@ -342,6 +347,7 @@ type (
342 Location Location `json:"location"` // 坐标 347 Location Location `json:"location"` // 坐标
343 MatchUrl map[string]string `json:"matchUrl"` // 348 MatchUrl map[string]string `json:"matchUrl"` //
344 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 349 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  350 + Cover string `json:"cover"` //封面
345 } 351 }
346 ) 352 )
347 353
@@ -447,6 +453,7 @@ type ( @@ -447,6 +453,7 @@ type (
447 Show int `json:"show"` // 评论的展示状态(0显示、1不显示) 453 Show int `json:"show"` // 评论的展示状态(0显示、1不显示)
448 Tags []ArticleTagItem `json:"tags"` //标签 454 Tags []ArticleTagItem `json:"tags"` //标签
449 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 455 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
  456 + Cover string `json:"cover"` //封面
450 } 457 }
451 ) 458 )
452 459
@@ -473,6 +480,7 @@ type ( @@ -473,6 +480,7 @@ type (
473 Title string `json:"title"` //标题 480 Title string `json:"title"` //标题
474 AuthorId int64 `json:"authorId"` //发布人ID 481 AuthorId int64 `json:"authorId"` //发布人ID
475 Author string `json:"author"` //发布人 482 Author string `json:"author"` //发布人
  483 + Cover string `json:"cover"` //封面
476 Images []string `json:"images"` //图片 484 Images []string `json:"images"` //图片
477 CreatedAt int64 `json:"createdAt"` //文章的创建日期 485 CreatedAt int64 `json:"createdAt"` //文章的创建日期
478 UpdatedAt int64 `json:"updatedAt"` //文章的编辑日期 486 UpdatedAt int64 `json:"updatedAt"` //文章的编辑日期
@@ -601,6 +609,7 @@ type ( @@ -601,6 +609,7 @@ type (
601 Location Location `json:"location"` // 定位坐标 609 Location Location `json:"location"` // 定位坐标
602 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 610 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
603 Tags []int64 `json:"tags"` // 标签 611 Tags []int64 `json:"tags"` // 标签
  612 + Cover string `json:"cover"` //封面
604 } 613 }
605 ) 614 )
606 // 管理后台文章恢复 615 // 管理后台文章恢复
@@ -666,6 +675,7 @@ type ( @@ -666,6 +675,7 @@ type (
666 Images []string `json:"images"` 675 Images []string `json:"images"`
667 CreatedAt int64 `json:"createdAt"` 676 CreatedAt int64 `json:"createdAt"`
668 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] 677 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读]
  678 + Cover string `json:"cover"` //封面
669 } 679 }
670 ) 680 )
671 681
@@ -755,6 +765,7 @@ type ( @@ -755,6 +765,7 @@ type (
755 AuthorId int64 `json:"authorId"` //发布人id 765 AuthorId int64 `json:"authorId"` //发布人id
756 Author string `json:"author"` //发布人 766 Author string `json:"author"` //发布人
757 UpdatedAt int64 `json:"updatedAt"` //编辑时间 767 UpdatedAt int64 `json:"updatedAt"` //编辑时间
  768 + Cover string `json:"cover"` //封面
758 } 769 }
759 ) 770 )
760 771
@@ -799,6 +810,7 @@ type ( @@ -799,6 +810,7 @@ type (
799 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 810 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本
800 Tags []int64 `json:"tags"` // 标签 811 Tags []int64 `json:"tags"` // 标签
801 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 812 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  813 + Cover string `json:"cover"` //封面
802 } 814 }
803 ) 815 )
804 816
@@ -236,6 +236,7 @@ type( @@ -236,6 +236,7 @@ type(
236 ReadFlag bool `json:"readFlag"` // 已读标识 true:已读 false:未读 236 ReadFlag bool `json:"readFlag"` // 已读标识 true:已读 false:未读
237 Images []string `json:"images"` // 图片列表 237 Images []string `json:"images"` // 图片列表
238 Author UserItem `json:"author"` // 作者 238 Author UserItem `json:"author"` // 作者
  239 + Cover string `json:"cover"` //封面
239 } 240 }
240 MiniUserFollowedSearchRequest{ 241 MiniUserFollowedSearchRequest{
241 Page int `json:"page,optional"` 242 Page int `json:"page,optional"`
@@ -76,6 +76,7 @@ func (l *MiniArticleBackupSearchLogic) MiniArticleBackupSearch(req *types.MiniAr @@ -76,6 +76,7 @@ func (l *MiniArticleBackupSearchLogic) MiniArticleBackupSearch(req *types.MiniAr
76 ChangeField: backupList[i].ChangeField, 76 ChangeField: backupList[i].ChangeField,
77 Action: backupList[i].Action, 77 Action: backupList[i].Action,
78 Show: int(backupList[i].Show), 78 Show: int(backupList[i].Show),
  79 + Cover: backupList[i].GetCover(),
79 } 80 }
80 //根据修改的内容替换展示内容 81 //根据修改的内容替换展示内容
81 changeFiled := []string{} 82 changeFiled := []string{}
@@ -69,6 +69,7 @@ func NewArticle(article *domain.Article) types.ArticleSearchMe { @@ -69,6 +69,7 @@ func NewArticle(article *domain.Article) types.ArticleSearchMe {
69 WhoRead: article.WhoRead, 69 WhoRead: article.WhoRead,
70 IsDel: article.IsDel, 70 IsDel: article.IsDel,
71 DeletedType: article.DeletedType, 71 DeletedType: article.DeletedType,
  72 + Cover: article.GetCover(),
72 } 73 }
73 return articleSearchMe 74 return articleSearchMe
74 } 75 }
@@ -67,6 +67,7 @@ func (l *MiniGetArticleBackupLogic) MiniGetArticleBackup(req *types.MiniGetArtic @@ -67,6 +67,7 @@ func (l *MiniGetArticleBackupLogic) MiniGetArticleBackup(req *types.MiniGetArtic
67 ChangeField: backupInfo.ChangeField, 67 ChangeField: backupInfo.ChangeField,
68 Action: backupInfo.Action, 68 Action: backupInfo.Action,
69 Show: int(backupInfo.Show), 69 Show: int(backupInfo.Show),
  70 + Cover: backupInfo.GetCover(),
70 } 71 }
71 72
72 return 73 return
@@ -70,6 +70,7 @@ func (l *MiniGetArticleDraftMeLogic) MiniGetArticleDraftMe(req *types.MiniArticl @@ -70,6 +70,7 @@ func (l *MiniGetArticleDraftMeLogic) MiniGetArticleDraftMe(req *types.MiniArticl
70 }, 70 },
71 MatchUrl: map[string]string{}, 71 MatchUrl: map[string]string{},
72 Paragraphs: paragraphs, 72 Paragraphs: paragraphs,
  73 + Cover: draftInfo.GetCover(),
73 } 74 }
74 for k, v := range draftInfo.MatchUrl { 75 for k, v := range draftInfo.MatchUrl {
75 resp.MatchUrl[k] = v 76 resp.MatchUrl[k] = v
@@ -147,6 +147,7 @@ func (l *MiniGetArticleLogic) MiniGetArticle(req *types.MiniArticleGetRequest) ( @@ -147,6 +147,7 @@ func (l *MiniGetArticleLogic) MiniGetArticle(req *types.MiniArticleGetRequest) (
147 Tags: tags, 147 Tags: tags,
148 MatchUrl: map[string]string{}, 148 MatchUrl: map[string]string{},
149 Videos: []types.Video{}, 149 Videos: []types.Video{},
  150 + Cover: articleInfo.GetCover(),
150 } 151 }
151 if backupCount > 1 { 152 if backupCount > 1 {
152 resp.Edit = 1 153 resp.Edit = 1
@@ -75,6 +75,7 @@ func (l *MiniSearchArticleDraftMeLogic) MiniSearchArticleDraftMe(req *types.Mini @@ -75,6 +75,7 @@ func (l *MiniSearchArticleDraftMeLogic) MiniSearchArticleDraftMe(req *types.Mini
75 CreatedAt: draftList[i].CreatedAt, 75 CreatedAt: draftList[i].CreatedAt,
76 MatchUrl: draftList[i].MatchUrl, 76 MatchUrl: draftList[i].MatchUrl,
77 Paragraphs: paragraphs, 77 Paragraphs: paragraphs,
  78 + Cover: draftList[i].GetCover(),
78 } 79 }
79 } 80 }
80 return resp, nil 81 return resp, nil
@@ -76,6 +76,7 @@ func (l *MiniSearchArticlePageLogic) MiniSearchArticlePage(req *types.MiniSearch @@ -76,6 +76,7 @@ func (l *MiniSearchArticlePageLogic) MiniSearchArticlePage(req *types.MiniSearch
76 Images: []string{}, 76 Images: []string{},
77 CreatedAt: val.CreatedAt, 77 CreatedAt: val.CreatedAt,
78 MeReadFlag: 0, 78 MeReadFlag: 0,
  79 + Cover: val.GetCover(),
79 } 80 }
80 81
81 if _, ok := readFlag[val.Id]; ok { 82 if _, ok := readFlag[val.Id]; ok {
@@ -54,6 +54,7 @@ func (l *SystemArticleGetHistoryLogic) SystemArticleGetHistory(req *types.System @@ -54,6 +54,7 @@ func (l *SystemArticleGetHistoryLogic) SystemArticleGetHistory(req *types.System
54 TargetUser: int(backup.TargetUser), 54 TargetUser: int(backup.TargetUser),
55 Tags: backup.Tags, 55 Tags: backup.Tags,
56 Videos: make([]types.Video, 0), 56 Videos: make([]types.Video, 0),
  57 + Cover: backup.GetCover(),
57 } 58 }
58 59
59 //文章段落内容 60 //文章段落内容
@@ -81,6 +81,7 @@ func (l *SystemGetArticleDraftLogic) SystemGetArticleDraft(req *types.SystemArti @@ -81,6 +81,7 @@ func (l *SystemGetArticleDraftLogic) SystemGetArticleDraft(req *types.SystemArti
81 WhoReviewInfo: make([]types.UserShowName, 0), 81 WhoReviewInfo: make([]types.UserShowName, 0),
82 MatchUrl: articleDraft.MatchUrl, 82 MatchUrl: articleDraft.MatchUrl,
83 Tags: articleDraft.Tags, 83 Tags: articleDraft.Tags,
  84 + Cover: articleDraft.GetCover(),
84 } 85 }
85 userIds := lo.Union(resp.WhoRead, resp.WhoReview) 86 userIds := lo.Union(resp.WhoRead, resp.WhoReview)
86 if len(userIds) > 0 { 87 if len(userIds) > 0 {
@@ -68,6 +68,7 @@ func (l *SystemGetArticleLogic) SystemGetArticle(req *types.SystemArticleGetRequ @@ -68,6 +68,7 @@ func (l *SystemGetArticleLogic) SystemGetArticle(req *types.SystemArticleGetRequ
68 Tags: make([]types.ArticleTagItem, 0), 68 Tags: make([]types.ArticleTagItem, 0),
69 TargetUser: int(article.TargetUser), 69 TargetUser: int(article.TargetUser),
70 Videos: make([]types.Video, 0), 70 Videos: make([]types.Video, 0),
  71 + Cover: article.Cover,
71 } 72 }
72 73
73 for _, val := range article.Videos { 74 for _, val := range article.Videos {
@@ -72,6 +72,7 @@ func (l *SystemSearchArticleDraftLogic) SystemSearchArticleDraft(req *types.Syst @@ -72,6 +72,7 @@ func (l *SystemSearchArticleDraftLogic) SystemSearchArticleDraft(req *types.Syst
72 AuthorId: item.AuthorId, 72 AuthorId: item.AuthorId,
73 Author: author, 73 Author: author,
74 UpdatedAt: item.UpdatedAt, 74 UpdatedAt: item.UpdatedAt,
  75 + Cover: item.GetCover(),
75 }) 76 })
76 }) 77 })
77 return 78 return
@@ -93,6 +93,7 @@ func (l *SystemSearchArticleLogic) SystemSearchArticle(req *types.SystemArticleS @@ -93,6 +93,7 @@ func (l *SystemSearchArticleLogic) SystemSearchArticle(req *types.SystemArticleS
93 Id: item.Operator.Id, 93 Id: item.Operator.Id,
94 Name: item.Operator.Name, 94 Name: item.Operator.Name,
95 }, 95 },
  96 + Cover: item.Cover,
96 }) 97 })
97 }) 98 })
98 return 99 return
@@ -327,7 +327,7 @@ func (l *SystemUpdateArticleLogic) getSections(req *types.SystemArticleUpdateReq @@ -327,7 +327,7 @@ func (l *SystemUpdateArticleLogic) getSections(req *types.SystemArticleUpdateReq
327 lo.ForEach(req.Section, func(item types.ArticleSection, index int) { 327 lo.ForEach(req.Section, func(item types.ArticleSection, index int) {
328 strList := strings.Split(item.Content, "\n") 328 strList := strings.Split(item.Content, "\n")
329 for key, value := range strList { 329 for key, value := range strList {
330 - if value == "" && item.ParagraphType != 2 { 330 + if value == "" && item.ParagraphType == domain.ParagraphTypeNone {
331 continue 331 continue
332 } 332 }
333 section := domain.ArticleSection{ 333 section := domain.ArticleSection{
@@ -64,6 +64,7 @@ func (l *MiniUserNewsLogic) MiniUserNews(req *types.MiniUserNewsRequest) (resp * @@ -64,6 +64,7 @@ func (l *MiniUserNewsLogic) MiniUserNews(req *types.MiniUserNewsRequest) (resp *
64 Time: item.CreatedAt, 64 Time: item.CreatedAt,
65 Images: make([]string, 0), 65 Images: make([]string, 0),
66 ReadFlag: false, 66 ReadFlag: false,
  67 + Cover: item.GetCover(),
67 } 68 }
68 if author, _ := domain.LazyLoad(userMap, l.ctx, conn, item.AuthorId, l.svcCtx.UserRepository.FindOne); author != nil { 69 if author, _ := domain.LazyLoad(userMap, l.ctx, conn, item.AuthorId, l.svcCtx.UserRepository.FindOne); author != nil {
69 newsItem.Author = types.UserItem{ 70 newsItem.Author = types.UserItem{
@@ -607,6 +607,7 @@ type UserNewsItem struct { @@ -607,6 +607,7 @@ type UserNewsItem struct {
607 ReadFlag bool `json:"readFlag"` // 已读标识 true:已读 false:未读 607 ReadFlag bool `json:"readFlag"` // 已读标识 true:已读 false:未读
608 Images []string `json:"images"` // 图片列表 608 Images []string `json:"images"` // 图片列表
609 Author UserItem `json:"author"` // 作者 609 Author UserItem `json:"author"` // 作者
  610 + Cover string `json:"cover"` //封面
610 } 611 }
611 612
612 type MiniUserFollowedSearchRequest struct { 613 type MiniUserFollowedSearchRequest struct {
@@ -1000,6 +1001,7 @@ type MiniArticleGetResponse struct { @@ -1000,6 +1001,7 @@ type MiniArticleGetResponse struct {
1000 MeFollowFlag int `json:"meFollowFlag"` // 当前人员对作者的关注标识 (0 没有关注 1有关注) 1001 MeFollowFlag int `json:"meFollowFlag"` // 当前人员对作者的关注标识 (0 没有关注 1有关注)
1001 Tags []string `json:"tags"` // 文章的标签 1002 Tags []string `json:"tags"` // 文章的标签
1002 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 1003 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
  1004 + Cover string `json:"cover"` //封面
1003 } 1005 }
1004 1006
1005 type ArticleSection struct { 1007 type ArticleSection struct {
@@ -1037,6 +1039,7 @@ type ArticleSearchMe struct { @@ -1037,6 +1039,7 @@ type ArticleSearchMe struct {
1037 WhoRead []int64 `json:"whoRead"` //谁可查看 1039 WhoRead []int64 `json:"whoRead"` //谁可查看
1038 IsDel int `json:"isDel"` //是否删除 1-删除 0-否 1040 IsDel int `json:"isDel"` //是否删除 1-删除 0-否
1039 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除 1041 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除
  1042 + Cover string `json:"cover"` //封面
1040 } 1043 }
1041 1044
1042 type SystemArticleSearchMeRequest struct { 1045 type SystemArticleSearchMeRequest struct {
@@ -1129,6 +1132,7 @@ type MiniArticleBackupItem struct { @@ -1129,6 +1132,7 @@ type MiniArticleBackupItem struct {
1129 Location Location `json:"location"` 1132 Location Location `json:"location"`
1130 Action string `json:"action"` 1133 Action string `json:"action"`
1131 Show int `json:"show"` 1134 Show int `json:"show"`
  1135 + Cover string `json:"cover"` //封面
1132 } 1136 }
1133 1137
1134 type MiniGetArticleBackupRequest struct { 1138 type MiniGetArticleBackupRequest struct {
@@ -1147,6 +1151,7 @@ type MiniGetArticleBackupResponse struct { @@ -1147,6 +1151,7 @@ type MiniGetArticleBackupResponse struct {
1147 Location Location `json:"location"` 1151 Location Location `json:"location"`
1148 Action string `json:"action"` 1152 Action string `json:"action"`
1149 Show int `json:"show"` 1153 Show int `json:"show"`
  1154 + Cover string `json:"cover"` //封面
1150 } 1155 }
1151 1156
1152 type MiniArticleMarkUserReadRequest struct { 1157 type MiniArticleMarkUserReadRequest struct {
@@ -1217,6 +1222,7 @@ type MiniArticleDraftItem struct { @@ -1217,6 +1222,7 @@ type MiniArticleDraftItem struct {
1217 CreatedAt int64 `json:"createdAt"` // 1222 CreatedAt int64 `json:"createdAt"` //
1218 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本 1223 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本
1219 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1224 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  1225 + Cover string `json:"cover"` //封面
1220 } 1226 }
1221 1227
1222 type MiniArticleDraftGetMeRequest struct { 1228 type MiniArticleDraftGetMeRequest struct {
@@ -1236,6 +1242,7 @@ type MiniArticleDraftGetMeResponse struct { @@ -1236,6 +1242,7 @@ type MiniArticleDraftGetMeResponse struct {
1236 Location Location `json:"location"` // 坐标 1242 Location Location `json:"location"` // 坐标
1237 MatchUrl map[string]string `json:"matchUrl"` // 1243 MatchUrl map[string]string `json:"matchUrl"` //
1238 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1244 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  1245 + Cover string `json:"cover"` //封面
1239 } 1246 }
1240 1247
1241 type MiniArticleDraftDeleteMeRequest struct { 1248 type MiniArticleDraftDeleteMeRequest struct {
@@ -1331,6 +1338,7 @@ type SystemArticleGetResponse struct { @@ -1331,6 +1338,7 @@ type SystemArticleGetResponse struct {
1331 Show int `json:"show"` // 评论的展示状态(0显示、1不显示) 1338 Show int `json:"show"` // 评论的展示状态(0显示、1不显示)
1332 Tags []ArticleTagItem `json:"tags"` //标签 1339 Tags []ArticleTagItem `json:"tags"` //标签
1333 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 1340 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
  1341 + Cover string `json:"cover"` //封面
1334 } 1342 }
1335 1343
1336 type SystemArticleSearchRequest struct { 1344 type SystemArticleSearchRequest struct {
@@ -1355,6 +1363,7 @@ type SystemArticleSearch struct { @@ -1355,6 +1363,7 @@ type SystemArticleSearch struct {
1355 Title string `json:"title"` //标题 1363 Title string `json:"title"` //标题
1356 AuthorId int64 `json:"authorId"` //发布人ID 1364 AuthorId int64 `json:"authorId"` //发布人ID
1357 Author string `json:"author"` //发布人 1365 Author string `json:"author"` //发布人
  1366 + Cover string `json:"cover"` //封面
1358 Images []string `json:"images"` //图片 1367 Images []string `json:"images"` //图片
1359 CreatedAt int64 `json:"createdAt"` //文章的创建日期 1368 CreatedAt int64 `json:"createdAt"` //文章的创建日期
1360 UpdatedAt int64 `json:"updatedAt"` //文章的编辑日期 1369 UpdatedAt int64 `json:"updatedAt"` //文章的编辑日期
@@ -1476,6 +1485,7 @@ type SystemArticleGetHistoryResponse struct { @@ -1476,6 +1485,7 @@ type SystemArticleGetHistoryResponse struct {
1476 Location Location `json:"location"` // 定位坐标 1485 Location Location `json:"location"` // 定位坐标
1477 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 1486 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
1478 Tags []int64 `json:"tags"` // 标签 1487 Tags []int64 `json:"tags"` // 标签
  1488 + Cover string `json:"cover"` //封面
1479 } 1489 }
1480 1490
1481 type SystemArticleRestoreRequest struct { 1491 type SystemArticleRestoreRequest struct {
@@ -1535,6 +1545,7 @@ type MiniSearchArticleItem struct { @@ -1535,6 +1545,7 @@ type MiniSearchArticleItem struct {
1535 Images []string `json:"images"` 1545 Images []string `json:"images"`
1536 CreatedAt int64 `json:"createdAt"` 1546 CreatedAt int64 `json:"createdAt"`
1537 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] 1547 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读]
  1548 + Cover string `json:"cover"` //封面
1538 } 1549 }
1539 1550
1540 type SystemArticleDraftCreateRequest struct { 1551 type SystemArticleDraftCreateRequest struct {
@@ -1619,6 +1630,7 @@ type SystemArticleDraftSearch struct { @@ -1619,6 +1630,7 @@ type SystemArticleDraftSearch struct {
1619 AuthorId int64 `json:"authorId"` //发布人id 1630 AuthorId int64 `json:"authorId"` //发布人id
1620 Author string `json:"author"` //发布人 1631 Author string `json:"author"` //发布人
1621 UpdatedAt int64 `json:"updatedAt"` //编辑时间 1632 UpdatedAt int64 `json:"updatedAt"` //编辑时间
  1633 + Cover string `json:"cover"` //封面
1622 } 1634 }
1623 1635
1624 type SystemArticleDraftDeleteRequest struct { 1636 type SystemArticleDraftDeleteRequest struct {
@@ -1659,6 +1671,7 @@ type SystemArticleDraftGetResponse struct { @@ -1659,6 +1671,7 @@ type SystemArticleDraftGetResponse struct {
1659 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 1671 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本
1660 Tags []int64 `json:"tags"` // 标签 1672 Tags []int64 `json:"tags"` // 标签
1661 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1673 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  1674 + Cover string `json:"cover"` //封面
1662 } 1675 }
1663 1676
1664 type SystemArticleSearchDeletedRequest struct { 1677 type SystemArticleSearchDeletedRequest struct {
@@ -35,6 +35,7 @@ type Article struct { @@ -35,6 +35,7 @@ type Article struct {
35 Source int `gorm:"default:1"` // 来源 1-用户发布 2-运营发布 35 Source int `gorm:"default:1"` // 来源 1-用户发布 2-运营发布
36 Operator domain.Operator `gorm:"type:jsonb;serializer:json"` // 运营操作人 36 Operator domain.Operator `gorm:"type:jsonb;serializer:json"` // 运营操作人
37 DeletedType int `json:"deletedType"` // 删除类型 1-运营删除 2-用户删除 37 DeletedType int `json:"deletedType"` // 删除类型 1-运营删除 2-用户删除
  38 + Cover string
38 } 39 }
39 40
40 func (m *Article) TableName() string { 41 func (m *Article) TableName() string {
@@ -35,6 +35,7 @@ type Article struct { @@ -35,6 +35,7 @@ type Article struct {
35 Source int `gorm:"default:1"` // 来源 1-用户发布 2-运营发布 35 Source int `gorm:"default:1"` // 来源 1-用户发布 2-运营发布
36 Operator Operator `gorm:"type:jsonb;serializer:json"` // 运营操作人 36 Operator Operator `gorm:"type:jsonb;serializer:json"` // 运营操作人
37 DeletedType int `json:"deletedType"` // 删除类型 1-运营删除 2-用户删除 37 DeletedType int `json:"deletedType"` // 删除类型 1-运营删除 2-用户删除
  38 + Cover string `json:"cover"` // 封面
38 // ...more 39 // ...more
39 } 40 }
40 41
@@ -132,6 +133,8 @@ func (m *Article) SetSummary(sectionList []*ArticleSection) { @@ -132,6 +133,8 @@ func (m *Article) SetSummary(sectionList []*ArticleSection) {
132 length = 50 133 length = 50
133 } 134 }
134 m.Summary = string(runeContent[0:length]) 135 m.Summary = string(runeContent[0:length])
  136 + // 设置封面
  137 + m.Cover = m.GetCoverWithSections(sectionList)
135 } 138 }
136 139
137 // GetSubscribeMessageTitle 获取订阅消息标题 超过20个字用... 140 // GetSubscribeMessageTitle 获取订阅消息标题 超过20个字用...
@@ -172,3 +175,28 @@ func (m *Article) WhoCanReview(userId int64) bool { @@ -172,3 +175,28 @@ func (m *Article) WhoCanReview(userId int64) bool {
172 } 175 }
173 return false 176 return false
174 } 177 }
  178 +
  179 +func (m *Article) GetCover() string {
  180 + if len(m.Cover) > 0 {
  181 + return m.Cover
  182 + }
  183 + if len(m.Images) > 0 {
  184 + return m.Images[0].Url
  185 + }
  186 + return ""
  187 +}
  188 +
  189 +func (m *Article) GetCoverWithSections(list []*ArticleSection) string {
  190 + if len(m.Cover) > 0 {
  191 + return m.Cover
  192 + }
  193 + if len(m.Images) > 0 {
  194 + return m.Images[0].Url
  195 + }
  196 + for _, sec := range list {
  197 + if sec.ParagraphType == ParagraphTypeImages && len(sec.Images) > 0 {
  198 + return sec.Images[0]
  199 + }
  200 + }
  201 + return ""
  202 +}
@@ -200,3 +200,15 @@ func (bk *ArticleBackup) MakeBackup(operator UserSimple, article *Article, secti @@ -200,3 +200,15 @@ func (bk *ArticleBackup) MakeBackup(operator UserSimple, article *Article, secti
200 } 200 }
201 *bk = b 201 *bk = b
202 } 202 }
  203 +
  204 +func (m *ArticleBackup) GetCover() string {
  205 + if len(m.Images) > 0 {
  206 + return m.Images[0].Url
  207 + }
  208 + for _, sec := range m.Section {
  209 + if sec.ParagraphType == ParagraphTypeImages && len(sec.Images) > 0 {
  210 + return sec.Images[0]
  211 + }
  212 + }
  213 + return ""
  214 +}
@@ -35,3 +35,15 @@ type ArticleDraftRepository interface { @@ -35,3 +35,15 @@ type ArticleDraftRepository interface {
35 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ArticleDraft, error) 35 FindOne(ctx context.Context, conn transaction.Conn, id int64) (*ArticleDraft, error)
36 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleDraft, error) 36 Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*ArticleDraft, error)
37 } 37 }
  38 +
  39 +func (m *ArticleDraft) GetCover() string {
  40 + if len(m.Images) > 0 {
  41 + return m.Images[0].Url
  42 + }
  43 + for _, sec := range m.Section {
  44 + if sec.ParagraphType == ParagraphTypeImages && len(sec.Images) > 0 {
  45 + return sec.Images[0]
  46 + }
  47 + }
  48 + return ""
  49 +}
@@ -45,3 +45,15 @@ func (m *ArticleDraftOperation) Identify() interface{} { @@ -45,3 +45,15 @@ func (m *ArticleDraftOperation) Identify() interface{} {
45 } 45 }
46 return m.Id 46 return m.Id
47 } 47 }
  48 +
  49 +func (m *ArticleDraftOperation) GetCover() string {
  50 + if len(m.Images) > 0 {
  51 + return m.Images[0].Url
  52 + }
  53 + for _, sec := range m.Section {
  54 + if sec.ParagraphType == ParagraphTypeImages && len(sec.Images) > 0 {
  55 + return sec.Images[0]
  56 + }
  57 + }
  58 + return ""
  59 +}
@@ -40,3 +40,9 @@ type SortArticleSection []*ArticleSection @@ -40,3 +40,9 @@ type SortArticleSection []*ArticleSection
40 func (a SortArticleSection) Len() int { return len(a) } 40 func (a SortArticleSection) Len() int { return len(a) }
41 func (a SortArticleSection) Swap(i, j int) { a[i], a[j] = a[j], a[i] } 41 func (a SortArticleSection) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
42 func (a SortArticleSection) Less(i, j int) bool { return a[i].SortBy < a[j].SortBy } 42 func (a SortArticleSection) Less(i, j int) bool { return a[i].SortBy < a[j].SortBy }
  43 +
  44 +const (
  45 + ParagraphTypeNone = 0
  46 + ParagraphTypeText = 1
  47 + ParagraphTypeImages = 2
  48 +)
@@ -6,3 +6,6 @@ alter table article_section add column images jsonb; @@ -6,3 +6,6 @@ alter table article_section add column images jsonb;
6 update article_section set paragraph_type = 0; 6 update article_section set paragraph_type = 0;
7 7
8 alter table article_draft_operation add column section jsonb; 8 alter table article_draft_operation add column section jsonb;
  9 +
  10 +-- 文章封面
  11 +alter table article add column cover varchar(1024);