category.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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/miniflux/server/api/payload"
  8. "github.com/miniflux/miniflux/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.UserID()
  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.UserID()
  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.Categories(ctx.UserID())
  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.UserID()
  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. }