category.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package api
  5. import (
  6. "errors"
  7. "github.com/miniflux/miniflux2/server/api/payload"
  8. "github.com/miniflux/miniflux2/server/core"
  9. )
  10. // CreateCategory is the API handler to create a new category.
  11. func (c *Controller) CreateCategory(ctx *core.Context, request *core.Request, response *core.Response) {
  12. category, err := payload.DecodeCategoryPayload(request.Body())
  13. if err != nil {
  14. response.JSON().BadRequest(err)
  15. return
  16. }
  17. category.UserID = ctx.GetUserID()
  18. if err := category.ValidateCategoryCreation(); err != nil {
  19. response.JSON().ServerError(err)
  20. return
  21. }
  22. err = c.store.CreateCategory(category)
  23. if err != nil {
  24. response.JSON().ServerError(errors.New("Unable to create this category"))
  25. return
  26. }
  27. response.JSON().Created(category)
  28. }
  29. // UpdateCategory is the API handler to update a category.
  30. func (c *Controller) UpdateCategory(ctx *core.Context, request *core.Request, response *core.Response) {
  31. categoryID, err := request.IntegerParam("categoryID")
  32. if err != nil {
  33. response.JSON().BadRequest(err)
  34. return
  35. }
  36. category, err := payload.DecodeCategoryPayload(request.Body())
  37. if err != nil {
  38. response.JSON().BadRequest(err)
  39. return
  40. }
  41. category.UserID = ctx.GetUserID()
  42. category.ID = categoryID
  43. if err := category.ValidateCategoryModification(); err != nil {
  44. response.JSON().BadRequest(err)
  45. return
  46. }
  47. err = c.store.UpdateCategory(category)
  48. if err != nil {
  49. response.JSON().ServerError(errors.New("Unable to update this category"))
  50. return
  51. }
  52. response.JSON().Created(category)
  53. }
  54. // GetCategories is the API handler to get a list of categories for a given user.
  55. func (c *Controller) GetCategories(ctx *core.Context, request *core.Request, response *core.Response) {
  56. categories, err := c.store.GetCategories(ctx.GetUserID())
  57. if err != nil {
  58. response.JSON().ServerError(errors.New("Unable to fetch categories"))
  59. return
  60. }
  61. response.JSON().Standard(categories)
  62. }
  63. // RemoveCategory is the API handler to remove a category.
  64. func (c *Controller) RemoveCategory(ctx *core.Context, request *core.Request, response *core.Response) {
  65. userID := ctx.GetUserID()
  66. categoryID, err := request.IntegerParam("categoryID")
  67. if err != nil {
  68. response.JSON().BadRequest(err)
  69. return
  70. }
  71. if !c.store.CategoryExists(userID, categoryID) {
  72. response.JSON().NotFound(errors.New("Category not found"))
  73. return
  74. }
  75. if err := c.store.RemoveCategory(userID, categoryID); err != nil {
  76. response.JSON().ServerError(errors.New("Unable to remove this category"))
  77. return
  78. }
  79. response.JSON().NoContent()
  80. }