137 lines
3.6 KiB
Go
137 lines
3.6 KiB
Go
package admin
|
|
|
|
import (
|
|
"github.com/goravel/framework/contracts/http"
|
|
|
|
apperrors "goravel/app/errors"
|
|
"goravel/app/http/helpers"
|
|
adminrequests "goravel/app/http/requests/admin"
|
|
"goravel/app/http/response"
|
|
"goravel/app/services"
|
|
)
|
|
|
|
type ArticleController struct {
|
|
ArticleService services.ArticleService
|
|
}
|
|
|
|
func NewArticleController() *ArticleController {
|
|
return &ArticleController{
|
|
ArticleService: services.NewArticleService(),
|
|
}
|
|
}
|
|
|
|
// Index Article列表
|
|
func (c *ArticleController) Index(ctx http.Context) http.Response {
|
|
page := helpers.GetIntQuery(ctx, "page", 1)
|
|
pageSize := helpers.GetIntQuery(ctx, "page_size", 10)
|
|
|
|
name := ctx.Request().Query("name", "")
|
|
status := ctx.Request().Query("status", "")
|
|
|
|
filters := services.ArticleFilters{
|
|
|
|
Name: name,
|
|
Status: status,
|
|
}
|
|
|
|
list, total, err := c.ArticleService.GetList(filters, page, pageSize)
|
|
if err != nil {
|
|
if businessErr, ok := apperrors.GetBusinessError(err); ok {
|
|
return response.Error(ctx, http.StatusInternalServerError, businessErr.Code)
|
|
}
|
|
return response.Error(ctx, http.StatusInternalServerError, err.Error())
|
|
}
|
|
|
|
return response.Success(ctx, http.Json{
|
|
"list": list,
|
|
"total": total,
|
|
"page": page,
|
|
"page_size": pageSize,
|
|
})
|
|
}
|
|
|
|
// Show Article详情
|
|
func (c *ArticleController) Show(ctx http.Context) http.Response {
|
|
id := helpers.GetUintRoute(ctx, "id")
|
|
item, err := c.ArticleService.GetByID(id)
|
|
if err != nil {
|
|
if businessErr, ok := apperrors.GetBusinessError(err); ok {
|
|
return response.Error(ctx, http.StatusNotFound, businessErr.Code)
|
|
}
|
|
return response.Error(ctx, http.StatusNotFound, err.Error())
|
|
}
|
|
|
|
return response.Success(ctx, http.Json{
|
|
"article": item,
|
|
})
|
|
}
|
|
|
|
// Store 创建Article
|
|
func (c *ArticleController) Store(ctx http.Context) http.Response {
|
|
|
|
var req adminrequests.ArticleCreate
|
|
errors, err := ctx.Request().ValidateRequest(&req)
|
|
if err != nil {
|
|
return response.Error(ctx, http.StatusBadRequest, err.Error())
|
|
}
|
|
if errors != nil {
|
|
return response.ValidationError(ctx, http.StatusBadRequest, "validation_failed", errors.All())
|
|
}
|
|
|
|
item, err := c.ArticleService.Create(&req)
|
|
if err != nil {
|
|
if businessErr, ok := apperrors.GetBusinessError(err); ok {
|
|
return response.Error(ctx, http.StatusInternalServerError, businessErr.Code)
|
|
}
|
|
return response.Error(ctx, http.StatusInternalServerError, err.Error())
|
|
}
|
|
|
|
return response.Success(ctx, http.Json{
|
|
"article": item,
|
|
})
|
|
|
|
}
|
|
|
|
// Update 更新Article
|
|
func (c *ArticleController) Update(ctx http.Context) http.Response {
|
|
|
|
id := helpers.GetUintRoute(ctx, "id")
|
|
|
|
var req adminrequests.ArticleUpdate
|
|
errors, err := ctx.Request().ValidateRequest(&req)
|
|
if err != nil {
|
|
return response.Error(ctx, http.StatusBadRequest, err.Error())
|
|
}
|
|
if errors != nil {
|
|
return response.ValidationError(ctx, http.StatusBadRequest, "validation_failed", errors.All())
|
|
}
|
|
|
|
item, err := c.ArticleService.Update(id, &req)
|
|
if err != nil {
|
|
if businessErr, ok := apperrors.GetBusinessError(err); ok {
|
|
return response.Error(ctx, http.StatusInternalServerError, businessErr.Code)
|
|
}
|
|
return response.Error(ctx, http.StatusInternalServerError, err.Error())
|
|
}
|
|
|
|
return response.Success(ctx, http.Json{
|
|
"article": item,
|
|
})
|
|
|
|
}
|
|
|
|
// Destroy 删除Article
|
|
func (c *ArticleController) Destroy(ctx http.Context) http.Response {
|
|
|
|
id := helpers.GetUintRoute(ctx, "id")
|
|
if err := c.ArticleService.Delete(id); err != nil {
|
|
if businessErr, ok := apperrors.GetBusinessError(err); ok {
|
|
return response.Error(ctx, http.StatusInternalServerError, businessErr.Code)
|
|
}
|
|
return response.Error(ctx, http.StatusInternalServerError, err.Error())
|
|
}
|
|
|
|
return response.Success(ctx, "delete_success", http.Json{})
|
|
|
|
}
|