作者 yangfu

feat: 附件

正在显示 37 个修改的文件 包含 144 行增加7 行删除
@@ -56,7 +56,7 @@ func main() { @@ -56,7 +56,7 @@ func main() {
56 } 56 }
57 57
58 // 服务启动 58 // 服务启动
59 - logx.Infof("Starting server at %s:%d... \n", c.Host, c.Port) 59 + logx.Infof("Starting server version 1.0.4 at %s:%d... \n", c.Host, c.Port)
60 server.Start() 60 server.Start()
61 } 61 }
62 62
@@ -41,12 +41,16 @@ type ( @@ -41,12 +41,16 @@ type (
41 WhoReview []int64 `json:"whoReview,optional"` //谁可评论 41 WhoReview []int64 `json:"whoReview,optional"` //谁可评论
42 Location Location `json:"location,optional"` //定位坐标 42 Location Location `json:"location,optional"` //定位坐标
43 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 43 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
44 - 44 + Attachments []FileInfo `json:"attachments,optional"` // 附件
45 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 45 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
46 } 46 }
47 MiniArticleCreateResponse { 47 MiniArticleCreateResponse {
48 Id int64 `json:"id"` 48 Id int64 `json:"id"`
49 } 49 }
  50 + FileInfo struct {
  51 + Name string `json:"name"`
  52 + Url string `json:"url"`
  53 + }
