Source: pages/api/data/inbox.js

  1. /** @module pages/api/data/inbox */
  2. import { getServerSession } from "../../../lib/auth";
  3. import {
  4. deleteAllInboxMessages,
  5. deleteSomeInboxMessages,
  6. markAllInboxMessagesAsRead,
  7. markSomeInboxMessagesAsRead,
  8. } from "../../../lib/db/writes";
  9. import {
  10. BAD_REQUEST,
  11. METHOD_NOT_ALLOWED,
  12. SERVER_ERROR,
  13. FORBIDDEN,
  14. } from "../../../lib/errors";
  15. /**
  16. * This is the API route for managing inbox messages.
  17. * It supports PATCH and DELETE, allowing users to mark messages as read and
  18. * delete them.
  19. */
  20. function inboxHandler(req, res) {
  21. switch (req.method) {
  22. case "PATCH":
  23. return patch(req, res);
  24. case "DELETE":
  25. return del(req, res);
  26. default:
  27. res.setHeader("Allow", ["PATCH", "DELETE"]);
  28. res.status(405).end(METHOD_NOT_ALLOWED);
  29. return res;
  30. }
  31. }
  32. /**
  33. * @private
  34. */
  35. async function patch(req, res) {
  36. const session = await getServerSession(req, res);
  37. if (!session) {
  38. res.status(403).end(FORBIDDEN);
  39. return res;
  40. }
  41. if (!req.body?.inboxIds) {
  42. res.status(400).end(BAD_REQUEST);
  43. return res;
  44. }
  45. try {
  46. if (req.body?.all) {
  47. await markAllInboxMessagesAsRead(session.user.email);
  48. res.setHeader("Content-Type", "application/json");
  49. res.status(201).send({});
  50. return res;
  51. }
  52. await markSomeInboxMessagesAsRead(req.body.inboxIds);
  53. res.setHeader("Content-Type", "application/json");
  54. res.status(201).send({});
  55. return res;
  56. } catch (error) {
  57. console.error({
  58. error,
  59. service: "api",
  60. pathname: "/api/data/inbox",
  61. method: "patch",
  62. });
  63. res.status(500).end(SERVER_ERROR);
  64. return res;
  65. }
  66. }
  67. /**
  68. * @private
  69. */
  70. async function del(req, res) {
  71. const session = await getServerSession(req, res);
  72. if (!session) {
  73. res.status(403).end(FORBIDDEN);
  74. return res;
  75. }
  76. if (!req.body?.inboxIds) {
  77. res.status(400).end(BAD_REQUEST);
  78. return res;
  79. }
  80. try {
  81. if (req.body?.all) {
  82. await deleteAllInboxMessages(session.user.email);
  83. res.setHeader("Content-Type", "application/json");
  84. res.status(201).send({});
  85. return res;
  86. }
  87. await deleteSomeInboxMessages(req.body.inboxIds);
  88. res.setHeader("Content-Type", "application/json");
  89. res.status(201).send({});
  90. return res;
  91. } catch (error) {
  92. console.error({
  93. error,
  94. service: "api",
  95. pathname: "/api/data/inbox",
  96. method: "delete",
  97. });
  98. res.status(500).end(SERVER_ERROR);
  99. return res;
  100. }
  101. }
  102. export default inboxHandler;