index.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import mongoose from "mongoose";
  2. import {
  3. RecommendedProduct,
  4. Product,
  5. Menu
  6. } from "../../../models";
  7. import {
  8. DeleteProductResult,
  9. DeleteProductInput
  10. } from "./types";
  11. const deleteProduct = async (userID: string, input: DeleteProductInput): Promise<DeleteProductResult> => {
  12. try {
  13. const {
  14. productIDs
  15. } = input;
  16. if (productIDs.length === 0) {
  17. return {
  18. message: "productIDs-cannot-be-empty",
  19. code: 400
  20. };
  21. }
  22. const objectIdArray = productIDs.map(id => new mongoose.Types.ObjectId(id));
  23. const result = await Product.deleteMany({
  24. _id: {
  25. $in: objectIdArray
  26. },
  27. userID: userID
  28. });
  29. if (result.deletedCount === 0) {
  30. return {
  31. message: "product-not-found-or-unauthorized",
  32. code: 404
  33. };
  34. }
  35. await Menu.updateMany(
  36. {
  37. userID: userID
  38. },
  39. {
  40. $pull: {
  41. products: {
  42. productID: {
  43. $in: objectIdArray
  44. }
  45. }
  46. }
  47. }
  48. );
  49. await RecommendedProduct.deleteMany({
  50. productID: {
  51. $in: objectIdArray
  52. },
  53. userID: userID
  54. });
  55. return {
  56. message: "product-deleted-successfully",
  57. code: 200
  58. };
  59. } catch (error) {
  60. console.error("DeleteProduct action error:", error);
  61. return {
  62. message: "internal-server-error",
  63. code: 500
  64. };
  65. }
  66. };
  67. export default deleteProduct;