package blog import ( "time" "github.com/infraboard/mcube/v2/exception" "github.com/infraboard/mcube/v2/ioc/config/validator" "github.com/infraboard/mcube/v2/tools/pretty" "gitlab.com/go-course-project/go17/vblog/utils" ) func NewBlogSet() *BlogSet { return &BlogSet{ Items: []*Blog{}, } } type BlogSet struct { Total int64 `json:"total"` Items []*Blog `json:"items"` } func (b *BlogSet) String() string { return pretty.ToJSON(b) } func (b *BlogSet) Add(item *Blog) { b.Items = append(b.Items, item) b.Total++ } func NewBlog(in *CreateBlogRequest) (*Blog, error) { if err := in.Validate(); err != nil { return nil, exception.NewBadRequest("参数异常: %s", err) } return &Blog{ ResourceMeta: *utils.NewResourceMeta(), CreateBlogRequest: *in, }, nil } type Blog struct { // 存放到数据里的对象的远数据信息 utils.ResourceMeta // 创建是的具体信息 CreateBlogRequest // 文章状态 Status } func (t *Blog) String() string { return pretty.ToJSON(t) } func (t *Blog) TableName() string { return "blogs" } type CreateBlogRequest struct { // 标题 Title string `json:"title" gorm:"column:title;type:varchar(200)" validate:"required"` // 摘要 Summary string `json:"summary" gorm:"column:summary;type:text" validate:"required"` // 内容 Content string `json:"content" gorm:"column:content;type:text" validate:"required"` // 分类 Category string `json:"category" gorm:"column:category;type:varchar(200);index" validate:"required"` // 标签 Tags map[string]string `json:"tags" gorm:"column:tags;serializer:json"` } func (r *CreateBlogRequest) Validate() error { return validator.Validate(r) } type Status struct { StatusSpec // 状态变化的时间, 拿发布时间 ChangeAt *time.Time `json:"change_at" gorm:"column:change_at"` } type StatusSpec struct { // 0: 草稿, 1: 已发布, 2: 审核 ... Stage STAGE `json:"stage" gorm:"column:stage;type:tinyint(1);index"` }