go-learn/internal/rest/post.go

95 lines
2.0 KiB
Go

package rest
import (
"go_redis_learn2/common/req"
response "go_redis_learn2/common/resp"
"go_redis_learn2/domain"
"go_redis_learn2/pkg"
"go_redis_learn2/service"
"github.com/gin-gonic/gin"
)
type IPostController interface {
CreatePost(c *gin.Context)
DeletePost(c *gin.Context)
UpdatePost(c *gin.Context)
SearchAllPost(c *gin.Context)
}
type PostHandler struct {
srv *service.PostService
}
var _ IPostController = (*PostHandler)(nil)
func NewPostHandler(srv *service.PostService) *PostHandler {
return &PostHandler{
srv: srv,
}
}
func (p *PostHandler) CreatePost(c *gin.Context) {
var postReq req.PostRequest
if c.ShouldBindJSON(&postReq) != nil {
response.FailWithMessage("参数错误", c)
return
}
post := domain.Post{
Title: postReq.Title,
Text: postReq.Text,
}
err := p.srv.CreatePost(post)
if err != nil {
response.FailWithMessage("创建文章失败", c)
return
}
response.OkWithMessage("创建文章成功", c)
}
func (p *PostHandler) DeletePost(c *gin.Context) {
id := c.Param("id")
idVal, err := pkg.StringToUint(id)
if err != nil {
response.FailWithMessage("id参数不合法", c)
return
}
if p.srv.DeletePost(idVal) != nil {
response.FailWithMessage("删除文章失败", c)
return
}
response.OkWithMessage("删除文章成功", c)
}
func (p *PostHandler) UpdatePost(c *gin.Context) {
var postReq req.PostRequest
id := c.Param("id")
if c.ShouldBindJSON(&postReq) != nil {
response.FailWithMessage("绑定post失败", c)
return
}
idVal, err := pkg.StringToUint(id)
if err != nil {
response.FailWithMessage("id参数不合法", c)
return
}
post := domain.Post{
ID: idVal,
Title: postReq.Title,
Text: postReq.Text,
}
if p.srv.UpdatePost(post) != nil {
response.FailWithMessage("更新文章失败", c)
return
}
response.OkWithMessage("更新文章成功", c)
}
func (p *PostHandler) SearchAllPost(c *gin.Context) {
posts, err := p.srv.GetAllPosts()
if err != nil {
response.FailWithMessage("文章获取失败", c)
return
}
response.OkWithData(posts, c)
}