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{}) }