作者 tangxvhui

暂存

1 -package models  
2 -  
3 -import (  
4 - "time"  
5 -  
6 - "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"  
7 - "gorm.io/gorm"  
8 -)  
9 -  
10 -type Article struct {  
11 - Id int64  
12 - CreatedAt time.Time  
13 - UpdatedAt time.Time  
14 - DeletedAt gorm.DeletedAt  
15 - AuthorId int64 // 发布人  
16 - Author domain.UserSimple // 发布人  
17 - Title string // 文章标题  
18 - Images []domain.Image // 图片  
19 - WhoRead []int64 // 谁可以看  
20 - WhoReview []int64 // 评论人  
21 - Location domain.Location // 坐标  
22 - CountLove int // 点赞数量  
23 - CountComment int // 评论数量  
24 - Tags []int // 标签  
25 - // ...more  
26 -}  
27 -  
28 -func (m *Article) TableName() string {  
29 - return "article"  
30 -}  
31 -  
32 -func (m *Article) BeforeCreate(tx *gorm.DB) (err error) {  
33 - m.CreatedAt = time.Now()  
34 - m.UpdatedAt = time.Now()  
35 - return  
36 -}  
37 -  
38 -func (m *Article) BeforeUpdate(tx *gorm.DB) (err error) {  
39 - m.UpdatedAt = time.Now()  
40 - return  
41 -}  
1 -package models  
2 -  
3 -import (  
4 - "time"  
5 -  
6 - "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"  
7 - "gorm.io/gorm"  
8 -)  
9 -  
10 -// 编辑文章后保存的历史记录  
11 -type ArticleBackup struct {  
12 - Id int64  
13 - UpdatedAt time.Time // 更新时间  
14 - DeletedAt gorm.DeletedAt //  
15 - CreatedAt time.Time //  
16 - Operator domain.UserSimple // 操作人  
17 - Title string // 标题  
18 - Section []domain.ArticleSection // 分段内容  
19 - Images []domain.Image // 图片  
20 - Action string // 操作  
21 - WhoRead []int64 // 谁可以看  
22 - WhoReview []int64 // 评论人  
23 - Tags []int // 标签  
24 -}  
25 -  
26 -func (m *ArticleBackup) TableName() string {  
27 - return "article_backup"  
28 -}  
29 -  
30 -func (m *ArticleBackup) BeforeCreate(tx *gorm.DB) (err error) {  
31 - m.CreatedAt = time.Now()  
32 - m.UpdatedAt = time.Now()  
33 - return  
34 -}  
35 -  
36 -func (m *ArticleBackup) BeforeUpdate(tx *gorm.DB) (err error) {  
37 - m.UpdatedAt = time.Now()  
38 - return  
39 -}  
1 -package models  
2 -  
3 -import (  
4 - "time"  
5 -  
6 - "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"  
7 - "gorm.io/gorm"  
8 -)  
9 -  
10 -// 文章评论  
11 -type ArticleComment struct {  
12 - Id int64 // 评论id  
13 - UpdatedAt time.Time // 更新时间  
14 - DeletedAt gorm.DeletedAt //  
15 - CreatedAt time.Time //  
16 - Pid int64 // 对哪个评论进行回复  
17 - TopId int64 // 归属于最上级的哪个评论  
18 - ArticleId int64 // 文章id  
19 - ArticleSectionId int64 // 文本内容段落id  
20 - SectionContent string // 引用的文章内容文本  
21 - FromUserId int64 // 谁填写的评论  
22 - FromUser domain.UserSimple // 谁填写的评论  
23 - ToUserId int64 // 回复谁的评论  
24 - ToUser domain.UserSimple // 回复谁的评论  
25 - Content string // 评论内容  
26 - CountReply int // 回复数量  
27 - CountUserLove int // 用户点赞数量  
28 - CountAdminLove int // 运营点赞数量  
29 - Show int // 评论的展示状态(0显示、1不显示)  
30 - // ...more  
31 -}  
32 -  
33 -func (m *ArticleComment) TableName() string {  
34 - return "article_comment"  
35 -}  
36 -  
37 -func (m *ArticleComment) BeforeCreate(tx *gorm.DB) (err error) {  
38 - m.CreatedAt = time.Now()  
39 - m.UpdatedAt = time.Now()  
40 - return  
41 -}  
42 -  
43 -func (m *ArticleComment) BeforeUpdate(tx *gorm.DB) (err error) {  
44 - m.UpdatedAt = time.Now()  
45 - return  
46 -}  
1 -package models  
2 -  
3 -import (  
4 - "time"  
5 -  
6 - "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"  
7 - "gorm.io/gorm"  
8 -)  
9 -  
10 -// 填写文章时保存的草稿  
11 -  
12 -type ArticleDraft struct {  
13 - Id int64  
14 - CreatedAt time.Time  
15 - UpdatedAt time.Time  
16 - DeletedAt gorm.DeletedAt  
17 - Template int // 填写内容时用的样板0、无 1、演绎式 2、归纳式  
18 - Content []string // 文章内容  
19 - AuthorId int64 // 发布人  
20 - Title string // 文章标题  
21 - Images []domain.Image // 图片  
22 - WhoRead []int64 // 谁可以看  
23 - WhoReview []int64 // 评论人  
24 - Location domain.Location // 坐标  
25 -}  
26 -  
27 -func (m *ArticleDraft) TableName() string {  
28 - return "article_draft"  
29 -}  
30 -  
31 -func (m *ArticleDraft) BeforeCreate(tx *gorm.DB) (err error) {  
32 - m.CreatedAt = time.Now()  
33 - m.UpdatedAt = time.Now()  
34 - return  
35 -}  
36 -  
37 -func (m *ArticleDraft) BeforeUpdate(tx *gorm.DB) (err error) {  
38 - m.UpdatedAt = time.Now()  
39 - return  
40 -}  
1 -package models  
2 -  
3 -import (  
4 - "time"  
5 -  
6 - "gorm.io/gorm"  
7 -)  
8 -  
9 -// 文章段落  
10 -type ArticleSection struct {  
11 - Id int64  
12 - UpdatedAt time.Time // 更新时间  
13 - DeletedAt gorm.DeletedAt //  
14 - CreatedAt time.Time //  
15 - ArticleId int64 // 文章id  
16 - Content string // 文本内容  
17 - SortBy int // 排序  
18 - TotalComment int // 评论的数量  
19 -}  
20 -  
21 -func (m *ArticleSection) TableName() string {  
22 - return "article_section"  
23 -}  
24 -  
25 -func (m *ArticleSection) BeforeCreate(tx *gorm.DB) (err error) {  
26 - m.CreatedAt = time.Now()  
27 - m.UpdatedAt = time.Now()  
28 - return  
29 -}  
30 -  
31 -func (m *ArticleSection) BeforeUpdate(tx *gorm.DB) (err error) {  
32 - m.UpdatedAt = time.Now()  
33 - return  
34 -}  
@@ -2,9 +2,13 @@ package repository @@ -2,9 +2,13 @@ package repository
2 2
3 import ( 3 import (
4 "context" 4 "context"
  5 +
5 "github.com/jinzhu/copier" 6 "github.com/jinzhu/copier"
6 "github.com/pkg/errors" 7 "github.com/pkg/errors"
7 "github.com/tiptok/gocomm/pkg/cache" 8 "github.com/tiptok/gocomm/pkg/cache"
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/models"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
  11 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
8 "gorm.io/gorm" 12 "gorm.io/gorm"
9 ) 13 )
10 14
@@ -2,9 +2,13 @@ package repository @@ -2,9 +2,13 @@ package repository
2 2
3 import ( 3 import (
4 "context" 4 "context"
  5 +
5 "github.com/jinzhu/copier" 6 "github.com/jinzhu/copier"
6 "github.com/pkg/errors" 7 "github.com/pkg/errors"
7 "github.com/tiptok/gocomm/pkg/cache" 8 "github.com/tiptok/gocomm/pkg/cache"
  9 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/models"
  10 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
  11 + "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/domain"
8 "gorm.io/gorm" 12 "gorm.io/gorm"
9 ) 13 )
10 14
@@ -2,39 +2,68 @@ package domain @@ -2,39 +2,68 @@ package domain
2 2
3 import ( 3 import (
4 "context" 4 "context"
5 - "time"  
6 5
7 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" 6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
8 ) 7 )
9 8
10 // 文章 9 // 文章
11 type Article struct { 10 type Article struct {
12 - Id int64 `json:"id"`  
13 - CreatedAt time.Time `json:"createdAt"`  
14 - UpdatedAt time.Time `json:"updatedAt"`  
15 - DeletedAt *time.Time `json:"deletedAt"`  
16 - AuthorId int64 `json:"authorId"` // 发布人  
17 - Author UserSimple `json:"author"` // 发布人  
18 - Title string `json:"title"` // 文章标题  
19 - Images []Image `json:"images"` // 图片  
20 - WhoRead []int64 `json:"whoRead"` // 谁可以看  
21 - WhoReview []int64 `json:"whoReview"` // 评论人  
22 - Location Location `json:"location"` // 坐标  
23 - CountLove int `json:"countLove"` // 点赞数量  
24 - CountComment int `json:"countComment"` // 评论数量  
25 - Tags []int `json:"tags"` // 标签  
26 - Show ArticleShow `json:"showState"` // 评论的展示状态(0显示、1不显示) 11 + Id int64 `json:"id"`
  12 + CompanyId int64 `json:"companyId"`
  13 + CreatedAt int64 `json:"createdAt,omitempty"`
  14 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  15 + DeletedAt int64 `json:"deletedAt,omitempty"`
  16 + Version int `json:"version,omitempty"`
  17 + AuthorId int64 `json:"authorId"` // 发布人
  18 + Author User `json:"author"` // 发布人
  19 + Title string `json:"title"` // 文章标题
  20 + Images []Image `json:"images"` // 图片
  21 + WhoRead []int64 `json:"whoRead"` // 谁可以看
  22 + WhoReview []int64 `json:"whoReview"` // 评论人
  23 + Location Location `json:"location"` // 坐标
  24 + TargetUser ArticleTarget `json:"targetUser"` // 分发方式 0 分发给所有人 1 分发给指定的人
  25 + CountLove int `json:"countLove"` // 点赞数量
  26 + CountComment int `json:"countComment"` // 评论数量
  27 + Tags []int `json:"tags"` // 标签
  28 + Show ArticleShow `json:"showState"` // 评论的展示状态(0显示、1不显示)
27 // ...more 29 // ...more
28 } 30 }
29 31
  32 +type ArticleTarget int
  33 +
  34 +const (
  35 + ArticleTargetAll ArticleTarget = 0 //内容分发给所有人
  36 + ArticleTargetLimit ArticleTarget = 1 //分发给指定的人
  37 +)
  38 +
  39 +func (a ArticleTarget) Named() string {
  40 + switch a {
  41 + case ArticleTargetAll:
  42 + return "所以人"
  43 + case ArticleTargetLimit:
  44 + return "指定人"
  45 + }
  46 + return ""
  47 +}
  48 +
