@ozdao/prometheus-framework 0.2.309 → 0.2.311

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. package/dist/products.server.js +192 -195
  2. package/dist/products.server.mjs +192 -195
  3. package/dist/prometheus-framework/src/components/Block/Block.vue.cjs +1 -1
  4. package/dist/prometheus-framework/src/components/Block/Block.vue.cjs.map +1 -1
  5. package/dist/prometheus-framework/src/components/Block/Block.vue.js +1 -1
  6. package/dist/prometheus-framework/src/components/Block/Block.vue.js.map +1 -1
  7. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.cjs +2 -1
  8. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.cjs.map +1 -1
  9. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.js +3 -2
  10. package/dist/prometheus-framework/src/components/Chips/Chips.vue2.js.map +1 -1
  11. package/dist/prometheus-framework/src/components/EditImages/EditImages.vue2.cjs +1 -1
  12. package/dist/prometheus-framework/src/components/EditImages/EditImages.vue2.cjs.map +1 -1
  13. package/dist/prometheus-framework/src/components/EditImages/EditImages.vue2.js +1 -1
  14. package/dist/prometheus-framework/src/components/EditImages/EditImages.vue2.js.map +1 -1
  15. package/dist/prometheus-framework/src/components/Field/Field.vue.cjs +13 -12
  16. package/dist/prometheus-framework/src/components/Field/Field.vue.cjs.map +1 -1
  17. package/dist/prometheus-framework/src/components/Field/Field.vue.js +13 -12
  18. package/dist/prometheus-framework/src/components/Field/Field.vue.js.map +1 -1
  19. package/dist/prometheus-framework/src/modules/auth/views/middlewares/auth.validation.cjs +1 -0
  20. package/dist/prometheus-framework/src/modules/auth/views/middlewares/auth.validation.cjs.map +1 -1
  21. package/dist/prometheus-framework/src/modules/auth/views/middlewares/auth.validation.js +1 -0
  22. package/dist/prometheus-framework/src/modules/auth/views/middlewares/auth.validation.js.map +1 -1
  23. package/dist/prometheus-framework/src/modules/auth/views/store/auth.cjs +6 -2
  24. package/dist/prometheus-framework/src/modules/auth/views/store/auth.cjs.map +1 -1
  25. package/dist/prometheus-framework/src/modules/auth/views/store/auth.js +6 -2
  26. package/dist/prometheus-framework/src/modules/auth/views/store/auth.js.map +1 -1
  27. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.cjs +2 -4
  28. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.cjs.map +1 -1
  29. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.js +3 -5
  30. package/dist/prometheus-framework/src/modules/backoffice/components/pages/Dashboard.vue.js.map +1 -1
  31. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.cjs +1 -1
  32. package/dist/prometheus-framework/src/modules/community/components/layouts/Community.vue.js +1 -1
  33. package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.cjs +1 -1
  34. package/dist/prometheus-framework/src/modules/community/components/pages/Community.vue.js +1 -1
  35. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  36. package/dist/prometheus-framework/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  37. package/dist/prometheus-framework/src/modules/globals/views/components/partials/BottomNavigationBar.vue.cjs +3 -3
  38. package/dist/prometheus-framework/src/modules/globals/views/components/partials/BottomNavigationBar.vue.cjs.map +1 -1
  39. package/dist/prometheus-framework/src/modules/globals/views/components/partials/BottomNavigationBar.vue.js +3 -3
  40. package/dist/prometheus-framework/src/modules/globals/views/components/partials/BottomNavigationBar.vue.js.map +1 -1
  41. package/dist/prometheus-framework/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
  42. package/dist/prometheus-framework/src/modules/globals/views/components/partials/Header.vue.js +1 -1
  43. package/dist/prometheus-framework/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +18 -15
  44. package/dist/prometheus-framework/src/modules/globals/views/components/partials/NavigationBar.vue.cjs.map +1 -1
  45. package/dist/prometheus-framework/src/modules/globals/views/components/partials/NavigationBar.vue.js +21 -18
  46. package/dist/prometheus-framework/src/modules/globals/views/components/partials/NavigationBar.vue.js.map +1 -1
  47. package/dist/prometheus-framework/src/modules/globals/views/store/globals.cjs +4 -0
  48. package/dist/prometheus-framework/src/modules/globals/views/store/globals.cjs.map +1 -1
  49. package/dist/prometheus-framework/src/modules/globals/views/store/globals.js +4 -0
  50. package/dist/prometheus-framework/src/modules/globals/views/store/globals.js.map +1 -1
  51. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
  52. package/dist/prometheus-framework/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  53. package/dist/prometheus-framework/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -1
  54. package/dist/prometheus-framework/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -1
  55. package/dist/prometheus-framework/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
  56. package/dist/prometheus-framework/src/modules/orders/components/sections/FormCustomerDetails.vue.js +1 -1
  57. package/dist/prometheus-framework/src/modules/orders/components/sections/FormPayment.vue.cjs +1 -1
  58. package/dist/prometheus-framework/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  59. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  60. package/dist/prometheus-framework/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
  61. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  62. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
  63. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  64. package/dist/prometheus-framework/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  65. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -2
  66. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs.map +1 -1
  67. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +2 -3
  68. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js.map +1 -1
  69. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  70. package/dist/prometheus-framework/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
  71. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  72. package/dist/prometheus-framework/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  73. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  74. package/dist/prometheus-framework/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  75. package/dist/prometheus-framework/src/modules/pages/pages.client.cjs +554 -554
  76. package/dist/prometheus-framework/src/modules/pages/pages.client.js +554 -554
  77. package/dist/prometheus-framework/src/modules/products/components/blocks/CardCategory.vue.cjs +3 -3
  78. package/dist/prometheus-framework/src/modules/products/components/blocks/CardCategory.vue.cjs.map +1 -1
  79. package/dist/prometheus-framework/src/modules/products/components/blocks/CardCategory.vue.js +3 -3
  80. package/dist/prometheus-framework/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
  81. package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.cjs +1 -1
  82. package/dist/prometheus-framework/src/modules/products/components/blocks/CardPosition.vue.js +1 -1
  83. package/dist/prometheus-framework/src/modules/products/components/blocks/CardProduct.vue.cjs +11 -10
  84. package/dist/prometheus-framework/src/modules/products/components/blocks/CardProduct.vue.cjs.map +1 -1
  85. package/dist/prometheus-framework/src/modules/products/components/blocks/CardProduct.vue.js +11 -10
  86. package/dist/prometheus-framework/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
  87. package/dist/prometheus-framework/src/modules/products/components/pages/Categories.vue.cjs +78 -43
  88. package/dist/prometheus-framework/src/modules/products/components/pages/Categories.vue.cjs.map +1 -1
  89. package/dist/prometheus-framework/src/modules/products/components/pages/Categories.vue.js +83 -48
  90. package/dist/prometheus-framework/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  91. package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.cjs +80 -30
  92. package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  93. package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.js +91 -41
  94. package/dist/prometheus-framework/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  95. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.cjs +1 -1
  96. package/dist/prometheus-framework/src/modules/products/components/pages/EditLeftover.vue.js +1 -1
  97. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.cjs +119 -80
  98. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.cjs.map +1 -1
  99. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.js +132 -93
  100. package/dist/prometheus-framework/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
  101. package/dist/prometheus-framework/src/modules/products/components/pages/Products.vue.cjs +39 -21
  102. package/dist/prometheus-framework/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  103. package/dist/prometheus-framework/src/modules/products/components/pages/Products.vue.js +51 -33
  104. package/dist/prometheus-framework/src/modules/products/components/pages/Products.vue.js.map +1 -1
  105. package/dist/prometheus-framework/src/modules/products/components/sections/CategoriesTree.vue.cjs +96 -0
  106. package/dist/prometheus-framework/src/modules/products/components/sections/CategoriesTree.vue.cjs.map +1 -0
  107. package/dist/prometheus-framework/src/modules/products/components/sections/CategoriesTree.vue.js +96 -0
  108. package/dist/prometheus-framework/src/modules/products/components/sections/CategoriesTree.vue.js.map +1 -0
  109. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.cjs +21 -7
  110. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.cjs.map +1 -1
  111. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.js +21 -7
  112. package/dist/prometheus-framework/src/modules/products/components/sections/EditProductInfo.vue.js.map +1 -1
  113. package/dist/prometheus-framework/src/modules/products/components/sections/Filters.vue.cjs +1 -1
  114. package/dist/prometheus-framework/src/modules/products/components/sections/Filters.vue.js +1 -1
  115. package/dist/prometheus-framework/src/modules/products/products.client.cjs.map +1 -1
  116. package/dist/prometheus-framework/src/modules/products/products.client.js.map +1 -1
  117. package/dist/prometheus-framework/src/modules/products/router/categories.router.cjs +17 -5
  118. package/dist/prometheus-framework/src/modules/products/router/categories.router.cjs.map +1 -1
  119. package/dist/prometheus-framework/src/modules/products/router/categories.router.js +17 -5
  120. package/dist/prometheus-framework/src/modules/products/router/categories.router.js.map +1 -1
  121. package/dist/prometheus-framework/src/modules/products/router/products.router.cjs +1 -12
  122. package/dist/prometheus-framework/src/modules/products/router/products.router.cjs.map +1 -1
  123. package/dist/prometheus-framework/src/modules/products/router/products.router.js +1 -12
  124. package/dist/prometheus-framework/src/modules/products/router/products.router.js.map +1 -1
  125. package/dist/prometheus-framework/src/modules/products/store/categories.cjs +52 -71
  126. package/dist/prometheus-framework/src/modules/products/store/categories.cjs.map +1 -1
  127. package/dist/prometheus-framework/src/modules/products/store/categories.js +52 -71
  128. package/dist/prometheus-framework/src/modules/products/store/categories.js.map +1 -1
  129. package/dist/prometheus-framework/src/modules/products/store/products.cjs +6 -8
  130. package/dist/prometheus-framework/src/modules/products/store/products.cjs.map +1 -1
  131. package/dist/prometheus-framework/src/modules/products/store/products.js +6 -8
  132. package/dist/prometheus-framework/src/modules/products/store/products.js.map +1 -1
  133. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  134. package/dist/prometheus-framework/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  135. package/dist/prometheus-framework/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
  136. package/dist/prometheus-framework/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  137. package/dist/prometheus-framework/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  138. package/dist/prometheus-framework/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  139. package/dist/prometheus-framework/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  140. package/dist/prometheus-framework/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
  141. package/dist/prometheus-framework/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  142. package/dist/prometheus-framework/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
  143. package/package.json +1 -1
  144. package/src/components/Block/Block.vue +1 -1
  145. package/src/components/EditImages/EditImages.vue +1 -1
  146. package/src/modules/auth/views/middlewares/auth.validation.js +1 -0
  147. package/src/modules/auth/views/store/auth.js +6 -2
  148. package/src/modules/backoffice/components/pages/Dashboard.vue +1 -3
  149. package/src/modules/globals/views/components/partials/BottomNavigationBar.vue +3 -3
  150. package/src/modules/globals/views/components/partials/NavigationBar.vue +4 -4
  151. package/src/modules/globals/views/store/globals.js +5 -0
  152. package/src/modules/organizations/components/pages/Organization.vue +1 -1
  153. package/src/modules/organizations/components/pages/OrganizationBackoffice.vue +1 -2
  154. package/src/modules/products/components/blocks/CardCategory.vue +14 -3
  155. package/src/modules/products/components/blocks/CardProduct.vue +12 -11
  156. package/src/modules/products/components/pages/Categories.vue +120 -28
  157. package/src/modules/products/components/pages/CategoryEdit.vue +206 -151
  158. package/src/modules/products/components/pages/ProductEdit.vue +107 -69
  159. package/src/modules/products/components/pages/Products.vue +35 -20
  160. package/src/modules/products/components/sections/CategoriesTree.vue +102 -0
  161. package/src/modules/products/components/sections/EditProductInfo.vue +53 -40
  162. package/src/modules/products/controllers/categories.controller.js +175 -97
  163. package/src/modules/products/controllers/products.controller.js +4 -2
  164. package/src/modules/products/models/category.model.js +15 -66
  165. package/src/modules/products/models/product.model.js +15 -12
  166. package/src/modules/products/products.client.js +0 -1
  167. package/src/modules/products/router/categories.router.js +17 -5
  168. package/src/modules/products/router/products.router.js +0 -12
  169. package/src/modules/products/routes/categories.routes.js +5 -34
  170. package/src/modules/products/store/categories.js +69 -83
  171. package/src/modules/products/store/products.js +6 -8
