|
|
|
package api
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"github.com/rocboss/paopao-ce/global"
|
|
|
|
"github.com/rocboss/paopao-ce/internal/core"
|
|
|
|
"github.com/rocboss/paopao-ce/internal/model"
|
|
|
|
"github.com/rocboss/paopao-ce/internal/service"
|
|
|
|
"github.com/rocboss/paopao-ce/pkg/app"
|
|
|
|
"github.com/rocboss/paopao-ce/pkg/convert"
|
|
|
|
"github.com/rocboss/paopao-ce/pkg/errcode"
|
|
|
|
)
|
|
|
|
|
|
|
|
func GetPostList(c *gin.Context) {
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
|
|
|
|
q := &core.QueryT{
|
|
|
|
Query: c.Query("query"),
|
|
|
|
Type: "search",
|
|
|
|
}
|
|
|
|
if c.Query("type") == "tag" {
|
|
|
|
q.Type = "tag"
|
|
|
|
}
|
|
|
|
|
|
|
|
if q.Query == "" && q.Type == "search" {
|
|
|
|
// 直接读库
|
|
|
|
posts, err := service.GetPostList(&service.PostListReq{
|
|
|
|
Conditions: &model.ConditionsT{
|
|
|
|
"ORDER": "is_top DESC, latest_replied_on DESC",
|
|
|
|
},
|
|
|
|
Offset: (app.GetPage(c) - 1) * app.GetPageSize(c),
|
|
|
|
Limit: app.GetPageSize(c),
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.GetPostList err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.GetPostsFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
totalRows, _ := service.GetPostCount(&model.ConditionsT{
|
|
|
|
"ORDER": "latest_replied_on DESC",
|
|
|
|
})
|
|
|
|
|
|
|
|
response.ToResponseList(posts, totalRows)
|
|
|
|
} else {
|
|
|
|
posts, totalRows, err := service.GetPostListFromSearch(q, (app.GetPage(c)-1)*app.GetPageSize(c), app.GetPageSize(c))
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.GetPostListFromSearch err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.GetPostsFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
response.ToResponseList(posts, totalRows)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetPost(c *gin.Context) {
|
|
|
|
postID := convert.StrTo(c.Query("id")).MustInt64()
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
|
|
|
|
postFormated, err := service.GetPost(postID)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.GetPost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.GetPostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(postFormated)
|
|
|
|
}
|
|
|
|
|
|
|
|
func CreatePost(c *gin.Context) {
|
|
|
|
param := service.PostCreationReq{}
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
valid, errs := app.BindAndValid(c, ¶m)
|
|
|
|
if !valid {
|
|
|
|
global.Logger.Errorf("app.BindAndValid errs: %v", errs)
|
|
|
|
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
userID, _ := c.Get("UID")
|
|
|
|
post, err := service.CreatePost(c, userID.(int64), param)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.CreatePost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.CreatePostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(post)
|
|
|
|
}
|
|
|
|
|
|
|
|
func DeletePost(c *gin.Context) {
|
|
|
|
param := service.PostDelReq{}
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
valid, errs := app.BindAndValid(c, ¶m)
|
|
|
|
if !valid {
|
|
|
|
global.Logger.Errorf("app.BindAndValid errs: %v", errs)
|
|
|
|
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
user, _ := c.Get("USER")
|
|
|
|
|
|
|
|
// 获取Post
|
|
|
|
postFormated, err := service.GetPost(param.ID)
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.GetPost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.GetPostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if postFormated.UserID != user.(*model.User).ID && !user.(*model.User).IsAdmin {
|
|
|
|
response.ToErrorResponse(errcode.NoPermission)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
err = service.DeletePost(param.ID)
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.DeletePost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.DeletePostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(nil)
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetPostStar(c *gin.Context) {
|
|
|
|
postID := convert.StrTo(c.Query("id")).MustInt64()
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
|
|
|
|
userID, _ := c.Get("UID")
|
|
|
|
|
|
|
|
_, err := service.GetPostStar(postID, userID.(int64))
|
|
|
|
if err != nil {
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"status": false,
|
|
|
|
})
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"status": true,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func PostStar(c *gin.Context) {
|
|
|
|
param := service.PostStarReq{}
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
valid, errs := app.BindAndValid(c, ¶m)
|
|
|
|
if !valid {
|
|
|
|
global.Logger.Errorf("app.BindAndValid errs: %v", errs)
|
|
|
|
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
userID, _ := c.Get("UID")
|
|
|
|
|
|
|
|
status := false
|
|
|
|
star, err := service.GetPostStar(param.ID, userID.(int64))
|
|
|
|
if err != nil {
|
|
|
|
// 创建Star
|
|
|
|
service.CreatePostStar(param.ID, userID.(int64))
|
|
|
|
status = true
|
|
|
|
} else {
|
|
|
|
// 取消Star
|
|
|
|
service.DeletePostStar(star)
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"status": status,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetPostCollection(c *gin.Context) {
|
|
|
|
postID := convert.StrTo(c.Query("id")).MustInt64()
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
|
|
|
|
userID, _ := c.Get("UID")
|
|
|
|
|
|
|
|
_, err := service.GetPostCollection(postID, userID.(int64))
|
|
|
|
if err != nil {
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"status": false,
|
|
|
|
})
|
|
|
|
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"status": true,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func PostCollection(c *gin.Context) {
|
|
|
|
param := service.PostCollectionReq{}
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
valid, errs := app.BindAndValid(c, ¶m)
|
|
|
|
if !valid {
|
|
|
|
global.Logger.Errorf("app.BindAndValid errs: %v", errs)
|
|
|
|
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
userID, _ := c.Get("UID")
|
|
|
|
|
|
|
|
status := false
|
|
|
|
collection, err := service.GetPostCollection(param.ID, userID.(int64))
|
|
|
|
if err != nil {
|
|
|
|
// 创建collection
|
|
|
|
service.CreatePostCollection(param.ID, userID.(int64))
|
|
|
|
status = true
|
|
|
|
} else {
|
|
|
|
// 取消Star
|
|
|
|
service.DeletePostCollection(collection)
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"status": status,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func LockPost(c *gin.Context) {
|
|
|
|
param := service.PostLockReq{}
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
valid, errs := app.BindAndValid(c, ¶m)
|
|
|
|
if !valid {
|
|
|
|
global.Logger.Errorf("app.BindAndValid errs: %v", errs)
|
|
|
|
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
user, _ := c.Get("USER")
|
|
|
|
|
|
|
|
// 获取Post
|
|
|
|
postFormated, err := service.GetPost(param.ID)
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.GetPost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.GetPostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if postFormated.UserID != user.(*model.User).ID && !user.(*model.User).IsAdmin {
|
|
|
|
response.ToErrorResponse(errcode.NoPermission)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
err = service.LockPost(param.ID)
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.LockPost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.LockPostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"lock_status": 1 - postFormated.IsLock,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func StickPost(c *gin.Context) {
|
|
|
|
param := service.PostStickReq{}
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
valid, errs := app.BindAndValid(c, ¶m)
|
|
|
|
if !valid {
|
|
|
|
global.Logger.Errorf("app.BindAndValid errs: %v", errs)
|
|
|
|
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
user, _ := c.Get("USER")
|
|
|
|
|
|
|
|
// 获取Post
|
|
|
|
postFormated, err := service.GetPost(param.ID)
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.GetPost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.GetPostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if !user.(*model.User).IsAdmin {
|
|
|
|
response.ToErrorResponse(errcode.NoPermission)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
err = service.StickPost(param.ID)
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.StickPost err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.LockPostFailed)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(gin.H{
|
|
|
|
"top_status": 1 - postFormated.IsTop,
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetPostTags(c *gin.Context) {
|
|
|
|
param := service.PostTagsReq{}
|
|
|
|
response := app.NewResponse(c)
|
|
|
|
valid, errs := app.BindAndValid(c, ¶m)
|
|
|
|
if !valid {
|
|
|
|
global.Logger.Errorf("app.BindAndValid errs: %v", errs)
|
|
|
|
response.ToErrorResponse(errcode.InvalidParams.WithDetails(errs.Errors()...))
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
tags, err := service.GetPostTags(¶m)
|
|
|
|
if err != nil {
|
|
|
|
global.Logger.Errorf("service.GetPostTags err: %v\n", err)
|
|
|
|
response.ToErrorResponse(errcode.GetPostTagsFailed)
|
|
|
|
return
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
response.ToResponse(tags)
|
|
|
|
}
|