30 // 文章的展示状态(0显示、1不显示) 49 // 文章的展示状态(0显示、1不显示)
31 type ArticleShow int 50 type ArticleShow int
32 51
33 const ( 52 const (
34 - ArticleShowEnable CommentShow = 0  
35 - ArticleShowDisable CommentShow = 1 53 + ArticleShowEnable ArticleShow = 0
  54 + ArticleShowDisable ArticleShow = 1
36 ) 55 )
37 56
  57 +func (a ArticleShow) Named() string {
  58 + switch a {
  59 + case ArticleShowEnable:
  60 + return "显示"
  61 + case ArticleShowDisable:
  62 + return "隐藏"
  63 + }
  64 + return ""
  65 +}
  66 +
38 type ArticleRepository interface { 67 type ArticleRepository interface {
39 Insert(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) 68 Insert(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error)
40 Update(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error) 69 Update(ctx context.Context, conn transaction.Conn, dm *Article) (*Article, error)
@@ -2,7 +2,6 @@ package domain @@ -2,7 +2,6 @@ package domain
2 2
3 import ( 3 import (
4 "context" 4 "context"
5 - "time"  
6 5
7 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" 6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
8 ) 7 )
@@ -10,9 +9,11 @@ import ( @@ -10,9 +9,11 @@ import (
10 // 编辑文章后保存的历史记录 9 // 编辑文章后保存的历史记录
11 type ArticleBackup struct { 10 type ArticleBackup struct {
12 Id int64 `json:"id"` 11 Id int64 `json:"id"`
13 - UpdatedAt time.Time `json:"updatedAt"` // 更新时间  
14 - DeletedAt *time.Time `json:"deletedAt"` //  
15 - CreatedAt time.Time `json:"createdAt"` // 12 + CompanyId int64 `json:"companyId"`
  13 + CreatedAt int64 `json:"createdAt,omitempty"`
  14 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  15 + DeletedAt int64 `json:"deletedAt,omitempty"`
  16 + Version int `json:"version,omitempty"`
16 Operator UserSimple `json:"operator"` // 操作人 17 Operator UserSimple `json:"operator"` // 操作人
17 Title string `json:"title"` // 标题 18 Title string `json:"title"` // 标题
18 Section []ArticleSection `json:"section"` // 分段内容 19 Section []ArticleSection `json:"section"` // 分段内容
@@ -2,26 +2,27 @@ package domain @@ -2,26 +2,27 @@ package domain
2 2
3 import ( 3 import (
4 "context" 4 "context"
5 - "time"  
6 5
7 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" 6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
8 ) 7 )
9 8
10 // 文章评论 9 // 文章评论
11 type ArticleComment struct { 10 type ArticleComment struct {
12 - Id int64 `json:"id"` // 评论id  
13 - UpdatedAt time.Time `json:"updatedAt"` // 更新时间  
14 - DeletedAt *time.Time `json:"deletedAt"` //  
15 - CreatedAt time.Time `json:"createdAt"` // 11 + Id int64 `json:"id"` // 评论id
  12 + CompanyId int64 `json:"companyId"`
  13 + CreatedAt int64 `json:"createdAt,omitempty"`
  14 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  15 + DeletedAt int64 `json:"deletedAt,omitempty"`
  16 + Version int `json:"version,omitempty"`
16 Pid int64 `json:"pid"` // 对哪个评论进行回复 17 Pid int64 `json:"pid"` // 对哪个评论进行回复
17 TopId int64 `json:"topId"` // 归属于最上级的哪个评论 18 TopId int64 `json:"topId"` // 归属于最上级的哪个评论
18 ArticleId int64 `json:"articleId"` // 文章id 19 ArticleId int64 `json:"articleId"` // 文章id
19 ArticleSectionId int64 `json:"articleSectionId"` // 文本内容id 20 ArticleSectionId int64 `json:"articleSectionId"` // 文本内容id
20 SectionContent string `json:"sectionContent"` // 引用的文章内容文本 21 SectionContent string `json:"sectionContent"` // 引用的文章内容文本
21 FromUserId int64 `json:"fromUserId"` // 谁填写的评论 22 FromUserId int64 `json:"fromUserId"` // 谁填写的评论
22 - FromUser UserSimple `json:"fromUser"` // 谁填写的评论 23 + FromUser User `json:"fromUser"` // 谁填写的评论
23 ToUserId int64 `json:"toUserId"` // 回复谁的评论 24 ToUserId int64 `json:"toUserId"` // 回复谁的评论
24 - ToUser UserSimple `json:"toUser"` // 回复谁的评论 25 + ToUser User `json:"toUser"` // 回复谁的评论
25 Content string `json:"content"` // 评论内容 26 Content string `json:"content"` // 评论内容
26 CountReply int `json:"countReply"` // 回复数量 27 CountReply int `json:"countReply"` // 回复数量
27 CountUserLove int `json:"countUserLove"` // 用户点赞数量 28 CountUserLove int `json:"countUserLove"` // 用户点赞数量
@@ -10,9 +10,11 @@ import ( @@ -10,9 +10,11 @@ import (
10 10
11 type ArticleDraft struct { 11 type ArticleDraft struct {
12 Id int64 `json:"id"` 12 Id int64 `json:"id"`
13 - CreatedAt int64 `json:"createdAt"`  
14 - UpdatedAt int64 `json:"updatedAt"`  
15 - DeletedAt uint `json:"-"` 13 + CompanyId int64 `json:"companyId"`
  14 + CreatedAt int64 `json:"createdAt,omitempty"`
  15 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  16 + DeletedAt int64 `json:"deletedAt,omitempty"`
  17 + Version int `json:"version,omitempty"`
16 Template int `json:"template"` // 填写内容时用的样板0、无 1、演绎式 2、归纳式 18 Template int `json:"template"` // 填写内容时用的样板0、无 1、演绎式 2、归纳式
17 Content []string `json:"content"` // 文章内容 19 Content []string `json:"content"` // 文章内容
18 AuthorId int64 `json:"authorId"` // 发布人 20 AuthorId int64 `json:"authorId"` // 发布人
@@ -2,21 +2,22 @@ package domain @@ -2,21 +2,22 @@ package domain
2 2
3 import ( 3 import (
4 "context" 4 "context"
5 - "time"  
6 5
7 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" 6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
8 ) 7 )
9 8
10 // 文章段落 9 // 文章段落
11 type ArticleSection struct { 10 type ArticleSection struct {
12 - Id int64 `json:"id"`  
13 - UpdatedAt time.Time `json:"updatedAt"` // 更新时间  
14 - DeletedAt *time.Time `json:"deletedAt"` //  
15 - CreatedAt time.Time `json:"createdAt"` //  
16 - ArticleId int64 `json:"articleId"` // 文章id  
17 - Content string `json:"content"` // 文本内容  
18 - SortBy int `json:"sortBy"` // 排序  
19 - TotalComment int `json:"totalComment"` // 评论的数量 11 + Id int64 `json:"id"`
  12 + CompanyId int64 `json:"companyId"`
  13 + CreatedAt int64 `json:"createdAt,omitempty"`
  14 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  15 + DeletedAt int64 `json:"deletedAt,omitempty"`
  16 + Version int `json:"version,omitempty"`
  17 + ArticleId int64 `json:"articleId"` // 文章id
  18 + Content string `json:"content"` // 文本内容
  19 + SortBy int `json:"sortBy"` // 排序
  20 + TotalComment int `json:"totalComment"` // 评论的数量
20 } 21 }
21 22
22 type ArticleSectionRepository interface { 23 type ArticleSectionRepository interface {
@@ -2,7 +2,6 @@ package domain @@ -2,7 +2,6 @@ package domain
2 2
3 import ( 3 import (
4 "context" 4 "context"
5 - "time"  
6 5
7 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction" 6 "gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
8 ) 7 )
@@ -10,14 +9,16 @@ import ( @@ -10,14 +9,16 @@ import (
10 // 文章的标签 9 // 文章的标签
11 10
12 type ArticleTag struct { 11 type ArticleTag struct {
13 - Id int64 `json:"id"`  
14 - UpdatedAt int64 `json:"updatedAt"` // 更新时间  
15 - DeletedAt *time.Time `json:"deletedAt"` //  
16 - CreatedAt time.Time `json:"createdAt"` //  
17 - Image Image `json:"image"` // 图片  
18 - Name string `json:"name"` // 标签名称  
19 - Group string `json:"group"` // 标签分类  
20 - Remark string `json:"remark"` // 备注 12 + Id int64 `json:"id"`
  13 + CompanyId int64 `json:"companyId"`
  14 + CreatedAt int64 `json:"createdAt,omitempty"`
  15 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  16 + DeletedAt int64 `json:"deletedAt,omitempty"`
  17 + Version int `json:"version,omitempty"`
  18 + Image Image `json:"image"` // 图片
  19 + Name string `json:"name"` // 标签名称
  20 + Group string `json:"group"` // 标签分类
  21 + Remark string `json:"remark"` // 备注
21 } 22 }
22 type ArticleTagRepository interface { 23 type ArticleTagRepository interface {
23 Insert(ctx context.Context, conn transaction.Conn, dm *ArticleTag) (*ArticleTag, error) 24 Insert(ctx context.Context, conn transaction.Conn, dm *ArticleTag) (*ArticleTag, error)
1 package domain 1 package domain
2 2
3 -import "time"  
4 -  
5 // 人员点赞标记 3 // 人员点赞标记
6 4
7 type UserLoveFlag struct { 5 type UserLoveFlag struct {
8 - Id int64 `json:"id"`  
9 - ArticleId int64 `json:"articleId"` // 点赞文章时,文章id  
10 - CommentId int64 `json:"commentId"` // 点赞评论时,填评论id  
11 - UserId int64 `json:"userId"`  
12 - CreatedAt time.Time `json:"createdAt"`  
13 - UpdatedAt time.Time `json:"updatedAt"`  
14 - DeletedAt *time.Time `json:"deletedAt"` 6 + Id int64 `json:"id"`
  7 + ArticleId int64 `json:"articleId"` // 点赞文章时,文章id
  8 + CommentId int64 `json:"commentId"` // 点赞评论时,填评论id
  9 + UserId int64 `json:"userId"`
  10 + CreatedAt int64 `json:"createdAt,omitempty"`
  11 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  12 + DeletedAt int64 `json:"deletedAt,omitempty"`
  13 + Version int `json:"version,omitempty"`
15 } 14 }
1 package domain 1 package domain
2 2
3 -import "time"  
4 -  
5 // 人员查看文章详情后,标记一个记录 3 // 人员查看文章详情后,标记一个记录
6 // 浏览记录 4 // 浏览记录
7 5
8 type UserReadArticle struct { 6 type UserReadArticle struct {
9 - Id int64 `json:"id"`  
10 - UserId int64 `json:"userId"`  
11 - ArticleId int64 `json:"articleId"`  
12 - Title string `json:"title"`  
13 - Author UserSimple `json:"author"` // 发布人  
14 - CreatedAt time.Time `json:"createdAt"`  
15 - UpdatedAt time.Time `json:"updatedAt"`  
16 - DeletedAt *time.Time `json:"deletedAt"` 7 + Id int64 `json:"id"`
  8 + UserId int64 `json:"userId"`
  9 + ArticleId int64 `json:"articleId"`
  10 + Title string `json:"title"`
  11 + Author User `json:"author"` // 发布人
  12 + CreatedAt int64 `json:"createdAt,omitempty"`
  13 + UpdatedAt int64 `json:"updatedAt,omitempty"`
  14 + DeletedAt int64 `json:"deletedAt,omitempty"`
  15 + Version int `json:"version,omitempty"`
17 } 16 }