108 lines
2.3 KiB
Go
108 lines
2.3 KiB
Go
package blog
|
||
|
||
import (
|
||
"context"
|
||
"strconv"
|
||
"strings"
|
||
|
||
"github.com/infraboard/mcube/v2/ioc"
|
||
"gitlab.com/go-course-project/go17/vblog/utils"
|
||
)
|
||
|
||
const (
|
||
AppName = "blog"
|
||
)
|
||
|
||
func GetService() Service {
|
||
return ioc.Controller().Get(AppName).(Service)
|
||
}
|
||
|
||
type Service interface {
|
||
// 创建博客
|
||
CreateBlog(context.Context, *CreateBlogRequest) (*Blog, error)
|
||
// 博客列表查询
|
||
QueryBlog(context.Context, *QueryBlogRequest) (*BlogSet, error)
|
||
// 博客详情查询
|
||
DescribeBlog(context.Context, *DescribeBlogRequest) (*Blog, error)
|
||
// 博客编辑
|
||
UpdateBlog(context.Context, *UpdateBlogRequest) (*Blog, error)
|
||
// 发布
|
||
PublishBlog(context.Context, *PublishBlogRequest) (*Blog, error)
|
||
// 删除
|
||
DeleteBlog(context.Context, *DeleteBlogRequest) error
|
||
}
|
||
|
||
func NewDeleteBlogRequest[T int | string](id T) *DeleteBlogRequest {
|
||
var idValue int
|
||
switch v := any(id).(type) {
|
||
case int:
|
||
idValue = v
|
||
case string:
|
||
parsedID, _ := strconv.ParseUint(v, 10, 0)
|
||
idValue = int(parsedID)
|
||
}
|
||
|
||
return &DeleteBlogRequest{
|
||
GetRequest: utils.GetRequest{
|
||
Id: uint(idValue),
|
||
},
|
||
}
|
||
}
|
||
|
||
type DeleteBlogRequest struct {
|
||
utils.GetRequest
|
||
}
|
||
|
||
type PublishBlogRequest struct {
|
||
utils.GetRequest
|
||
StatusSpec
|
||
}
|
||
|
||
type UpdateBlogRequest struct {
|
||
utils.GetRequest
|
||
CreateBlogRequest
|
||
}
|
||
|
||
type DescribeBlogRequest struct {
|
||
utils.GetRequest
|
||
}
|
||
|
||
func NewQueryBlogRequest() *QueryBlogRequest {
|
||
return &QueryBlogRequest{
|
||
PageRequest: *utils.NewPageRequest(),
|
||
Tags: map[string]string{},
|
||
}
|
||
}
|
||
|
||
type QueryBlogRequest struct {
|
||
// 分页参数
|
||
utils.PageRequest
|
||
// 文章标题模糊匹配, Golang
|
||
Keywords string `json:"keywords" form:"keywords"`
|
||
// 状态过滤参数, 作者:nil, 访客: STAGE_PUBLISHED
|
||
Stage *STAGE `json:"stage" form:"stage"`
|
||
// 查询某个用户具体的文章: 给作者用的
|
||
CreateBy string `json:"create_by" form:"create_by"`
|
||
// 分类
|
||
Category string `json:"category" form:"category"`
|
||
// 查询Tag相关的文章
|
||
// SELECT *
|
||
// FROM my_table
|
||
// WHERE data->>'$.name' = '某个名字';
|
||
Tags map[string]string `json:"tag" form:"-"`
|
||
}
|
||
|
||
// tags=key=value,key=value
|
||
// key=value,key=value
|
||
// key=value
|
||
func (r *QueryBlogRequest) SetTag(tag string) {
|
||
kvItem := strings.Split(tag, ",")
|
||
for i := range kvItem {
|
||
kvString := kvItem[i]
|
||
kv := strings.Split(kvString, "=")
|
||
if len(kv) > 1 {
|
||
r.Tags[kv[0]] = strings.Join(kv[1:], "=")
|
||
}
|
||
}
|
||
}
|