@b2y/ecommerce-common 1.0.0

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.
Files changed (68) hide show
  1. package/README.md +4 -0
  2. package/constants/AppConstants.js +4 -0
  3. package/constants/ReportConstants.js +15 -0
  4. package/constants/StatusMessageConstants.js +21 -0
  5. package/dbconnection/Connect.js +417 -0
  6. package/enum/AddressTypeEnum.js +7 -0
  7. package/enum/BooleanEnum.js +5 -0
  8. package/enum/EntityTypeEnum.js +10 -0
  9. package/enum/GenderEnum.js +7 -0
  10. package/enum/NotificationStatusEnum.js +6 -0
  11. package/enum/NotificationTypeEnum.js +10 -0
  12. package/enum/OrderStatusEnum.js +8 -0
  13. package/enum/PaymentMethodEnum.js +7 -0
  14. package/enum/PaymentStatusEnum.js +7 -0
  15. package/enum/PaymentTypeEnum.js +7 -0
  16. package/enum/PlatformEnum.js +5 -0
  17. package/enum/RegistrationStatusEnum.js +6 -0
  18. package/enum/SortByEnum.js +8 -0
  19. package/index.js +22 -0
  20. package/model/Address.js +114 -0
  21. package/model/AttributeType.js +51 -0
  22. package/model/AttributeValue.js +65 -0
  23. package/model/Banner.js +79 -0
  24. package/model/Brand.js +76 -0
  25. package/model/Cart.js +77 -0
  26. package/model/Category.js +73 -0
  27. package/model/CategoryAttributeType.js +63 -0
  28. package/model/City.js +49 -0
  29. package/model/Colour.js +53 -0
  30. package/model/Country.js +47 -0
  31. package/model/Customer.js +95 -0
  32. package/model/DeviceToken.js +52 -0
  33. package/model/Document.js +71 -0
  34. package/model/DynamicUIComponent.js +53 -0
  35. package/model/Feedback.js +80 -0
  36. package/model/Inventory.js +84 -0
  37. package/model/NotificationHistory.js +68 -0
  38. package/model/Order.js +95 -0
  39. package/model/OrderItem.js +99 -0
  40. package/model/OrderItemHistory.js +70 -0
  41. package/model/OrderStatus.js +49 -0
  42. package/model/Payment.js +101 -0
  43. package/model/PaymentMethod.js +37 -0
  44. package/model/PaymentStatus.js +37 -0
  45. package/model/PaymentType.js +37 -0
  46. package/model/Permission.js +55 -0
  47. package/model/Product.js +83 -0
  48. package/model/ProductGroup.js +48 -0
  49. package/model/ProductSpecification.js +66 -0
  50. package/model/ProductVariant.js +76 -0
  51. package/model/ProductVariantAttribute.js +59 -0
  52. package/model/Role.js +61 -0
  53. package/model/RolePermissionMapping.js +63 -0
  54. package/model/SpecificationType.js +42 -0
  55. package/model/State.js +56 -0
  56. package/model/Store.js +117 -0
  57. package/model/StoreUserMapping.js +44 -0
  58. package/model/Tenant.js +91 -0
  59. package/model/User.js +150 -0
  60. package/model/WishList.js +63 -0
  61. package/package.json +27 -0
  62. package/utility/AppUtil.js +58 -0
  63. package/utility/DateUtil.js +55 -0
  64. package/utility/ExcelUtil.js +125 -0
  65. package/utility/OrderTimeFilterUtil.js +86 -0
  66. package/utility/QueryUtil.js +262 -0
  67. package/utility/Razorpay.js +67 -0
  68. package/utility/VariantPriceUtil.js +55 -0
