blog

package
v0.0.0-...-6a8978f Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2022 License: MIT Imports: 10 Imported by: 0

README

文章管理

定义接口与数据结构

数据结构和接口的定义(产品)

为接口添加测试用例(TDD)

实现接口

编写接口对外的HTTP暴露Handler

Documentation

Index

Constants

View Source
const (
	AppName = "blog"
)

Variables

View Source
var (
	STATUS_MAP = map[Status]string{
		STATUS_DRAFT:     "draft",
		STATUS_PUBLISHED: "published",
	}
)

Functions

This section is empty.

Types

type Blog

type Blog struct {
	// 文章Id
	Id int `json:"id"`
	// 创建时间
	CreateAt int64 `json:"create_at"`
	// 更新时间
	UpdateAt int64 `json:"update_at"`
	// 发布时间
	PublishAt int64 `json:"publish_at"`
	// 用户提交数据
	*CreateBlogRequest
	// 文章状态 草稿/发布
	Status Status `json:"status"`
	// 博客标签
	Tags []*tag.Tag `json:"tags"`
}

func NewCreateBlog

func NewCreateBlog(req *CreateBlogRequest) *Blog

func (*Blog) String

func (b *Blog) String() string

type BlogSet

type BlogSet struct {
	// 总条目个数, 用于前端分页
	Total int64 `json:"total"`
	// 列表数据
	Items []*Blog `json:"items"`
}

func NewBlogSet

func NewBlogSet() *BlogSet

func (*BlogSet) String

func (b *BlogSet) String() string

type CreateBlogRequest

type CreateBlogRequest struct {
	// 文章摘要信息,通过提前Content内容获取
	Summary string `json:"summary" validate:"required"`
	// 文章图片
	TitleImg string `json:"title_img"`
	// 文章标题
	TitleName string `json:"title_name" validate:"required"`
	// 文章副标题
	SubTitle string `json:"sub_title"`
	// 文章内容
	Content string `json:"content" validate:"required"`
	// 文章作者
	Author string `json:"author"`
}

func NewCreateBlogRequest

func NewCreateBlogRequest() *CreateBlogRequest

func (*CreateBlogRequest) Validate

func (req *CreateBlogRequest) Validate() error

创建对象的校验

type DeleteBlogRequest

type DeleteBlogRequest struct {
	Id int
}

func NewDeleteBlogRequest

func NewDeleteBlogRequest(id int) *DeleteBlogRequest

type DescribeBlogRequest

type DescribeBlogRequest struct {
	Id int
}

func NewDescribeBlogRequest

func NewDescribeBlogRequest(id int) *DescribeBlogRequest

type QueryBlogRequest

type QueryBlogRequest struct {
	PageSize   int
	PageNumber int
	Keywords   string
	// 补充状态过滤参数, 用于web 前台 过滤已经发布的文章
	// 比如过滤 状态为发布的文章
	Status  *Status
	BlogIds []int
}

func NewQueryBlogRequest

func NewQueryBlogRequest() *QueryBlogRequest

func NewQueryBlogRequestFromHTTP

func NewQueryBlogRequestFromHTTP(r *http.Request) (*QueryBlogRequest, error)

http query string: ?keywords=b&page_size=20&page_number=1&status=published

func (*QueryBlogRequest) Offset

func (req *QueryBlogRequest) Offset() int

type Service

type Service interface {
	// 创建文章
	// ctx 接口的上下文, ctx用于区分业务功能数据和非业务功能数据
	// 业务功能数据: 用户提交的数据, 创建Blog的CreateBlogRequest
	// 需要添加接口Trace, RequestId
	// 非业务功能数据:RequestId, 需要从上下文传递
	CreateBlog(context.Context, *CreateBlogRequest) (*Blog, error)

	// 更新文章
	UpdateBlog(context.Context, *UpdateBlogRequest) (*Blog, error)

	// 文章的删除
	// 为什么删除后,还要返回数据, 方便前端和事件总线使用
	DeleteBlog(context.Context, *DeleteBlogRequest) (*Blog, error)

	// 文章列表
	QueryBlog(context.Context, *QueryBlogRequest) (*BlogSet, error)

	// 文章详情
	DescribeBlog(context.Context, *DescribeBlogRequest) (*Blog, error)

	// 更新文章的状态
	UpdateBlogStatus(context.Context, *UpdateBlogStatusRequest) (*Blog, error)
}

type Status

type Status int
const (
	// 草稿
	STATUS_DRAFT Status = 0
	// 已发布
	STATUS_PUBLISHED Status = 1
)

func ParseStatusFromString

func ParseStatusFromString(str string) (Status, error)

ParseTagTypeFromString Parse TagType from string: "draft"

func (Status) MarshalJSON

func (s Status) MarshalJSON() ([]byte, error)

Json允许用户自定义序列化和反序列化的逻辑 控制序列化的过程 ---> draft {"status": "draft"}

func (Status) String

func (s Status) String() string

Status 实现 fmt Stringer接口

func (*Status) UnmarshalJSON

func (s *Status) UnmarshalJSON(b []byte) error

{"status": 1} 定义类型的反序列化 {"status": "published"}

type UpdateBlogRequest

type UpdateBlogRequest struct {
	BlogId     int
	UpdateMode UpdateMode
	*CreateBlogRequest
}

func NewPatchUpdateBlogRequest

func NewPatchUpdateBlogRequest(id int) *UpdateBlogRequest

func NewPutUpdateBlogRequest

func NewPutUpdateBlogRequest(id int) *UpdateBlogRequest

type UpdateBlogStatusRequest

type UpdateBlogStatusRequest struct {
	// 文章Id
	Id int `json:"id"`
	// 文章状态 草稿/发布
	Status Status `json:"status"`
}

func NewDefaultUpdateBlogStatusRequest

func NewDefaultUpdateBlogStatusRequest() *UpdateBlogStatusRequest

func NewUpdateBlogStatusRequest

func NewUpdateBlogStatusRequest(id int, status Status) *UpdateBlogStatusRequest

type UpdateMode

type UpdateMode string

更新模式

const (
	// 全量更新
	UPDATE_MODE_PUT UpdateMode = "put"
	// 部分更新
	UPDATE_MODE_PATCH UpdateMode = "patch"
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL