@b2y/ecommerce-common 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,5 @@
1
1
  const StatusMessage = require('../constants/StatusMessageConstants');
2
2
  const AppUtil = require('../utility/AppUtil');
3
- const LocationUtility = require('../utility/LocationUtility');
4
3
 
5
4
  // getAllSubscriptionPlans
6
5
  const getAllSubscriptionPlans = (
@@ -418,24 +418,23 @@ const getTenantById = (
418
418
  res,
419
419
  );
420
420
  }
421
- let logo = [];
421
+ let logo = null;;
422
422
  if(tenant.TenantSettings) {
423
- const documents = await Document.findAll({
424
- where: {
425
- EntityType: EntityTypeEnum.TENANT_SETTINGS,
426
- EntityID: tenant.TenantSettings.TenantSettingID
427
- },
428
- order: [["SortOrder", "ASC"]]
429
- });
430
-
431
- logo = await Promise.all(
432
- documents.map(async (doc) => ({
433
- documentId: doc.DocumentID,
434
- sortOrder: doc.SortOrder,
435
- documentUrl: await getPublicUrl(doc, logger)
436
- }))
437
- );
438
- }
423
+ const document = await Document.findOne({
424
+ where: {
425
+ EntityType: EntityTypeEnum.TENANT_SETTINGS,
426
+ EntityID: tenant.TenantSettings.TenantSettingID,
427
+ },
428
+ order: [["SortOrder", "ASC"]],
429
+ });
430
+ if (document) {
431
+ logo = {
432
+ documentId: document.DocumentID,
433
+ sortOrder: document.SortOrder,
434
+ documentUrl: await getPublicUrl(document, logger),
435
+ };
436
+ }
437
+ }
439
438
  const { countryName, stateName } =