@@ -0,0 +1,47 @@
1
+ const { DataTypes } = require('sequelize');
2
+
3
+ module.exports = (sequelize) => {
4
+ return sequelize.define('Country', {
5
+ CountryID: {
6
+ type: DataTypes.INTEGER,
7
+ primaryKey: true,
8
+ autoIncrement: true,
9
+ allowNull: false
10
+ },
11
+ CountryName: {
12
+ type: DataTypes.STRING(100),
13
+ allowNull: false
14
+ },
15
+ CountryCode: {
16
+ type: DataTypes.STRING(5),
17
+ allowNull: false
18
+ },
19
+ CreatedBy: {
20
+ type: DataTypes.UUID,
21
+ allowNull: false
22
+ },
23
+ CreatedAt: {
24
+ type: DataTypes.DATE,
25
+ allowNull: false,
26
+ defaultValue: DataTypes.NOW
27
+ },
28
+ UpdatedBy: {
29
+ type: DataTypes.UUID,
30
+ allowNull: false
31
+ },
32
+ UpdatedAt: {
33
+ type: DataTypes.DATE,
34
+ allowNull: false,
35
+ defaultValue: DataTypes.NOW
36
+ }
37
+ }, {
38
+ tableName: 'Country',
39
+ timestamps: false,
40
+ indexes: [
41
+ {
42
+ unique: true,
43
+ fields: ['CountryCode', 'CountryName']
44
+ }
45
+ ]
46
+ });
47
+ };
@@ -0,0 +1,95 @@
1
+ const { DataTypes } = require('sequelize');
2
+ const GenderEnum = require('../enum/GenderEnum');
3
+ const RegistrationStatusEnum = require('../enum/RegistrationStatusEnum');
4
+ module.exports = (sequelize) => {
5
+ return sequelize.define('Customer', {
6
+ CustomerID: {
7
+ type: DataTypes.UUID,
8
+ primaryKey: true,
9
+ allowNull: false,
10
+ defaultValue: DataTypes.UUIDV4
11
+ },
12
+ TenantID: {
13
+ type: DataTypes.UUID,
14
+ allowNull: false,
15
+ references: {
16
+ model: 'Tenant',
17
+ key: 'TenantID'
18
+ },
19
+ onDelete: 'CASCADE',
20
+ onUpdate: 'CASCADE'
21
+ },
22
+ FirstName: {
23
+ type: DataTypes.STRING(255),
24
+ allowNull: true
25
+ },
26
+ LastName: {
27
+ type: DataTypes.STRING(255),
28
+ allowNull: true
29
+ },
30
+ Email: {
31
+ type: DataTypes.STRING(100),
32
+ allowNull: true,
33
+ },
34
+ Password: {
35
+ type: DataTypes.STRING(255)
36
+ },
37
+ CountryCode: {
38
+ type: DataTypes.STRING(5),
39
+ allowNull: false
40
+ },
41
+ PhoneNumber: {
42
+ type: DataTypes.STRING(20),
43
+ allowNull: false,
44
+ },
45
+ Gender: {
46
+ type: DataTypes.ENUM(...Object.values(GenderEnum)),
47
+ },
48
+ DOB: {
49
+ type: DataTypes.DATE
50
+ },
51
+ RegistrationStatus: {
52
+ type: DataTypes.ENUM(...Object.values(RegistrationStatusEnum)),
53
+ defaultValue: RegistrationStatusEnum.INITIATED
54
+ },
55
+ OTP: {
56
+ type: DataTypes.STRING(10)
57
+ },
58
+ OTPExpiry: {
59
+ type: DataTypes.DATE
60
+ },
61
+ CreatedBy: {
62
+ type: DataTypes.UUID,
63
+ allowNull: false
64
+ },
65
+ CreatedAt: {
66
+ type: DataTypes.DATE,
67
+ allowNull: false,
68
+ defaultValue: DataTypes.NOW
69
+ },
70
+ UpdatedBy: {
71
+ type: DataTypes.UUID,
72
+ allowNull: false
73
+ },
74
+ UpdatedAt: {
75
+ type: DataTypes.DATE,
76
+ allowNull: false,
77
+ defaultValue: DataTypes.NOW
78
+ }
79
+ }, {
80
+ tableName: 'Customer',
81
+ timestamps: false,
82
+ indexes: [
83
+ {
84
+ name: "UQ_Customer_Tenant_Email",
85
+ unique: true,
86
+ fields: ["TenantID", "Email"],
87
+ },
88
+ {
89
+ name: "UQ_Customer_Tenant_Phone",
90
+ unique: true,
91
+ fields: ["TenantID", "CountryCode", "PhoneNumber"],
92
+ },
93
+ ],
94
+ });
95
+ };
@@ -0,0 +1,52 @@
1
+ const { DataTypes } = require('sequelize');
2
+ const PlatformEnum = require('../enum/PlatformEnum');
3
+ module.exports = (sequelize) => {
4
+ return sequelize.define('DeviceToken', {
5
+ DeviceTokenID: {
6
+ type: DataTypes.UUID,
7
+ primaryKey: true,
8
+ allowNull: false,
9
+ defaultValue: DataTypes.UUIDV4
10
+ },
11
+ FCMToken: {
12
+ type: DataTypes.STRING(255),
13
+ allowNull: false
14
+ },
15
+ DeviceID: {
16
+ type: DataTypes.STRING(100),
17
+ allowNull: false
18
+ },
19
+ DeviceName: {
20
+ type: DataTypes.STRING(100),
21
+ allowNull: false
22
+ },
23
+ Platform: {
24
+ type: DataTypes.ENUM(...Object.values(PlatformEnum)),
25
+ },
26
+ IsActive: {
27
+ type: DataTypes.BOOLEAN,
28
+ defaultValue: true
29
+ },
30
+ CreatedBy: {
31
+ type: DataTypes.UUID,
32
+ allowNull: false
33
+ },
34
+ CreatedAt: {
35
+ type: DataTypes.DATE,
36
+ allowNull: false,
37
+ defaultValue: DataTypes.NOW
38
+ },
39
+ UpdatedBy: {
40
+ type: DataTypes.UUID,
41
+ allowNull: false
42
+ },
43
+ UpdatedAt: {
44
+ type: DataTypes.DATE,
45
+ allowNull: false,
46
+ defaultValue: DataTypes.NOW
47
+ }
48
+ }, {
49
+ tableName: 'DeviceToken',
50
+ timestamps: false
51
+ });
52
+ };
@@ -0,0 +1,71 @@
1
+ const { DataTypes } = require('sequelize');
2
+ const { STORAGE_TYPES } = require('@b2y/document-module');
3
+
4
+ module.exports = (sequelize) => {
5
+ return sequelize.define('Document', {
6
+ DocumentID: {
7
+ type: DataTypes.UUID,
8
+ primaryKey: true,
9
+ allowNull: false,
10
+ defaultValue: DataTypes.UUIDV4
11
+ },
12
+ TenantID: {
13
+ type: DataTypes.UUID,
14
+ allowNull: false,
15
+ references: {
16
+ model: 'Tenant',
17
+ key: 'TenantID'
18
+ },
19
+ onDelete: 'CASCADE'
20
+ },
21
+ EntityType: {
22
+ type: DataTypes.STRING(50),
23
+ allowNull: false
24
+ },
25
+ EntityID: {
26
+ type: DataTypes.UUID,
27
+ allowNull: false
28
+ },
29
+ DocumentUrl: {
30
+ type: DataTypes.STRING(500),
31
+ allowNull: false
32
+ },
33
+ StorageType: {
34
+ type: DataTypes.ENUM(...Object.values(STORAGE_TYPES)),
35
+ allowNull: false,
36
+ defaultValue: STORAGE_TYPES.LOCAL_DRIVE
37
+ },
38
+ MimeType: {
39
+ type: DataTypes.STRING(100)
40
+ },
41
+ SizeInBytes: {
42
+ type: DataTypes.BIGINT
43
+ },
44
+ SortOrder: {
45
+ type: DataTypes.INTEGER,
46
+ allowNull: false,
47
+ defaultValue: 0
48
+ },
49
+ CreatedBy: {
50
+ type: DataTypes.UUID,
51
+ allowNull: false
52
+ },
53
+ CreatedAt: {
54
+ type: DataTypes.DATE,
55
+ allowNull: false,
56
+ defaultValue: DataTypes.NOW
57
+ },
58
+ UpdatedBy: {
59
+ type: DataTypes.UUID,
60
+ allowNull: false
61
+ },
62
+ UpdatedAt: {
63
+ type: DataTypes.DATE,
64
+ allowNull: false,
65
+ defaultValue: DataTypes.NOW
66
+ }
67
+ }, {
68
+ tableName: 'Document',
69
+ timestamps: false
70
+ });
71
+ };
@@ -0,0 +1,53 @@
1
+ const { DataTypes } = require('sequelize');
2
+ const PlatformEnum = require('../enum/PlatformEnum');
3
+ module.exports = (sequelize) => {
4
+ return sequelize.define('DynamicUIComponent', {
5
+ ComponentID: {
6
+ type: DataTypes.UUID,
7
+ primaryKey: true,
8
+ allowNull: false,
9
+ defaultValue: DataTypes.UUIDV4
10
+ },
11
+ ComponentName: {
12
+ type: DataTypes.STRING(100),
13
+ allowNull: false,
14
+ unique: true
15
+ },
16
+ ComponentCode: {
17
+ type: DataTypes.JSON,
18
+ allowNull: false
19
+ },
20
+ Platform: {
21
+ type: DataTypes.ENUM(...Object.values(PlatformEnum)),
22
+ },
23
+ Version: {
24
+ type: DataTypes.STRING(10),
25
+ allowNull: false
26
+ },
27
+ IsActive: {
28
+ type: DataTypes.BOOLEAN,
29
+ defaultValue: true
30
+ },
31
+ CreatedBy: {
32
+ type: DataTypes.UUID,
33
+ allowNull: false
34
+ },
35
+ CreatedAt: {
36
+ type: DataTypes.DATE,
37
+ allowNull: false,
38
+ defaultValue: DataTypes.NOW
39
+ },
40
+ UpdatedBy: {
41
+ type: DataTypes.UUID,
42
+ allowNull: false
43
+ },
44
+ UpdatedAt: {
45
+ type: DataTypes.DATE,
46
+ allowNull: false,
47
+ defaultValue: DataTypes.NOW
48
+ }
49
+ }, {
50
+ tableName: 'DynamicUIComponent',
51
+ timestamps: false
52
+ });
53
+ };
@@ -0,0 +1,80 @@
1
+ const { DataTypes } = require('sequelize');
2
+
3
+ module.exports = (sequelize) => {
4
+ return sequelize.define('Feedback', {
5
+ FeedbackID: {
6
+ type: DataTypes.UUID,
7
+ primaryKey: true,
8
+ allowNull: false,
9
+ defaultValue: DataTypes.UUIDV4
10
+ },
11
+ TenantID: {
12
+ type: DataTypes.UUID,
13
+ allowNull: false,
14
+ references: {
15
+ model: 'Tenant',
16
+ key: 'TenantID'
17
+ },
18
+ onDelete: 'CASCADE',
19
+ onUpdate: 'CASCADE'
20
+ },
21
+ ProductID: {
22
+ type: DataTypes.UUID,
23
+ allowNull: false,
24
+ references: {
25
+ model: 'Product',
26
+ key: 'ProductID'
27
+ },
28
+ onDelete: 'RESTRICT',
29
+ onUpdate: 'CASCADE'
30
+ },
31
+ OrderItemID: {
32
+ type: DataTypes.UUID,
33
+ allowNull: false,
34
+ references: {
35
+ model: 'OrderItem',
36
+ key: 'OrderItemID'
37
+ },
38
+ onDelete: 'RESTRICT',
39
+ onUpdate: 'CASCADE'
40
+ },
41
+ CustomerID: {
42
+ type: DataTypes.UUID,
43
+ allowNull: false,
44
+ references: {
45
+ model: 'Customer',
46
+ key: 'CustomerID'
47
+ },
48
+ onDelete: 'RESTRICT',
49
+ onUpdate: 'CASCADE'
50
+ },
51
+ Rating: {
52
+ type: DataTypes.DECIMAL(2, 1),
53
+ allowNull: false
54
+ },
55
+ Comment: {
56
+ type: DataTypes.TEXT
57
+ },
58
+ CreatedBy: {
59
+ type: DataTypes.UUID,
60
+ allowNull: false
61
+ },
62
+ CreatedAt: {
63
+ type: DataTypes.DATE,
64
+ allowNull: false,
65
+ defaultValue: DataTypes.NOW
66
+ },
67
+ UpdatedBy: {
68
+ type: DataTypes.UUID,
69
+ allowNull: false
70
+ },
71
+ UpdatedAt: {
72
+ type: DataTypes.DATE,
73
+ allowNull: false,
74
+ defaultValue: DataTypes.NOW
75
+ }
76
+ }, {
77
+ tableName: 'Feedback',
78
+ timestamps: false
79
+ });
80
+ };
@@ -0,0 +1,84 @@
1
+ const { DataTypes } = require('sequelize');
2
+
3
+ module.exports = (sequelize) => {
4
+ return sequelize.define('Inventory', {
5
+ InventoryID: {
6
+ type: DataTypes.UUID,
7
+ primaryKey: true,
8
+ allowNull: false,
9
+ defaultValue: DataTypes.UUIDV4
10
+ },
11
+ StoreID: {
12
+ type: DataTypes.UUID,
13
+ allowNull: false,
14
+ references: {
15
+ model: 'Store',
16
+ key: 'StoreID'
17
+ },
18
+ onDelete: 'CASCADE',
19
+ onUpdate: 'CASCADE'
20
+ },
21
+ ProductVariantID: {
22
+ type: DataTypes.UUID,
23
+ allowNull: false,
24
+ references: {
25
+ model: 'ProductVariant',
26
+ key: 'ProductVariantID'
27
+ },
28
+ onDelete: 'CASCADE',
29
+ onUpdate: 'CASCADE'
30
+ },
31
+ TenantID: {
32
+ type: DataTypes.UUID,
33
+ allowNull: false,
34
+ references: {
35
+ model: 'Tenant',
36
+ key: 'TenantID'
37
+ },
38
+ onDelete: 'CASCADE',
39
+ onUpdate: 'CASCADE'
40
+ },
41
+ SellingPrice: {
42
+ type: DataTypes.DECIMAL(10, 2),
43
+ allowNull: false
44
+ },
45
+ DiscountPercentage: {
46
+ type: DataTypes.DECIMAL(5, 2),
47
+ allowNull: false
48
+ },
49
+ Quantity: {
50
+ type: DataTypes.INTEGER,
51
+ allowNull: false,
52
+ defaultValue: 0
53
+ },
54
+ ReservedQuantity: {
55
+ type: DataTypes.INTEGER,
56
+ defaultValue: 0
57
+ },
58
+ LowStockThreshold: {
59
+ type: DataTypes.INTEGER,
60
+ defaultValue: 5
61
+ },
62
+ CreatedBy: {
63
+ type: DataTypes.UUID,
64
+ allowNull: false
65
+ },
66
+ CreatedAt: {
67
+ type: DataTypes.DATE,
68
+ allowNull: false,
69
+ defaultValue: DataTypes.NOW
70
+ },
71
+ UpdatedBy: {
72
+ type: DataTypes.UUID,
73
+ allowNull: false
74
+ },
75
+ UpdatedAt: {
76
+ type: DataTypes.DATE,
77
+ allowNull: false,
78
+ defaultValue: DataTypes.NOW
79
+ }
80
+ }, {
81
+ tableName: 'Inventory',
82
+ timestamps: false
83
+ });
84
+ };
@@ -0,0 +1,68 @@
1
+ const { DataTypes } = require('sequelize');
2
+ const NotificationTypeEnum = require('../enum/NotificationTypeEnum');
3
+ const NotificationStatusEnum = require('../enum/NotificationStatusEnum');
4
+ module.exports = (sequelize) => {
5
+ return sequelize.define('NotificationHistory', {
6
+ NotificationHistoryID: {
7
+ type: DataTypes.UUID,
8
+ primaryKey: true,
9
+ allowNull: false,
10
+ defaultValue: DataTypes.UUIDV4
11
+ },
12
+ TenantID: {
13
+ type: DataTypes.UUID,
14
+ allowNull: false,
15
+ references: {
16
+ model: 'Tenant',
17
+ key: 'TenantID'
18
+ },
19
+ onDelete: 'CASCADE'
20
+ },
21
+ NotificationReferenceID: {
22
+ type: DataTypes.UUID,
23
+ allowNull: false
24
+ },
25
+ NotificationType: {
26
+ type: DataTypes.ENUM(...Object.values(NotificationTypeEnum))
27
+ },
28
+ DeviceTokenID: {
29
+ type: DataTypes.UUID,
30
+ references: {
31
+ model: 'DeviceToken',
32
+ key: 'DeviceTokenID'
33
+ },
34
+ onDelete: 'CASCADE'
35
+ },
36
+ SentAt: {
37
+ type: DataTypes.DATE
38
+ },
39
+ Status: {
40
+ type: DataTypes.ENUM(...Object.values(NotificationStatusEnum)),
41
+ allowNull: false
42
+ },
43
+ ErrorMessage: {
44
+ type: DataTypes.TEXT
45
+ },
46
+ CreatedBy: {
47
+ type: DataTypes.UUID,
48
+ allowNull: false
49
+ },
50
+ CreatedAt: {
51
+ type: DataTypes.DATE,
52
+ allowNull: false,
53
+ defaultValue: DataTypes.NOW
54
+ },
55
+ UpdatedBy: {
56
+ type: DataTypes.UUID,
57
+ allowNull: false
58
+ },
59
+ UpdatedAt: {
60
+ type: DataTypes.DATE,
61
+ allowNull: false,
62
+ defaultValue: DataTypes.NOW
63
+ }
64
+ }, {
65
+ tableName: 'NotificationHistory',
66
+ timestamps: false
67
+ });
68
+ };
package/model/Order.js ADDED
@@ -0,0 +1,95 @@
1
+ const { DataTypes } = require('sequelize');
2
+
3
+ module.exports = (sequelize) => {
4
+ return sequelize.define('Order', {
5
+ OrderID: {
6
+ type: DataTypes.UUID,
7
+ primaryKey: true,
8
+ allowNull: false,
9
+ defaultValue: DataTypes.UUIDV4
10
+ },
11
+ TenantID: {
12
+ type: DataTypes.UUID,
13
+ allowNull: false,
14
+ references: {
15
+ model: 'Tenant',
16
+ key: 'TenantID'
17
+ },
18
+ onDelete: 'CASCADE',
19
+ onUpdate: 'CASCADE'
20
+ },
21
+ CustomerID: {
22
+ type: DataTypes.UUID,
23
+ allowNull: false,
24
+ references: {
25
+ model: 'Customer',
26
+ key: 'CustomerID'
27
+ },
28
+ onDelete: 'RESTRICT',
29
+ onUpdate: 'CASCADE'
30
+ },
31
+ OrderRefID: {
32
+ type: DataTypes.STRING(100),
33
+ allowNull: false,
34
+ unique: true
35
+ },
36
+ OrderDate: {
37
+ type: DataTypes.DATE,
38
+ allowNull: false
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
+ TotalAmount: {
51
+ type: DataTypes.DECIMAL(10, 2),
52
+ allowNull: false
53
+ },
54
+ RecipientName: {
55
+ type: DataTypes.STRING(255),
56
+ allowNull: false
57
+ },
58
+ CountryCode: {
59
+ type: DataTypes.STRING(5),
60
+ allowNull: false
61
+ },
62
+ PhoneNumber: {
63
+ type: DataTypes.STRING(20),
64
+ allowNull: false
65
+ },
66
+ DeliveryAddress: {
67
+ type: DataTypes.STRING(500),
68
+ allowNull: false
69
+ },
70
+ Comments: {
71
+ type: DataTypes.TEXT
72
+ },
73
+ CreatedBy: {
74
+ type: DataTypes.UUID,
75
+ allowNull: false
76
+ },
77
+ CreatedAt: {
78
+ type: DataTypes.DATE,
79
+ allowNull: false,
80
+ defaultValue: DataTypes.NOW
81
+ },
82
+ UpdatedBy: {
83
+ type: DataTypes.UUID,
84
+ allowNull: false
85
+ },
86
+ UpdatedAt: {
87
+ type: DataTypes.DATE,
88
+ allowNull: false,
89
+ defaultValue: DataTypes.NOW
90
+ }
91
+ }, {
92
+ tableName: 'Order',
93
+ timestamps: false
94
+ });
95
+ };