50 ) 54 )
51 55
52 //小程序端查看文章的详情 56 //小程序端查看文章的详情
@@ -78,6 +82,7 @@ type ( @@ -78,6 +82,7 @@ type (
78 Tags []string `json:"tags"` // 文章的标签 82 Tags []string `json:"tags"` // 文章的标签
79 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 83 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
80 Cover string `json:"cover"` //封面 84 Cover string `json:"cover"` //封面
  85 + Attachments []FileInfo `json:"attachments,optional"` // 附件
81 } 86 }
82 ArticleSection { 87 ArticleSection {
83 Id int64 `json:"id"` //段落id 88 Id int64 `json:"id"` //段落id
@@ -118,6 +123,7 @@ type ( @@ -118,6 +123,7 @@ type (
118 IsDel int `json:"isDel"` //是否删除 1-删除 0-否 123 IsDel int `json:"isDel"` //是否删除 1-删除 0-否
119 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除 124 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除
120 Cover string `json:"cover"` //封面 125 Cover string `json:"cover"` //封面
  126 + Attachments []FileInfo `json:"attachments,optional"` // 附件
121 } 127 }
122 128
123 SystemArticleSearchMeRequest { 129 SystemArticleSearchMeRequest {
@@ -219,6 +225,7 @@ type ( @@ -219,6 +225,7 @@ type (
219 Action string `json:"action"` 225 Action string `json:"action"`
220 Show int `json:"show"` 226 Show int `json:"show"`
221 Cover string `json:"cover"` //封面 227 Cover string `json:"cover"` //封面
  228 + Attachments []FileInfo `json:"attachments,optional"` // 附件
222 } 229 }
223 ) 230 )
224 231
@@ -239,6 +246,7 @@ type ( @@ -239,6 +246,7 @@ type (
239 Action string `json:"action"` 246 Action string `json:"action"`
240 Show int `json:"show"` 247 Show int `json:"show"`
241 Cover string `json:"cover"` //封面 248 Cover string `json:"cover"` //封面
  249 + Attachments []FileInfo `json:"attachments,optional"` // 附件
242 } 250 }
243 ) 251 )
244 252
@@ -272,6 +280,7 @@ type ( @@ -272,6 +280,7 @@ type (
272 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 280 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
273 281
274 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 282 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  283 + Attachments []FileInfo `json:"attachments,optional"` // 附件
275 } 284 }
276 285
277 MiniArticleDraftCreateResponse { 286 MiniArticleDraftCreateResponse {
@@ -293,7 +302,7 @@ type ( @@ -293,7 +302,7 @@ type (
293 WhoReview []int64 `json:"whoReview"` // 评论人 302 WhoReview []int64 `json:"whoReview"` // 评论人
294 Location Location `json:"location"` // 坐标 303 Location Location `json:"location"` // 坐标
295 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 304 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
296 - 305 + Attachments []FileInfo `json:"attachments,optional"` // 附件
297 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 306 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
298 } 307 }
299 308
@@ -325,6 +334,7 @@ type ( @@ -325,6 +334,7 @@ type (
325 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本 334 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本
326 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 335 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
327 Cover string `json:"cover"` //封面 336 Cover string `json:"cover"` //封面
  337 + Attachments []FileInfo `json:"attachments,optional"` // 附件
328 } 338 }
329 ) 339 )
330 340
@@ -348,6 +358,7 @@ type ( @@ -348,6 +358,7 @@ type (
348 MatchUrl map[string]string `json:"matchUrl"` // 358 MatchUrl map[string]string `json:"matchUrl"` //
349 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 359 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
350 Cover string `json:"cover"` //封面 360 Cover string `json:"cover"` //封面
  361 + Attachments []FileInfo `json:"attachments,optional"` // 附件
351 } 362 }
352 ) 363 )
353 364
@@ -454,6 +465,7 @@ type ( @@ -454,6 +465,7 @@ type (
454 Tags []ArticleTagItem `json:"tags"` //标签 465 Tags []ArticleTagItem `json:"tags"` //标签
455 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 466 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
456 Cover string `json:"cover"` //封面 467 Cover string `json:"cover"` //封面
  468 + Attachments []FileInfo `json:"attachments,optional"` // 附件
457 } 469 }
458 ) 470 )
459 471
@@ -491,6 +503,7 @@ type ( @@ -491,6 +503,7 @@ type (
491 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 503 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
492 Operator Operator `json:"operator"` //运营操作人 504 Operator Operator `json:"operator"` //运营操作人
493 Source int `json:"source"` //来源[1用户发布、2运营发布] 505 Source int `json:"source"` //来源[1用户发布、2运营发布]
  506 + Attachments []FileInfo `json:"attachments,optional"` // 附件
494 } 507 }
495 ) 508 )
496 // 管理后台编辑文章 509 // 管理后台编辑文章
@@ -509,6 +522,7 @@ type ( @@ -509,6 +522,7 @@ type (
509 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 522 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
510 Tags []int64 `json:"tags"` // 标签 523 Tags []int64 `json:"tags"` // 标签
511 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 524 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
  525 + Attachments []FileInfo `json:"attachments,optional"` // 附件
512 } 526 }
513 SystemArticleUpdateResponse { 527 SystemArticleUpdateResponse {
514 Id int64 `json:"id"` //id 528 Id int64 `json:"id"` //id
@@ -538,7 +552,7 @@ type ( @@ -538,7 +552,7 @@ type (
538 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 552 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本
539 ArticleDraftId int64 `json:"articleDraftId"` // 草稿ID 553 ArticleDraftId int64 `json:"articleDraftId"` // 草稿ID
540 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 554 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
541 - 555 + Attachments []FileInfo `json:"attachments,optional"` // 附件
542 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 556 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
543 } 557 }
544 SystemArticleCreateResponse { 558 SystemArticleCreateResponse {
@@ -610,6 +624,7 @@ type ( @@ -610,6 +624,7 @@ type (
610 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 624 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
611 Tags []int64 `json:"tags"` // 标签 625 Tags []int64 `json:"tags"` // 标签
612 Cover string `json:"cover"` //封面 626 Cover string `json:"cover"` //封面
  627 + Attachments []FileInfo `json:"attachments,optional"` // 附件
613 } 628 }
614 ) 629 )
615 // 管理后台文章恢复 630 // 管理后台文章恢复
@@ -676,6 +691,7 @@ type ( @@ -676,6 +691,7 @@ type (
676 CreatedAt int64 `json:"createdAt"` 691 CreatedAt int64 `json:"createdAt"`
677 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] 692 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读]
678 Cover string `json:"cover"` //封面 693 Cover string `json:"cover"` //封面
  694 + Attachments []FileInfo `json:"attachments,optional"` // 附件
679 } 695 }
680 ) 696 )
681 697
@@ -694,6 +710,7 @@ type ( @@ -694,6 +710,7 @@ type (
694 Tags []int64 `json:"tags"` // 标签 710 Tags []int64 `json:"tags"` // 标签
695 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 711 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
696 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 712 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  713 + Attachments []FileInfo `json:"attachments,optional"` // 附件
697 } 714 }
698 SystemArticleDraftCreateResponse { 715 SystemArticleDraftCreateResponse {
699 Id int64 `json:"id"` //ID 716 Id int64 `json:"id"` //ID
@@ -726,6 +743,7 @@ type ( @@ -726,6 +743,7 @@ type (
726 Tags []int64 `json:"tags"` // 标签 743 Tags []int64 `json:"tags"` // 标签
727 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 744 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
728 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 745 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  746 + Attachments []FileInfo `json:"attachments,optional"` // 附件
729 } 747 }
730 SystemArticleDraftUpdateResponse { 748 SystemArticleDraftUpdateResponse {
731 Id int64 `json:"id"` //ID 749 Id int64 `json:"id"` //ID
@@ -766,6 +784,7 @@ type ( @@ -766,6 +784,7 @@ type (
766 Author string `json:"author"` //发布人 784 Author string `json:"author"` //发布人
767 UpdatedAt int64 `json:"updatedAt"` //编辑时间 785 UpdatedAt int64 `json:"updatedAt"` //编辑时间
768 Cover string `json:"cover"` //封面 786 Cover string `json:"cover"` //封面
  787 + Attachments []FileInfo `json:"attachments,optional"` // 附件
769 } 788 }
770 ) 789 )
771 790
@@ -811,6 +830,7 @@ type ( @@ -811,6 +830,7 @@ type (
811 Tags []int64 `json:"tags"` // 标签 830 Tags []int64 `json:"tags"` // 标签
812 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 831 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
813 Cover string `json:"cover"` //封面 832 Cover string `json:"cover"` //封面
  833 + Attachments []FileInfo `json:"attachments,optional"` // 附件
814 } 834 }
815 ) 835 )
816 836
@@ -237,6 +237,7 @@ type( @@ -237,6 +237,7 @@ type(
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 Cover string `json:"cover"` //封面
  240 + Attachments []FileInfo `json:"attachments,optional"` // 附件
240 } 241 }
241 MiniUserFollowedSearchRequest{ 242 MiniUserFollowedSearchRequest{
242 Page int `json:"page,optional"` 243 Page int `json:"page,optional"`
@@ -77,6 +77,7 @@ func (l *MiniArticleBackupSearchLogic) MiniArticleBackupSearch(req *types.MiniAr @@ -77,6 +77,7 @@ func (l *MiniArticleBackupSearchLogic) MiniArticleBackupSearch(req *types.MiniAr
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 Cover: backupList[i].GetCover(),
  80 + Attachments: NewTypesAttachments(backupList[i].Attachments),
80 } 81 }
81 //根据修改的内容替换展示内容 82 //根据修改的内容替换展示内容
82 changeFiled := []string{} 83 changeFiled := []string{}
@@ -56,6 +56,7 @@ func NewArticle(article *domain.Article) types.ArticleSearchMe { @@ -56,6 +56,7 @@ func NewArticle(article *domain.Article) types.ArticleSearchMe {
56 Id: article.Id, 56 Id: article.Id,
57 Title: article.Title, 57 Title: article.Title,
58 Images: article.GetImages(), 58 Images: article.GetImages(),
  59 + Attachments: NewTypesAttachments(article.Attachments),
59 CreatedAt: article.CreatedAt, 60 CreatedAt: article.CreatedAt,
60 CountLove: article.CountLove, 61 CountLove: article.CountLove,
61 CountComment: article.CountComment, 62 CountComment: article.CountComment,
@@ -46,6 +46,7 @@ func (l *MiniCreateArticleDraftLogic) MiniCreateArticleDraft(req *types.MiniArti @@ -46,6 +46,7 @@ func (l *MiniCreateArticleDraftLogic) MiniCreateArticleDraft(req *types.MiniArti
46 AuthorId: req.AuthorId, 46 AuthorId: req.AuthorId,
47 Title: req.Title, 47 Title: req.Title,
48 Images: []domain.Image{}, 48 Images: []domain.Image{},
  49 + Attachments: NewDomainAttachments(req.Attachments),
49 WhoRead: req.WhoRead, 50 WhoRead: req.WhoRead,
50 WhoReview: req.WhoReview, 51 WhoReview: req.WhoReview,
51 Location: domain.Location{ 52 Location: domain.Location{
@@ -350,6 +350,7 @@ func (l *MiniCreateArticleLogic) MiniCreateArticleBak(req *types.MiniArticleCrea @@ -350,6 +350,7 @@ func (l *MiniCreateArticleLogic) MiniCreateArticleBak(req *types.MiniArticleCrea
350 Author: articleAuthor, 350 Author: articleAuthor,
351 Title: req.Title, 351 Title: req.Title,
352 Images: images, 352 Images: images,
  353 + Attachments: NewDomainAttachments(req.Attachments),
353 WhoRead: whoRead, 354 WhoRead: whoRead,
354 WhoReview: whoReview, 355 WhoReview: whoReview,
355 Location: domain.Location{ 356 Location: domain.Location{
@@ -439,3 +440,25 @@ func (l *MiniCreateArticleLogic) validateTextLimit(req *types.MiniArticleCreateR @@ -439,3 +440,25 @@ func (l *MiniCreateArticleLogic) validateTextLimit(req *types.MiniArticleCreateR
439 } 440 }
440 return nil 441 return nil
441 } 442 }
  443 +
  444 +func NewDomainAttachments(from []types.FileInfo) []domain.FileInfo {
  445 + var to = make([]domain.FileInfo, 0)
  446 + lo.ForEach(from, func(item types.FileInfo, index int) {
  447 + to = append(to, domain.FileInfo{
  448 + Name: item.Name,
  449 + Url: item.Url,
  450 + })
  451 + })
  452 + return to
  453 +}
  454 +
  455 +func NewTypesAttachments(from []domain.FileInfo) []types.FileInfo {
  456 + var to = make([]types.FileInfo, 0)
  457 + lo.ForEach(from, func(item domain.FileInfo, index int) {
  458 + to = append(to, types.FileInfo{
  459 + Name: item.Name,
  460 + Url: item.Url,
  461 + })
  462 + })
  463 + return to
  464 +}
@@ -57,6 +57,7 @@ func (l *MiniGetArticleBackupLogic) MiniGetArticleBackup(req *types.MiniGetArtic @@ -57,6 +57,7 @@ func (l *MiniGetArticleBackupLogic) MiniGetArticleBackup(req *types.MiniGetArtic
57 Title: backupInfo.Title, 57 Title: backupInfo.Title,
58 Content: content.String(), 58 Content: content.String(),
59 Images: images, 59 Images: images,
  60 + Attachments: NewTypesAttachments(backupInfo.Attachments),
60 Videos: videos, 61 Videos: videos,
61 CreatedAt: backupInfo.CreatedAt, 62 CreatedAt: backupInfo.CreatedAt,
62 Location: types.Location{ 63 Location: types.Location{
@@ -61,6 +61,7 @@ func (l *MiniGetArticleDraftMeLogic) MiniGetArticleDraftMe(req *types.MiniArticl @@ -61,6 +61,7 @@ func (l *MiniGetArticleDraftMeLogic) MiniGetArticleDraftMe(req *types.MiniArticl
61 //Section: draftInfo.Content, 61 //Section: draftInfo.Content,
62 Title: draftInfo.Title, 62 Title: draftInfo.Title,
63 Images: []string{}, 63 Images: []string{},
  64 + Attachments: NewTypesAttachments(draftInfo.Attachments),
64 WhoRead: draftInfo.WhoRead, 65 WhoRead: draftInfo.WhoRead,
65 WhoReview: draftInfo.WhoReview, 66 WhoReview: draftInfo.WhoReview,
66 Location: types.Location{ 67 Location: types.Location{
@@ -130,6 +130,7 @@ func (l *MiniGetArticleLogic) MiniGetArticle(req *types.MiniArticleGetRequest) ( @@ -130,6 +130,7 @@ func (l *MiniGetArticleLogic) MiniGetArticle(req *types.MiniArticleGetRequest) (
130 CreatedAt: articleInfo.CreatedAt, 130 CreatedAt: articleInfo.CreatedAt,
131 Section: articleSection, 131 Section: articleSection,
132 Images: []string{}, 132 Images: []string{},
  133 + Attachments: NewTypesAttachments(articleInfo.Attachments),
133 WhoRead: articleInfo.WhoRead, 134 WhoRead: articleInfo.WhoRead,
134 WhoReview: articleInfo.WhoReview, 135 WhoReview: articleInfo.WhoReview,
135 Location: types.Location{ 136 Location: types.Location{
@@ -76,6 +76,7 @@ func (l *MiniSearchArticleDraftMeLogic) MiniSearchArticleDraftMe(req *types.Mini @@ -76,6 +76,7 @@ func (l *MiniSearchArticleDraftMeLogic) MiniSearchArticleDraftMe(req *types.Mini
76 MatchUrl: draftList[i].MatchUrl, 76 MatchUrl: draftList[i].MatchUrl,
77 Paragraphs: paragraphs, 77 Paragraphs: paragraphs,
78 Cover: draftList[i].GetCover(), 78 Cover: draftList[i].GetCover(),
  79 + Attachments: NewTypesAttachments(draftList[i].Attachments),
79 } 80 }
80 } 81 }
81 return resp, nil 82 return resp, nil
@@ -74,6 +74,7 @@ func (l *MiniSearchArticlePageLogic) MiniSearchArticlePage(req *types.MiniSearch @@ -74,6 +74,7 @@ func (l *MiniSearchArticlePageLogic) MiniSearchArticlePage(req *types.MiniSearch
74 Author: author.Name, 74 Author: author.Name,
75 Avatar: author.Avatar, 75 Avatar: author.Avatar,
76 Images: val.GetImages(), 76 Images: val.GetImages(),
  77 + Attachments: NewTypesAttachments(val.Attachments),
77 CreatedAt: val.CreatedAt, 78 CreatedAt: val.CreatedAt,
78 MeReadFlag: 0, 79 MeReadFlag: 0,
79 Cover: val.GetCover(), 80 Cover: val.GetCover(),
@@ -58,6 +58,7 @@ func (l *MiniUpdateArticleDraftLogic) MiniUpdateArticleDraft(req *types.MiniArti @@ -58,6 +58,7 @@ func (l *MiniUpdateArticleDraftLogic) MiniUpdateArticleDraft(req *types.MiniArti
58 Url: val, 58 Url: val,
59 }) 59 })
60 } 60 }
  61 + draftInfo.Attachments = NewDomainAttachments(req.Attachments)
61 draftInfo.MatchUrl = make(map[string]string) 62 draftInfo.MatchUrl = make(map[string]string)
62 for k, v := range req.MatchUrl { 63 for k, v := range req.MatchUrl {
63 draftInfo.MatchUrl[k] = v 64 draftInfo.MatchUrl[k] = v
@@ -42,6 +42,7 @@ func (l *SystemArticleGetHistoryLogic) SystemArticleGetHistory(req *types.System @@ -42,6 +42,7 @@ func (l *SystemArticleGetHistoryLogic) SystemArticleGetHistory(req *types.System
42 CreatedAt: backup.CreatedAt, 42 CreatedAt: backup.CreatedAt,
43 Section: make([]types.ArticleSection, 0), 43 Section: make([]types.ArticleSection, 0),
44 Images: make([]string, 0), 44 Images: make([]string, 0),
  45 + Attachments: NewTypesAttachments(backup.Attachments),
45 WhoRead: backup.WhoRead, 46 WhoRead: backup.WhoRead,
46 WhoReadInfo: make([]types.UserShowName, 0), 47 WhoReadInfo: make([]types.UserShowName, 0),
47 WhoReview: backup.WhoReview, 48 WhoReview: backup.WhoReview,
@@ -64,6 +64,7 @@ func (l *SystemCreateArticleDraftLogic) SystemCreateArticleDraft(req *types.Syst @@ -64,6 +64,7 @@ func (l *SystemCreateArticleDraftLogic) SystemCreateArticleDraft(req *types.Syst
64 Title: req.Title, 64 Title: req.Title,
65 Content: req.Content, 65 Content: req.Content,
66 Images: images, 66 Images: images,
  67 + Attachments: NewDomainAttachments(req.Attachments),
67 Videos: videos, 68 Videos: videos,
68 TargetUser: domain.ArticleTarget(req.TargetUser), 69 TargetUser: domain.ArticleTarget(req.TargetUser),
69 WhoRead: req.WhoRead, 70 WhoRead: req.WhoRead,
@@ -84,6 +84,7 @@ func (l *SystemCreateArticleLogic) SystemCreateArticle(req *types.SystemArticleC @@ -84,6 +84,7 @@ func (l *SystemCreateArticleLogic) SystemCreateArticle(req *types.SystemArticleC
84 Author: articleAuthor, 84 Author: articleAuthor,
85 Title: req.Title, 85 Title: req.Title,
86 Images: images, 86 Images: images,
  87 + Attachments: NewDomainAttachments(req.Attachments),
87 Videos: videos, 88 Videos: videos,
88 WhoRead: make([]int64, 0), 89 WhoRead: make([]int64, 0),
89 WhoReview: make([]int64, 0), 90 WhoReview: make([]int64, 0),
@@ -73,6 +73,7 @@ func (l *SystemGetArticleDraftLogic) SystemGetArticleDraft(req *types.SystemArti @@ -73,6 +73,7 @@ func (l *SystemGetArticleDraftLogic) SystemGetArticleDraft(req *types.SystemArti
73 Content: articleDraft.Content, 73 Content: articleDraft.Content,
74 AuthorId: articleDraft.AuthorId, 74 AuthorId: articleDraft.AuthorId,
75 Images: images, 75 Images: images,
  76 + Attachments: NewTypesAttachments(articleDraft.Attachments),
76 Videos: videos, 77 Videos: videos,
77 TargetUser: int(articleDraft.TargetUser), 78 TargetUser: int(articleDraft.TargetUser),
78 WhoRead: articleDraft.WhoRead, 79 WhoRead: articleDraft.WhoRead,
@@ -52,6 +52,7 @@ func (l *SystemGetArticleLogic) SystemGetArticle(req *types.SystemArticleGetRequ @@ -52,6 +52,7 @@ func (l *SystemGetArticleLogic) SystemGetArticle(req *types.SystemArticleGetRequ
52 CreatedAt: article.CreatedAt, 52 CreatedAt: article.CreatedAt,
53 Section: make([]types.ArticleSection, 0), 53 Section: make([]types.ArticleSection, 0),
54 Images: images, 54 Images: images,
  55 + Attachments: NewTypesAttachments(article.Attachments),
55 WhoRead: article.WhoRead, 56 WhoRead: article.WhoRead,
56 WhoReadInfo: make([]types.UserShowName, 0), 57 WhoReadInfo: make([]types.UserShowName, 0),
57 WhoReview: article.WhoReview, 58 WhoReview: article.WhoReview,
@@ -73,6 +73,7 @@ func (l *SystemSearchArticleDraftLogic) SystemSearchArticleDraft(req *types.Syst @@ -73,6 +73,7 @@ func (l *SystemSearchArticleDraftLogic) SystemSearchArticleDraft(req *types.Syst
73 Author: author, 73 Author: author,
74 UpdatedAt: item.UpdatedAt, 74 UpdatedAt: item.UpdatedAt,
75 Cover: item.GetCover(), 75 Cover: item.GetCover(),
  76 + Attachments: NewTypesAttachments(item.Attachments),
76 }) 77 })
77 }) 78 })
78 return 79 return
@@ -89,6 +89,7 @@ func (l *SystemSearchArticleLogic) SystemSearchArticle(req *types.SystemArticleS @@ -89,6 +89,7 @@ func (l *SystemSearchArticleLogic) SystemSearchArticle(req *types.SystemArticleS
89 Name: item.Operator.Name, 89 Name: item.Operator.Name,
90 }, 90 },
91 Cover: item.GetCover(), 91 Cover: item.GetCover(),
  92 + Attachments: NewTypesAttachments(item.Attachments),
92 }) 93 })
93 }) 94 })
94 return 95 return
@@ -51,6 +51,7 @@ func (l *SystemUpdateArticleDraftLogic) SystemUpdateArticleDraft(req *types.Syst @@ -51,6 +51,7 @@ func (l *SystemUpdateArticleDraftLogic) SystemUpdateArticleDraft(req *types.Syst
51 return nil, xerr.NewErrMsg(err.Error()) 51 return nil, xerr.NewErrMsg(err.Error())
52 } 52 }
53 articleDraft.Images = images 53 articleDraft.Images = images
  54 + articleDraft.Attachments = NewDomainAttachments(req.Attachments)
54 //视频 55 //视频
55 videos, err := getVideos(req.Videos) 56 videos, err := getVideos(req.Videos)
56 if err != nil { 57 if err != nil {
@@ -112,6 +112,7 @@ func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleU @@ -112,6 +112,7 @@ func (l *SystemUpdateArticleLogic) SystemUpdateArticle(req *types.SystemArticleU
112 article.Title = req.Title 112 article.Title = req.Title
113 article.Version = article.Version + 1 113 article.Version = article.Version + 1
114 article.Images = images 114 article.Images = images
  115 + article.Attachments = NewDomainAttachments(req.Attachments)
115 article.Videos = videos 116 article.Videos = videos
116 article.WhoRead = whoRead 117 article.WhoRead = whoRead
117 article.WhoReview = whoReview 118 article.WhoReview = whoReview
@@ -63,6 +63,7 @@ func (l *MiniUserNewsLogic) MiniUserNews(req *types.MiniUserNewsRequest) (resp * @@ -63,6 +63,7 @@ func (l *MiniUserNewsLogic) MiniUserNews(req *types.MiniUserNewsRequest) (resp *
63 Summary: item.Summary, 63 Summary: item.Summary,
64 Time: item.CreatedAt, 64 Time: item.CreatedAt,
65 Images: item.GetImages(), 65 Images: item.GetImages(),
  66 + Attachments: types.NewTypesAttachments(item.Attachments),
66 ReadFlag: false, 67 ReadFlag: false,
67 Cover: item.GetCover(), 68 Cover: item.GetCover(),
68 } 69 }
  1 +package types
  2 +
  3 +import (
  4 + "github.com/samber/lo"
  5 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
  6 +)
  7 +
  8 +func NewDomainAttachments(from []FileInfo) []domain.FileInfo {
  9 + var to = make([]domain.FileInfo, 0)
  10 + lo.ForEach(from, func(item FileInfo, index int) {
  11 + to = append(to, domain.FileInfo{
  12 + Name: item.Name,
  13 + Url: item.Url,
  14 + })
  15 + })
  16 + return to
  17 +}
  18 +
  19 +func NewTypesAttachments(from []domain.FileInfo) []FileInfo {
  20 + var to = make([]FileInfo, 0)
  21 + lo.ForEach(from, func(item domain.FileInfo, index int) {
  22 + to = append(to, FileInfo{
  23 + Name: item.Name,
  24 + Url: item.Url,
  25 + })
  26 + })
  27 + return to
  28 +}
@@ -608,6 +608,7 @@ type UserNewsItem struct { @@ -608,6 +608,7 @@ type UserNewsItem struct {
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 Cover string `json:"cover"` //封面
  611 + Attachments []FileInfo `json:"attachments,optional"` // 附件
611 } 612 }
612 613
613 type MiniUserFollowedSearchRequest struct { 614 type MiniUserFollowedSearchRequest struct {
@@ -967,6 +968,7 @@ type MiniArticleCreateRequest struct { @@ -967,6 +968,7 @@ type MiniArticleCreateRequest struct {
967 WhoReview []int64 `json:"whoReview,optional"` //谁可评论 968 WhoReview []int64 `json:"whoReview,optional"` //谁可评论
968 Location Location `json:"location,optional"` //定位坐标 969 Location Location `json:"location,optional"` //定位坐标
969 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 970 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
  971 + Attachments []FileInfo `json:"attachments,optional"` // 附件
970 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 972 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
971 } 973 }
972 974
@@ -974,6 +976,11 @@ type MiniArticleCreateResponse struct { @@ -974,6 +976,11 @@ type MiniArticleCreateResponse struct {
974 Id int64 `json:"id"` 976 Id int64 `json:"id"`
975 } 977 }
976 978
  979 +type FileInfo struct {
  980 + Name string `json:"name"`
  981 + Url string `json:"url"`
  982 +}
  983 +
977 type MiniArticleGetRequest struct { 984 type MiniArticleGetRequest struct {
978 Id int64 `path:"id"` //id 985 Id int64 `path:"id"` //id
979 CompanyId int64 `path:",optional"` //当前公司 986 CompanyId int64 `path:",optional"` //当前公司
@@ -1002,6 +1009,7 @@ type MiniArticleGetResponse struct { @@ -1002,6 +1009,7 @@ type MiniArticleGetResponse struct {
1002 Tags []string `json:"tags"` // 文章的标签 1009 Tags []string `json:"tags"` // 文章的标签
1003 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 1010 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
1004 Cover string `json:"cover"` //封面 1011 Cover string `json:"cover"` //封面
  1012 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1005 } 1013 }
1006 1014
1007 type ArticleSection struct { 1015 type ArticleSection struct {
@@ -1040,6 +1048,7 @@ type ArticleSearchMe struct { @@ -1040,6 +1048,7 @@ type ArticleSearchMe struct {
1040 IsDel int `json:"isDel"` //是否删除 1-删除 0-否 1048 IsDel int `json:"isDel"` //是否删除 1-删除 0-否
1041 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除 1049 DeletedType int `json:"deletedType"` //类型 1-运营删除 2-用户删除
1042 Cover string `json:"cover"` //封面 1050 Cover string `json:"cover"` //封面
  1051 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1043 } 1052 }
1044 1053
1045 type SystemArticleSearchMeRequest struct { 1054 type SystemArticleSearchMeRequest struct {
@@ -1133,6 +1142,7 @@ type MiniArticleBackupItem struct { @@ -1133,6 +1142,7 @@ type MiniArticleBackupItem struct {
1133 Action string `json:"action"` 1142 Action string `json:"action"`
1134 Show int `json:"show"` 1143 Show int `json:"show"`
1135 Cover string `json:"cover"` //封面 1144 Cover string `json:"cover"` //封面
  1145 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1136 } 1146 }
1137 1147
1138 type MiniGetArticleBackupRequest struct { 1148 type MiniGetArticleBackupRequest struct {
@@ -1152,6 +1162,7 @@ type MiniGetArticleBackupResponse struct { @@ -1152,6 +1162,7 @@ type MiniGetArticleBackupResponse struct {
1152 Action string `json:"action"` 1162 Action string `json:"action"`
1153 Show int `json:"show"` 1163 Show int `json:"show"`
1154 Cover string `json:"cover"` //封面 1164 Cover string `json:"cover"` //封面
  1165 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1155 } 1166 }
1156 1167
1157 type MiniArticleMarkUserReadRequest struct { 1168 type MiniArticleMarkUserReadRequest struct {
@@ -1176,6 +1187,7 @@ type MiniArticleDraftCreateRequest struct { @@ -1176,6 +1187,7 @@ type MiniArticleDraftCreateRequest struct {
1176 Location Location `json:"location"` // 坐标 1187 Location Location `json:"location"` // 坐标
1177 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 1188 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
1178 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1189 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  1190 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1179 } 1191 }
1180 1192
1181 type MiniArticleDraftCreateResponse struct { 1193 type MiniArticleDraftCreateResponse struct {
@@ -1194,6 +1206,7 @@ type MiniArticleDraftUpdateRequest struct { @@ -1194,6 +1206,7 @@ type MiniArticleDraftUpdateRequest struct {
1194 WhoReview []int64 `json:"whoReview"` // 评论人 1206 WhoReview []int64 `json:"whoReview"` // 评论人
1195 Location Location `json:"location"` // 坐标 1207 Location Location `json:"location"` // 坐标
1196 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 1208 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
  1209 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1197 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1210 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
1198 } 1211 }
1199 1212
@@ -1223,6 +1236,7 @@ type MiniArticleDraftItem struct { @@ -1223,6 +1236,7 @@ type MiniArticleDraftItem struct {
1223 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本 1236 MatchUrl map[string]string `json:"matchUrl"` //匹配内容中的url文本
1224 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1237 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
1225 Cover string `json:"cover"` //封面 1238 Cover string `json:"cover"` //封面
  1239 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1226 } 1240 }
1227 1241
1228 type MiniArticleDraftGetMeRequest struct { 1242 type MiniArticleDraftGetMeRequest struct {
@@ -1243,6 +1257,7 @@ type MiniArticleDraftGetMeResponse struct { @@ -1243,6 +1257,7 @@ type MiniArticleDraftGetMeResponse struct {
1243 MatchUrl map[string]string `json:"matchUrl"` // 1257 MatchUrl map[string]string `json:"matchUrl"` //
1244 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1258 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
1245 Cover string `json:"cover"` //封面 1259 Cover string `json:"cover"` //封面
  1260 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1246 } 1261 }
1247 1262
1248 type MiniArticleDraftDeleteMeRequest struct { 1263 type MiniArticleDraftDeleteMeRequest struct {
@@ -1339,6 +1354,7 @@ type SystemArticleGetResponse struct { @@ -1339,6 +1354,7 @@ type SystemArticleGetResponse struct {
1339 Tags []ArticleTagItem `json:"tags"` //标签 1354 Tags []ArticleTagItem `json:"tags"` //标签
1340 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 1355 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
1341 Cover string `json:"cover"` //封面 1356 Cover string `json:"cover"` //封面
  1357 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1342 } 1358 }
1343 1359
1344 type SystemArticleSearchRequest struct { 1360 type SystemArticleSearchRequest struct {
@@ -1374,6 +1390,7 @@ type SystemArticleSearch struct { @@ -1374,6 +1390,7 @@ type SystemArticleSearch struct {
1374 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人] 1390 TargetUser int `json:"targetUser"` //分发方式 [0分发给所有人、1分发给指定的人]
1375 Operator Operator `json:"operator"` //运营操作人 1391 Operator Operator `json:"operator"` //运营操作人
1376 Source int `json:"source"` //来源[1用户发布、2运营发布] 1392 Source int `json:"source"` //来源[1用户发布、2运营发布]
  1393 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1377 } 1394 }
1378 1395
1379 type SystemArticleUpdateRequest struct { 1396 type SystemArticleUpdateRequest struct {
@@ -1389,6 +1406,7 @@ type SystemArticleUpdateRequest struct { @@ -1389,6 +1406,7 @@ type SystemArticleUpdateRequest struct {
1389 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 1406 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
1390 Tags []int64 `json:"tags"` // 标签 1407 Tags []int64 `json:"tags"` // 标签
1391 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 1408 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
  1409 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1392 } 1410 }
1393 1411
1394 type SystemArticleUpdateResponse struct { 1412 type SystemArticleUpdateResponse struct {
@@ -1417,6 +1435,7 @@ type SystemArticleCreateRequest struct { @@ -1417,6 +1435,7 @@ type SystemArticleCreateRequest struct {
1417 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本 1435 MatchUrl map[string]string `json:"matchUrl,optional"` // 匹配文章内容中的url文本
1418 ArticleDraftId int64 `json:"articleDraftId"` // 草稿ID 1436 ArticleDraftId int64 `json:"articleDraftId"` // 草稿ID
1419 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 1437 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
  1438 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1420 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1439 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
1421 } 1440 }
1422 1441
@@ -1486,6 +1505,7 @@ type SystemArticleGetHistoryResponse struct { @@ -1486,6 +1505,7 @@ type SystemArticleGetHistoryResponse struct {
1486 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人] 1505 TargetUser int `json:"targetUser"` // 分发方式 [0分发给所有人、1分发给指定的人]
1487 Tags []int64 `json:"tags"` // 标签 1506 Tags []int64 `json:"tags"` // 标签
1488 Cover string `json:"cover"` //封面 1507 Cover string `json:"cover"` //封面
  1508 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1489 } 1509 }
1490 1510
1491 type SystemArticleRestoreRequest struct { 1511 type SystemArticleRestoreRequest struct {
@@ -1546,6 +1566,7 @@ type MiniSearchArticleItem struct { @@ -1546,6 +1566,7 @@ type MiniSearchArticleItem struct {
1546 CreatedAt int64 `json:"createdAt"` 1566 CreatedAt int64 `json:"createdAt"`
1547 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读] 1567 MeReadFlag int `json:"meReadFlag"` //已读标识 [0:未读] [1:已读]
1548 Cover string `json:"cover"` //封面 1568 Cover string `json:"cover"` //封面
  1569 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1549 } 1570 }
1550 1571
1551 type SystemArticleDraftCreateRequest struct { 1572 type SystemArticleDraftCreateRequest struct {
@@ -1561,6 +1582,7 @@ type SystemArticleDraftCreateRequest struct { @@ -1561,6 +1582,7 @@ type SystemArticleDraftCreateRequest struct {
1561 Tags []int64 `json:"tags"` // 标签 1582 Tags []int64 `json:"tags"` // 标签
1562 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 1583 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
1563 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1584 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  1585 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1564 } 1586 }
1565 1587
1566 type SystemArticleDraftCreateResponse struct { 1588 type SystemArticleDraftCreateResponse struct {
@@ -1591,6 +1613,7 @@ type SystemArticleDraftUpdateRequest struct { @@ -1591,6 +1613,7 @@ type SystemArticleDraftUpdateRequest struct {
1591 Tags []int64 `json:"tags"` // 标签 1613 Tags []int64 `json:"tags"` // 标签
1592 AccessToken string `header:"x-mmm-accesstoken"` // 授权token 1614 AccessToken string `header:"x-mmm-accesstoken"` // 授权token
1593 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1615 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
  1616 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1594 } 1617 }
1595 1618
1596 type SystemArticleDraftUpdateResponse struct { 1619 type SystemArticleDraftUpdateResponse struct {
@@ -1631,6 +1654,7 @@ type SystemArticleDraftSearch struct { @@ -1631,6 +1654,7 @@ type SystemArticleDraftSearch struct {
1631 Author string `json:"author"` //发布人 1654 Author string `json:"author"` //发布人
1632 UpdatedAt int64 `json:"updatedAt"` //编辑时间 1655 UpdatedAt int64 `json:"updatedAt"` //编辑时间
1633 Cover string `json:"cover"` //封面 1656 Cover string `json:"cover"` //封面
  1657 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1634 } 1658 }
1635 1659
1636 type SystemArticleDraftDeleteRequest struct { 1660 type SystemArticleDraftDeleteRequest struct {
@@ -1672,6 +1696,7 @@ type SystemArticleDraftGetResponse struct { @@ -1672,6 +1696,7 @@ type SystemArticleDraftGetResponse struct {
1672 Tags []int64 `json:"tags"` // 标签 1696 Tags []int64 `json:"tags"` // 标签
1673 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落 1697 Paragraphs []Paragraph `json:"paragraphs,optional"` // 段落
1674 Cover string `json:"cover"` //封面 1698 Cover string `json:"cover"` //封面
  1699 + Attachments []FileInfo `json:"attachments,optional"` // 附件
1675 } 1700 }
1676 1701
1677 type SystemArticleSearchDeletedRequest struct { 1702 type SystemArticleSearchDeletedRequest struct {
@@ -36,6 +36,7 @@ type Article struct { @@ -36,6 +36,7 @@ type Article struct {
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 Cover string
  39 + Attachments []domain.FileInfo `gorm:"type:jsonb;serializer:json"`
39 } 40 }
40 41
41 func (m *Article) TableName() string { 42 func (m *Article) TableName() string {
@@ -32,6 +32,7 @@ type ArticleBackup struct { @@ -32,6 +32,7 @@ type ArticleBackup struct {
32 TargetUser int // 分发方式 0 分发给所有人 1 分发给指定的人 32 TargetUser int // 分发方式 0 分发给所有人 1 分发给指定的人
33 MatchUrl map[string]string `gorm:"type:jsonb;serializer:json"` // 匹配文章内容中的url文本 33 MatchUrl map[string]string `gorm:"type:jsonb;serializer:json"` // 匹配文章内容中的url文本
34 Show int 34 Show int
  35 + Attachments []domain.FileInfo `gorm:"type:jsonb;serializer:json"`
35 } 36 }
36 37
37 func (m *ArticleBackup) TableName() string { 38 func (m *ArticleBackup) TableName() string {
@@ -26,7 +26,7 @@ type ArticleDraft struct { @@ -26,7 +26,7 @@ type ArticleDraft struct {
26 WhoReview []int64 `gorm:"type:jsonb;serializer:json"` // 评论人 26 WhoReview []int64 `gorm:"type:jsonb;serializer:json"` // 评论人
27 Location domain.Location `gorm:"type:jsonb;serializer:json"` // 坐标 27 Location domain.Location `gorm:"type:jsonb;serializer:json"` // 坐标
28 MatchUrl map[string]string `gorm:"type:jsonb;serializer:json"` // 匹配文章内容中的url文本 28 MatchUrl map[string]string `gorm:"type:jsonb;serializer:json"` // 匹配文章内容中的url文本
29 - 29 + Attachments []domain.FileInfo `gorm:"type:jsonb;serializer:json"`
30 Section []*domain.ArticleSection `gorm:"type:jsonb;serializer:json"` 30 Section []*domain.ArticleSection `gorm:"type:jsonb;serializer:json"`
31 } 31 }
32 32
@@ -29,7 +29,7 @@ type ArticleDraftOperation struct { @@ -29,7 +29,7 @@ type ArticleDraftOperation struct {
29 UpdatedAt int64 `gorm:"comment:编辑时间"` // 编辑时间 29 UpdatedAt int64 `gorm:"comment:编辑时间"` // 编辑时间
30 IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` // 删除标记 30 IsDel soft_delete.DeletedAt `gorm:"softDelete:flag,DeletedAtField:DeletedAt"` // 删除标记
31 DeletedAt int64 `gorm:"comment:删除时间"` // 删除时间 31 DeletedAt int64 `gorm:"comment:删除时间"` // 删除时间
32 - 32 + Attachments []domain.FileInfo `gorm:"type:jsonb;serializer:json"`
33 Section []*domain.ArticleSection `gorm:"type:jsonb;serializer:json"` // 分段内容 33 Section []*domain.ArticleSection `gorm:"type:jsonb;serializer:json"` // 分段内容
34 } 34 }
35 35
@@ -178,6 +178,7 @@ func (repository *ArticleBackupRepository) ModelToDomainModel(from *models.Artic @@ -178,6 +178,7 @@ func (repository *ArticleBackupRepository) ModelToDomainModel(from *models.Artic
178 ChangeField: from.ChangeField, 178 ChangeField: from.ChangeField,
179 Videos: from.Videos, 179 Videos: from.Videos,
180 Show: domain.ArticleShow(from.Show), 180 Show: domain.ArticleShow(from.Show),
  181 + Attachments: from.Attachments,
181 } 182 }
182 // err := copier.Copy(to, from) 183 // err := copier.Copy(to, from)
183 return to, nil 184 return to, nil
@@ -207,6 +208,7 @@ func (repository *ArticleBackupRepository) DomainModelToModel(from *domain.Artic @@ -207,6 +208,7 @@ func (repository *ArticleBackupRepository) DomainModelToModel(from *domain.Artic
207 Videos: from.Videos, 208 Videos: from.Videos,
208 ChangeField: from.ChangeField, 209 ChangeField: from.ChangeField,
209 Show: int(from.Show), 210 Show: int(from.Show),
  211 + Attachments: from.Attachments,
210 } 212 }
211 // err := copier.Copy(to, from) 213 // err := copier.Copy(to, from)
212 return to, nil 214 return to, nil
@@ -162,6 +162,7 @@ func (repository *ArticleDraftRepository) ModelToDomainModel(from *models.Articl @@ -162,6 +162,7 @@ func (repository *ArticleDraftRepository) ModelToDomainModel(from *models.Articl
162 Location: from.Location, 162 Location: from.Location,
163 MatchUrl: from.MatchUrl, 163 MatchUrl: from.MatchUrl,
164 Section: from.Section, 164 Section: from.Section,
  165 + Attachments: from.Attachments,
165 } 166 }
166 // err := copier.Copy(to, from) 167 // err := copier.Copy(to, from)
167 return to, nil 168 return to, nil
@@ -185,6 +186,7 @@ func (repository *ArticleDraftRepository) DomainModelToModel(from *domain.Articl @@ -185,6 +186,7 @@ func (repository *ArticleDraftRepository) DomainModelToModel(from *domain.Articl
185 Location: from.Location, 186 Location: from.Location,
186 MatchUrl: from.MatchUrl, 187 MatchUrl: from.MatchUrl,
187 Section: from.Section, 188 Section: from.Section,
  189 + Attachments: from.Attachments,
188 } 190 }
189 // err := copier.Copy(to, from) 191 // err := copier.Copy(to, from)
190 return to, nil 192 return to, nil
@@ -452,6 +452,7 @@ func (repository *ArticleRepository) ModelToDomainModel(from *models.Article) (* @@ -452,6 +452,7 @@ func (repository *ArticleRepository) ModelToDomainModel(from *models.Article) (*
452 DeletedType: from.DeletedType, 452 DeletedType: from.DeletedType,
453 IsDel: int(from.IsDel), 453 IsDel: int(from.IsDel),
454 Cover: from.Cover, 454 Cover: from.Cover,
  455 + Attachments: from.Attachments,
455 } 456 }
456 return to, nil 457 return to, nil
457 } 458 }
@@ -485,6 +486,7 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (* @@ -485,6 +486,7 @@ func (repository *ArticleRepository) DomainModelToModel(from *domain.Article) (*
485 Operator: from.Operator, 486 Operator: from.Operator,
486 DeletedType: from.DeletedType, 487 DeletedType: from.DeletedType,
487 Cover: from.Cover, 488 Cover: from.Cover,
  489 + Attachments: from.Attachments,
488 } 490 }
489 // err := copier.Copy(to, from) 491 // err := copier.Copy(to, from)
490 return to, nil 492 return to, nil
@@ -36,9 +36,15 @@ type Article struct { @@ -36,9 +36,15 @@ type Article struct {
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 Cover string `json:"cover"` // 封面
  39 + Attachments []FileInfo `json:"attachments"` // 附件
39 // ...more 40 // ...more
40 } 41 }
41 42
  43 +type FileInfo struct {
  44 + Name string `json:"name"`
  45 + Url string `json:"url"`
  46 +}
  47 +
42 type ArticleRepository interface { 48 type ArticleRepository interface {
43 Insert(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) 49 Insert(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error)
44 Update(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) 50 Update(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error)
@@ -31,6 +31,7 @@ type ArticleBackup struct { @@ -31,6 +31,7 @@ type ArticleBackup struct {
31 Tags []int64 `json:"tags"` // 标签 31 Tags []int64 `json:"tags"` // 标签
32 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 32 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
33 Show ArticleShow `json:"show"` // 评论的展示状态(1显示,2不显示、) 33 Show ArticleShow `json:"show"` // 评论的展示状态(1显示,2不显示、)
  34 + Attachments []FileInfo `json:"attachments"` // 附件
34 } 35 }
35 36
36 type ArticleBackupRepository interface { 37 type ArticleBackupRepository interface {
@@ -24,8 +24,8 @@ type ArticleDraft struct { @@ -24,8 +24,8 @@ type ArticleDraft struct {
24 WhoReview []int64 `json:"whoReview"` // 评论人 24 WhoReview []int64 `json:"whoReview"` // 评论人
25 Location Location `json:"location"` // 坐标 25 Location Location `json:"location"` // 坐标
26 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本 26 MatchUrl map[string]string `json:"matchUrl"` // 匹配文章内容中的url文本
27 -  
28 Section []*ArticleSection `json:"section"` // 分段内容 27 Section []*ArticleSection `json:"section"` // 分段内容
  28 + Attachments []FileInfo `json:"attachments"` // 附件
29 } 29 }
30 type ArticleDraftRepository interface { 30 type ArticleDraftRepository interface {
31 Insert(ctx context.Context, conn transaction.Conn, dm *ArticleDraft) (*ArticleDraft, error) 31 Insert(ctx context.Context, conn transaction.Conn, dm *ArticleDraft) (*ArticleDraft, error)
@@ -28,6 +28,7 @@ type ArticleDraftOperation struct { @@ -28,6 +28,7 @@ type ArticleDraftOperation struct {
28 IsDel soft_delete.DeletedAt `json:"isDel,omitempty"` // 删除标记 28 IsDel soft_delete.DeletedAt `json:"isDel,omitempty"` // 删除标记
29 DeletedAt int64 `json:"deletedAt,omitempty"` // 删除时间 29 DeletedAt int64 `json:"deletedAt,omitempty"` // 删除时间
30 Section []*ArticleSection `json:"section"` // 分段内容 30 Section []*ArticleSection `json:"section"` // 分段内容
  31 + Attachments []FileInfo `json:"attachments"` // 附件
31 } 32 }
32 33
33 type ArticleDraftOperationRepository interface { 34 type ArticleDraftOperationRepository interface {
  1 +-- 附件
  2 +alter table article add column attachments jsonb;
  3 +alter table article_backup add column attachments jsonb;
  4 +alter table article_draft add column attachments jsonb;
  5 +alter table article_draft_operation add column attachments jsonb;