440
439
  await LocationUtility.resolveCountryAndState(
441
440
  tenant.CountryCode,
@@ -3,6 +3,34 @@ const StatusMessage = require('../constants/StatusMessageConstants');
3
3
  const AppUtil = require('../utility/AppUtil');
4
4
  const AppConstants = require('../constants/AppConstants')
5
5
 
6
+ const tenantSettingsDocumentValidation = async (
7
+ file,
8
+ documentMetadata,
9
+ FileUploadUtil,
10
+ FILE_PATHS,
11
+ logger
12
+ ) => {
13
+ if (documentMetadata !== undefined) {
14
+ if (
15
+ typeof documentMetadata !== AppConstants.OBJECT ||
16
+ Array.isArray(documentMetadata)
17
+ ) {
18
+ logger.warn(
19
+ "Validation Failed: documentMetadata must be a single object for this operation.",
20
+ );
21
+ throw new Error(StatusMessage.TENANT_SETTINGS_SINGLE_LOGO_ALLOWED);
22
+ }
23
+ logger.info("Uploading new files to storage before transaction");
24
+ const uploadResult = await FileUploadUtil.uploadFilesToStorage(
25
+ documentMetadata,
26
+ file,
27
+ FILE_PATHS.IMAGE_DIR,
28
+ );
29
+ return uploadResult
30
+ }
31
+ return [];
32
+ };
33
+
6
34
  const getTenantSettingsById = (TenantSettings, Document, getPublicUrl, logger) => {
7
35
  return async (req, res) => {
8
36
  try {
@@ -24,22 +52,21 @@ return async (req, res) => {
24
52
  res
25
53
  );
26
54
  }
27
-
28
- const documents = await Document.findAll({
55
+ let logo = null;
56
+ const document = await Document.findOne({
29
57
  where: {
30
58
  EntityType: EntityTypeEnum.TENANT_SETTINGS,
31
59
  EntityID: settings.TenantSettingID
32
60
  },
33
61
  order: [["SortOrder", "ASC"]]
34
62
  });
35
-
36
- const logo = await Promise.all(
37
- documents.map(async (doc) => ({
38
- documentId: doc.DocumentID,
39
- sortOrder: doc.SortOrder,
40
- documentUrl: await getPublicUrl(doc, logger)
41
- }))
42
- );
63
+ if(document) {
64
+ logo = {
65
+ documentId: document.DocumentID,
66
+ sortOrder: document.SortOrder,
67
+ documentUrl: await getPublicUrl(document, logger)
68
+ }
69
+ }
43
70
  const formattedSettings = {
44
71
  TenantSettingID: settings.TenantSettingID,
45
72
  TenantID: settings.TenantID,
@@ -133,30 +160,9 @@ return async (req, res) => {
133
160
  }
134
161
 
135
162
  // Upload new file to storage before starting transaction
136
- let uploadResult = [];
137
- if (documentMetadata !== undefined) {
138
- if (
139
- typeof documentMetadata !== AppConstants.OBJECT ||
140
- Array.isArray(documentMetadata)
141
- ) {
142
- logger.warn(
143
- "Validation Failed: documentMetadata must be a single object for this operation.",
144
- );
145
- return AppUtil.generateResponse(
146
- 400,
147
- StatusMessage.FAILURE,
148
- StatusMessage.TENANT_SETTINGS_SINGLE_LOGO_ALLOWED,
149
- null,
150
- res,
151
- );
152
- }
153
- logger.info('Uploading new files to storage before transaction');
154
- uploadResult = await FileUploadUtil.uploadFilesToStorage(
155
- documentMetadata,
156
- req.files,
157
- FILE_PATHS.IMAGE_DIR
158
- );
159
- uploadedFilePath = uploadResult.map(r => r.path);
163
+ const uploadResult = await tenantSettingsDocumentValidation(req.files, documentMetadata, FileUploadUtil, FILE_PATHS, logger)
164
+ if(uploadResult.length > 0) {
165
+ uploadedFilePath = uploadResult.map(result => result.path)
160
166
  }
161
167
 
162
168
  // Start database transaction
@@ -165,7 +171,12 @@ return async (req, res) => {
165
171
  // Update tenant settings
166
172
  const updatePayload = {};
167
173
  if (ThemeColour !== undefined) updatePayload.ThemeColour = ThemeColour;
168
- updatePayload.UpdatedBy = UpdatedBy;
174
+ if(UpdatedBy) {
175
+ updatePayload.UpdatedBy = UpdatedBy;
176
+ }
177
+ else {
178
+ updatePayload.UpdatedBy = req.user.UserID
179
+ }
169
180
  updatePayload.UpdatedAt = new Date();
170
181
 
171
182
  await existingSettings.update(updatePayload, { transaction });
@@ -203,16 +214,15 @@ return async (req, res) => {
203
214
  logger.info('Cleaning up uploaded files due to error');
204
215
  await FileUploadUtil.cleanupFiles(uploadedFilePath);
205
216
  }
206
-
217
+ const errorMessages = [
218
+ StatusMessage.INVALID_SORT_ORDER,
219
+ StatusMessage.FILE_NOT_FOUND,
220
+ StatusMessage.INVALID_FILE_UPLOAD_INPUT,
221
+ StatusMessage.TENANT_SETTINGS_SINGLE_LOGO_ALLOWED,
222
+ ];
207
223
  // Error handling
208
- if (error.message === StatusMessage.INVALID_SORT_ORDER) {
209
- return AppUtil.generateResponse(400, StatusMessage.FAILURE, StatusMessage.INVALID_SORT_ORDER, null, res);
210
- }
211
- if (error.message === StatusMessage.FILE_NOT_FOUND) {
212
- return AppUtil.generateResponse(400, StatusMessage.FAILURE, StatusMessage.FILE_NOT_FOUND, null, res);
213
- }
214
- if(error.message === StatusMessage.INVALID_FILE_UPLOAD_INPUT) {
215
- return AppUtil.generateResponse(400, StatusMessage.FAILURE, StatusMessage.INVALID_FILE_UPLOAD_INPUT, null, res);
224
+ if (errorMessages.includes(error.message)) {
225
+ return AppUtil.generateResponse(400, StatusMessage.FAILURE, error.message, null, res);
216
226
  }
217
227
  if (error.name === 'SequelizeUniqueConstraintError') {
218
228
  return AppUtil.generateResponse(400, StatusMessage.FAILURE, StatusMessage.TENANT_SETTINGS_ALREADY_EXISTS, null, res);
@@ -228,5 +238,5 @@ return async (req, res) => {
228
238
  });
229
239
  };
230
240
  }
231
- module.exports = {getTenantSettingsById, updateTenantSettings};
241
+ module.exports = {getTenantSettingsById, updateTenantSettings, tenantSettingsDocumentValidation};
232
242
 
@@ -193,10 +193,6 @@ const initializeModels = (sequelize) => {
193
193
  as: "Customer",
194
194
  });
195
195
 
196
- Order.belongsTo(Address, {
197
- foreignKey: "AddressID",
198
- as: "Address",
199
- });
200
196
 
201
197
  Order.hasMany(OrderItem, {
202
198
  foreignKey: "OrderID",
package/index.js CHANGED
@@ -5,7 +5,8 @@ const SubscriptionAbstractController = require('./controller/SubscriptionAbstrac
5
5
  const TenantAbstractController = require('./controller/TenantAbstractController');
6
6
  const TenantSettingsAbstractController = require('./controller/TenantSettingsAbstractController');
7
7
  const LocationController = require('./controller/LocationController');
8
- const PermissionAbstractController = require('./controller/PermissionAbstractController');
8
+ const CommonAppConstants = require('./constants/AppConstants');
9
+ const CommonStatusMessage = require('./constants/StatusMessageConstants');
9
10
  const enums = {};
10
11
  const enumDir = path.join(__dirname, 'enum');
11
12
  fs.readdirSync(enumDir).forEach((file) => {
@@ -23,4 +24,4 @@ fs.readdirSync(utilDir).forEach((file) => {
23
24
  }
24
25
  })
25
26
 
26
- module.exports = {initializeModels, enums, utils, SubscriptionAbstractController, TenantAbstractController, TenantSettingsAbstractController, LocationController, PermissionAbstractController};
27
+ module.exports = {initializeModels, enums, utils, CommonAppConstants, CommonStatusMessage, SubscriptionAbstractController, TenantAbstractController, TenantSettingsAbstractController, LocationController};
package/model/Order.js CHANGED
@@ -37,16 +37,6 @@ module.exports = (sequelize) => {
37
37
  type: DataTypes.DATE,
38
38
  allowNull: false
39
39
  },
40
- AddressID: {
41
- type: DataTypes.UUID,
42
- allowNull: false,
43
- references: {
44
- model: 'Address',
45
- key: 'AddressID'
46
- },
47
- onDelete: 'RESTRICT',
48
- onUpdate: 'CASCADE'
49
- },
50
40
  TotalAmount: {
51
41
  type: DataTypes.DECIMAL(10, 2),
52
42
  allowNull: false
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@b2y/ecommerce-common",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "E-commerce common library",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -21,6 +21,7 @@
21
21
  "homepage": "https://github.com/yuvakrishna29/ecommerce-common#readme",
22
22
  "peerDependencies": {
23
23
  "@countrystatecity/countries": "^1.0.4",
24
+ "@b2y/document-module": "^1.0.4",
24
25
  "exceljs": "^4.4.0",
25
26
  "luxon": "^3.7.2",
26
27
  "puppeteer": "^24.35.0",
@@ -1,35 +0,0 @@
1
- const AppUtil = require('../utility/AppUtil');
2
- const StatusMessage = require('../constants/StatusMessageConstants');
3
-
4
- getAllPermissions = (Permission, logger) => {
5
- return async (req, res) => {
6
- const { pageNumber, pageSize } = req.query;
7
- try {
8
- const { limit, offset } = AppUtil.getPagination(pageNumber, pageSize);
9
-
10
- const { rows, count } = await Permission.findAndCountAll({
11
- attributes: ["PermissionID", "Module", "Name", "IsChecked"],
12
- limit,
13
- offset,
14
- });
15
- return AppUtil.generateResponse(
16
- 200,
17
- StatusMessage.SUCCESS,
18
- null,
19
- { rows, count, pageNumber, limit },
20
- res,
21
- );
22
- } catch (error) {
23
- logger.error("Error fetching permissions:", error);
24
- return AppUtil.generateResponse(
25
- 500,
26
- StatusMessage.FAILURE,
27
- StatusMessage.SERVER_ERROR,
28
- null,
29
- res,
30
- );
31
- }
32
- };
33
- };
34
-
35
- module.exports = {getAllPermissions}