@@ -9,7 +9,13 @@ const queryProcessor = require("./queryProcessor-B3NJuQbL.js");
9
9
  const applyOwnershipSchema$1 = ownership_schema.ownership_schema;
10
10
  var product_model = (db) => {
11
11
  const ProductSchema = new db.mongoose.Schema({
12
- status: { type: String },
12
+ status: {
13
+ type: String
14
+ },
15
+ listing: {
16
+ type: String,
17
+ enum: ["sale", "rent"]
18
+ },
13
19
  name: { type: String },
14
20
  category: { type: Array },
15
21
  description: { type: String },
@@ -24,7 +30,13 @@ var product_model = (db) => {
24
30
  value: { type: String }
25
31
  }],
26
32
  // ЗАДАЧА: Нужно отрефачить price, перенести его в default variant
27
- price: { type: Number },
33
+ price: {
34
+ type: Number
35
+ },
36
+ price_currency: {
37
+ type: String,
38
+ default: "$"
39
+ },
28
40
  prices: { type: Array },
29
41
  //
30
42
  variants: [{
@@ -71,16 +83,7 @@ var product_model = (db) => {
71
83
  min: [0, "Quantity-based discount cannot be less than 0"],
72
84
  max: [100, "Quantity-based discount cannot be more than 100"]
73
85
  }
74
- }],
75
- // Refactor
76
- owner: {
77
- type: db.mongoose.Schema.Types.ObjectId,
78
- ref: "User"
79
- },
80
- organization: {
81
- type: db.mongoose.Schema.Types.ObjectId,
82
- ref: "Organization"
83
- }
86
+ }]
84
87
  }, {
85
88
  timestamps: {
86
89
  currentTime: () => Date.now()
@@ -93,76 +96,26 @@ var product_model = (db) => {
93
96
  return Product;
94
97
  };
95
98
  var category_model = (db) => {
96
- const СategorySchema = new db.mongoose.Schema({
97
- name: {
98
- type: String,
99
- required: true,
100
- trim: true
101
- },
99
+ const CategorySchema = new db.mongoose.Schema({
100
+ name: { type: String, required: true, trim: true },
102
101
  status: {
103
102
  type: String,
104
103
  enum: ["draft", "internal", "published", "removed"],
105
104
  default: "draft",
106
105
  required: true
107
106
  },
108
- order: {
109
- type: Number,
110
- required: true
111
- },
112
- url: {
113
- type: String,
114
- required: true,
115
- trim: true
116
- },
117
- subcategories: {
118
- type: Array
119
- },
120
- localization: {
121
- type: Array
122
- },
123
- filters: {
124
- type: Array
125
- }
126
- // owner: {
127
- // type: {
128
- // type: String,
129
- // required: true
130
- // },
131
- // target: {
132
- // type: mongoose.Schema.Types.ObjectId,
133
- // ref: function (value) {
134
- // if (this.owner.type === 'user') return 'User';
135
- // if (this.owner.type === 'organization') return 'Organization';
136
- // },
137
- // required: true,
138
- // },
139
- // },
140
- // creator: {
141
- // hidden: {
142
- // type: Boolean,
143
- // required: true
144
- // },
145
- // type: {
146
- // type: String,
147
- // required: true
148
- // },
149
- // target: {
150
- // type: mongoose.Schema.Types.ObjectId,
151
- // ref: function (value) {
152
- // if (this.owner.type === 'user') return 'User';
153
- // if (this.owner.type === 'organization') return 'Organization';
154
- // },
155
- // required: true,
156
- // },
157
- // }
107
+ order: { type: Number, required: true },
108
+ url: { type: String, required: true, trim: true },
109
+ parent: { type: db.mongoose.Schema.Types.ObjectId, ref: "Category" },
110
+ localization: { type: Array },
111
+ filters: { type: Array }
158
112
  }, {
159
- timestamps: {
160
- currentTime: () => Date.now()
161
- }
113
+ timestamps: { currentTime: () => Date.now() }
162
114
  });
163
- СategorySchema.index({ "owner.target": 1, "creator.target": 1 });
164
- const Сategory = db.mongoose.model("Сategory", СategorySchema, "categories");
165
- return Сategory;
115
+ CategorySchema.index({ parent: 1 });
116
+ CategorySchema.index({ "owner.target": 1, "creator.target": 1 });
117
+ const Category = db.mongoose.model("Category", CategorySchema, "categories");
118
+ return Category;
166
119
  };
167
120
  const applyOwnershipSchema = ownership_schema.ownership_schema;
168
121
  var leftover_model = (db) => {
@@ -237,8 +190,8 @@ const controllerFactory$5 = (db) => {
237
190
  const Read = async (req, res) => {
238
191
  try {
239
192
  const query = {};
240
- if (req.query.organization) {
241
- query.organization = new ObjectId(req.query.organization);
193
+ if (req.query.owner) {
194
+ query["owner.target"] = new ObjectId(req.query.owner);
242
195
  }
243
196
  if (req.query._id) {
244
197
  query._id = new ObjectId(req.query._id);
@@ -411,8 +364,10 @@ const controllerFactory$5 = (db) => {
411
364
  {
412
365
  name: req.body.name,
413
366
  status: req.body.status,
367
+ listing: req.body.listing,
414
368
  description: req.body.description,
415
369
  price: req.body.price,
370
+ price_currency: req.body.price_currency,
416
371
  sale: req.body.sale,
417
372
  category: req.body.category,
418
373
  images: req.body.images,
@@ -551,104 +506,167 @@ var products_routes = function(app, db, allowedOrigins) {
551
506
  controller.getProductRecommendation
552
507
  );
553
508
  };
509
+ var categories_routes = { exports: {} };
554
510
  const controllerFactory$3 = (db) => {
555
511
  const Category = db.category;
556
- const getCategories = async (req, res) => {
557
- console.log(Category);
558
- try {
559
- let query = {};
560
- let options = {};
561
- if (req.query.status) {
562
- query.status = req.query.status;
563
- }
564
- const categories = await Category.find(query, null, options).sort({ "order": "asc" }).exec();
565
- if (!categories) {
566
- return res.status(404).send({ message: "Categories not found." });
512
+ return {
513
+ async read(req, res) {
514
+ try {
515
+ let buildTree = function(items) {
516
+ const itemMap = {};
517
+ const roots = [];
518
+ items.forEach((item) => {
519
+ itemMap[item._id.toString()] = {
520
+ ...item,
521
+ children: []
522
+ };
523
+ });
524
+ items.forEach((item) => {
525
+ const itemId = item._id.toString();
526
+ const parentId = item.parent?._id?.toString();
527
+ if (parentId && itemMap[parentId]) {
528
+ itemMap[parentId].children.push(itemMap[itemId]);
529
+ } else {
530
+ roots.push(itemMap[itemId]);
531
+ }
532
+ });
533
+ const sortByOrder = (a, b) => {
534
+ const orderA = a.order ?? Number.MAX_SAFE_INTEGER;
535
+ const orderB = b.order ?? Number.MAX_SAFE_INTEGER;
536
+ return orderA - orderB;
537
+ };
538
+ const sortChildren = (node) => {
539
+ if (node.children && node.children.length > 0) {
540
+ node.children.sort(sortByOrder);
541
+ node.children.forEach(sortChildren);
542
+ }
543
+ };
544
+ roots.sort(sortByOrder);
545
+ roots.forEach(sortChildren);
546
+ return roots;
547
+ };
548
+ const {
549
+ parent,
550
+ url,
551
+ search,
552
+ sort = "order",
553
+ order = 1,
554
+ page = 1,
555
+ limit = 10,
556
+ excludeChildren = false,
557
+ rootOnly = false
558
+ } = req.query;
559
+ const matchStage = {
560
+ ...req.query.status && { status: req.query.status },
561
+ ...req.query.url && { url: req.query.url },
562
+ ...search && { name: { $regex: search, $options: "i" } },
563
+ ...parent ? { parent: new db.mongoose.Types.ObjectId(parent) } : {},
564
+ ...rootOnly ? { parent: null } : {}
565
+ };
566
+ const pipeline = [
567
+ { $match: matchStage },
568
+ {
569
+ $graphLookup: {
570
+ from: "categories",
571
+ startWith: "$_id",
572
+ connectFromField: "_id",
573
+ connectToField: "parent",
574
+ as: "allDescendants",
575
+ maxDepth: 10
576
+ }
577
+ },
578
+ { $sort: { [sort]: order === "asc" ? 1 : -1 } },
579
+ { $skip: (page - 1) * limit },
580
+ { $limit: Number(limit) }
581
+ ];
582
+ const flatResults = await Category.aggregate(pipeline);
583
+ const treeResults = flatResults.map((doc) => {
584
+ const descendants = doc.allDescendants || [];
585
+ const allItems = [doc, ...descendants];
586
+ const tree = buildTree(allItems);
587
+ return tree.find((node) => node._id.toString() === doc._id.toString());
588
+ });
589
+ treeResults.sort((a, b) => {
590
+ const orderA = a.order ?? Number.MAX_SAFE_INTEGER;
591
+ const orderB = b.order ?? Number.MAX_SAFE_INTEGER;
592
+ return orderA - orderB;
593
+ });
594
+ res.json(treeResults);
595
+ } catch (err) {
596
+ res.status(500).json({ message: err.message });
567
597
  }
568
- res.status(200).send(categories);
569
- } catch (err) {
570
- console.log(err);
571
- res.status(500).send({ message: err });
572
- }
573
- };
574
- const updateCategories = async (req, res) => {
575
- console.log(req.body);
576
- try {
577
- const bulkOps = req.body.map((categoryUpdated) => ({
578
- updateOne: {
579
- filter: { url: categoryUpdated.url },
580
- update: { $set: categoryUpdated },
581
- upsert: false
598
+ },
599
+ async create(req, res) {
600
+ try {
601
+ const highestOrder = await Category.findOne().sort("-order");
602
+ const order = highestOrder ? highestOrder.order + 1 : 1;
603
+ const category = new Category({ ...req.body, order });
604
+ if (req.body.parent) {
605
+ const parent = await Category.findByIdAndUpdate(
606
+ req.body.parent,
607
+ { $push: { children: category._id } },
608
+ { new: true }
609
+ );
610
+ if (!parent) throw new Error("Parent category not found");
611
+ category.parent = parent._id;
582
612
  }
583
- }));
584
- const result = await Category.bulkWrite(bulkOps, { ordered: false });
585
- console.log("Success", result);
586
- res.status(200).send({ message: "Categories updated successfully." });
587
- } catch (err) {
588
- console.error("Error processing bulk update", err);
589
- res.status(500).send({ message: err.message });
590
- }
591
- };
592
- const getCategory = async (req, res) => {
593
- try {
594
- const category = await Category.findOne({ url: req.params.url }).exec();
595
- if (!category) {
596
- return res.status(404).send({ message: "Category not found." });
597
- }
598
- res.status(200).send(category);
599
- } catch (err) {
600
- res.status(500).send({ message: err });
601
- }
602
- };
603
- const addCategory = async (req, res) => {
604
- try {
605
- const highestOrderDoc = await Category.findOne().sort("-order");
606
- req.body.order = highestOrderDoc ? highestOrderDoc.order + 1 : 1;
607
- const category = await Category.create(req.body);
608
- if (!category) {
609
- return res.status(404).send({ message: "Category is not created." });
613
+ if (req.body.children && req.body.children.length > 0) {
614
+ await Category.updateMany(
615
+ { _id: { $in: req.body.children } },
616
+ { $set: { parent: category._id } }
617
+ );
618
+ }
619
+ await category.save();
620
+ res.status(201).json(category);
621
+ } catch (err) {
622
+ res.status(err.message === "Parent category not found" ? 404 : 500).json({ message: err.message });
610
623
  }
611
- res.status(200).send(category);
612
- } catch (err) {
613
- console.log(req.body);
614
- console.log(req.category);
615
- res.status(500).send({ message: err });
616
- }
617
- };
618
- const updateCategory = async (req, res) => {
619
- try {
620
- const category = await Category.findOneAndUpdate(
621
- { url: req.params.url },
622
- { $set: req.body },
623
- { new: true }
624
- ).exec();
625
- if (!category) {
626
- return res.status(404).send({ message: "Something wrong when updating category." });
624
+ },
625
+ async update(req, res) {
626
+ try {
627
+ const { categories } = req.body;
628
+ const bulkOps = categories.map((category) => ({
629
+ updateOne: {
630
+ filter: { _id: category._id },
631
+ update: {
632
+ $set: {
633
+ order: category.order,
634
+ parent: category.parent ? new db.mongoose.Types.ObjectId(category.parent) : null
635
+ }
636
+ }
637
+ }
638
+ }));
639
+ await Category.bulkWrite(bulkOps);
640
+ const updatedCategories = await Category.find().sort({ order: "asc" }).lean();
641
+ res.status(200).json(updatedCategories);
642
+ } catch (err) {
643
+ console.error("Category update error:", err);
644
+ res.status(500).json({ message: "Failed to update categories" });
627
645
  }
628
- res.status(200).send(category);
629
- } catch (err) {
630
- res.status(500).send({ message: err });
631
- }
632
- };
633
- const deleteCategory = async (req, res) => {
634
- try {
635
- const category = await Category.findOneAndDelete({ url: req.params.url }).exec();
636
- if (!category) {
637
- return res.status(404).send({ message: "Category is not deleted." });
646
+ },
647
+ async delete(req, res) {
648
+ try {
649
+ const category = await Category.findOne({ url: req.body.url });
650
+ if (!category) throw new Error("Category not found");
651
+ const deleteSubcategories = async (categoryId) => {
652
+ const cat = await Category.findById(categoryId);
653
+ if (cat) {
654
+ for (const childId of cat.children) {
655
+ await deleteSubcategories(childId);
656
+ }
657
+ await Category.findByIdAndDelete(categoryId);
658
+ }
659
+ };
660
+ if (category.parent) {
661
+ await Category.findByIdAndUpdate(category.parent, { $pull: { children: category._id } });
662
+ }
663
+ await deleteSubcategories(category._id);
664
+ res.status(200).json({ message: "Category deleted successfully" });
665
+ } catch (err) {
666
+ res.status(err.message === "Category not found" ? 404 : 500).json({ message: err.message });
638
667
  }
639
- res.status(200).send(category);
640
- } catch (err) {
641
- res.status(500).send({ message: err });
642
668
  }
643
669
  };
644
- return {
645
- getCategories,
646
- updateCategories,
647
- getCategory,
648
- addCategory,
649
- updateCategory,
650
- deleteCategory
651
- };
652
670
  };
653
671
  var categories_controller = controllerFactory$3;
654
672
  var verifyCategory;
@@ -686,37 +704,16 @@ const middlewareIndexFactory = (db) => {
686
704
  var middlewares = middlewareIndexFactory;
687
705
  const controllerFactory$2 = categories_controller;
688
706
  const middlewareFactoryProducts = middlewares;
689
- var categories_routes = function(app, db) {
707
+ categories_routes.exports = function(app, db) {
690
708
  const controller = controllerFactory$2(db);
691
709
  const { verifyCategory: verifyCategory2 } = middlewareFactoryProducts(db);
692
- app.get(
693
- "/categories",
694
- controller.getCategories
695
- );
696
- app.post(
697
- "/categories",
698
- controller.updateCategories
699
- );
700
- app.get(
701
- "/categories/:url",
702
- controller.getCategory
703
- );
704
- app.post(
705
- "/categories/add",
706
- [
707
- verifyCategory2.checkCategoryExistOrNot
708
- ],
709
- controller.addCategory
710
- );
711
- app.post(
712
- "/categories/:url",
713
- controller.updateCategory
714
- );
715
- app.delete(
716
- "/categories/:url",
717
- controller.deleteCategory
718
- );
710
+ app.get("/api/categories", controller.read);
711
+ app.post("/api/categories/create", [verifyCategory2.checkCategoryExistOrNot], controller.create);
712
+ app.post("/api/categories/update", controller.update);
713
+ app.post("/api/categories/delete", controller.delete);
719
714
  };
715
+ categories_routes.exports.controllerFactory = controllerFactory$2;
716
+ var categories_routesExports = categories_routes.exports;
720
717
  const queryProcessorGlobals = queryProcessor.queryProcessor;
721
718
  const controllerFactory$1 = (db) => {
722
719
  const Leftover = db.leftover;
@@ -864,7 +861,7 @@ const ProductModel = product_model;
864
861
  const CategoryModel = category_model;
865
862
  const LeftoverModel = leftover_model;
866
863
  const productsRoutes = products_routes;
867
- const categoriesRoutes = categories_routes;
864
+ const categoriesRoutes = categories_routesExports;
868
865
  const leftoversRoutes = leftovers_routes;
869
866
  const ProductController = products_controller;
870
867
  const CategoryController = categories_controller;
@@ -875,7 +872,7 @@ function initializeProduct(app, db, origins, publicPath) {
875
872
  db.leftover = LeftoverModel(db);
876
873
  if (app) {
877
874
  productsRoutes(app, db);
878
- categoriesRoutes(app, db);
875
+ categoriesRoutes(app, db, origins, publicPath);
879
876
  leftoversRoutes(app, db);
880
877
  }
881
878
  }