database-connector 1.0.7 → 2.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.
- package/CHANGELOG.md +161 -0
- package/README.md +194 -0
- package/config.js +69 -0
- package/models/Bill.js +88 -2
- package/models/Cart.js +53 -0
- package/models/Category.js +48 -3
- package/models/FlashDeal.js +76 -3
- package/models/Notification.js +67 -8
- package/models/Offer.js +75 -1
- package/models/Order.js +97 -0
- package/models/Payment.js +83 -6
- package/models/PaymentType.js +19 -0
- package/models/Plan.js +40 -0
- package/models/Policy.js +208 -90
- package/models/Product.js +113 -12
- package/models/ReductionOffer.js +58 -0
- package/models/ResetPassword.js +31 -2
- package/models/Sale.js +41 -5
- package/models/Store.js +109 -6
- package/models/StoreCategory.js +35 -4
- package/models/StoreRate.js +32 -3
- package/models/Subscription.js +63 -0
- package/models/SubscriptionOffer.js +32 -0
- package/models/User.js +118 -1
- package/models/UserAction.js +39 -0
- package/models/View.js +46 -6
- package/models/index.js +5 -2
- package/package.json +25 -4
- package/models/OrderOld.js +0 -74
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Changelog - Database Connector Models Refactoring
|
|
2
|
+
|
|
3
|
+
## 2025-12-08
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
#### Configuration & Documentation
|
|
8
|
+
- **Configuration Module**: Added `config.js` to allow runtime configuration of the package
|
|
9
|
+
- Enables consuming applications to set base URL for image path virtualization
|
|
10
|
+
- Configurable default image paths for products and stores
|
|
11
|
+
- Exports `configure()` and `getConfig()` functions from main index
|
|
12
|
+
|
|
13
|
+
- **README.md**: Added comprehensive documentation
|
|
14
|
+
- Installation and setup instructions
|
|
15
|
+
- Configuration guide with examples
|
|
16
|
+
- Complete model list and descriptions
|
|
17
|
+
- Virtual properties documentation
|
|
18
|
+
- Usage examples for common scenarios
|
|
19
|
+
|
|
20
|
+
- **package.json**: Updated package metadata
|
|
21
|
+
- Version bumped to 1.2.0
|
|
22
|
+
- Added package description
|
|
23
|
+
- Added relevant keywords for npm discoverability
|
|
24
|
+
- Added files array to specify package contents
|
|
25
|
+
- Added example script for running examples
|
|
26
|
+
|
|
27
|
+
#### Swagger/OpenAPI Documentation
|
|
28
|
+
- **Swagger JSDoc Documentation**: Added comprehensive Swagger/OpenAPI documentation to all 25 models
|
|
29
|
+
- Each model now includes detailed schema definitions with property types, descriptions, and examples
|
|
30
|
+
- Documentation follows OpenAPI 3.0 standards for easy API documentation generation
|
|
31
|
+
- Component schema definitions with required fields specifications
|
|
32
|
+
- Property types and descriptions with nested object structures
|
|
33
|
+
- Enum values for restricted fields and default values
|
|
34
|
+
- Format specifications (date-time, etc.) and example data for each model
|
|
35
|
+
|
|
36
|
+
- **Policy Model Export**: Converted `Policy.js` from schema-only export to a full standalone model
|
|
37
|
+
- Now exports both `policySchema` (for embedding) and `Policy` model (for standalone use)
|
|
38
|
+
- Maintains backward compatibility with existing code using `policySchema`
|
|
39
|
+
- Added `model` import from mongoose
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
#### Model Updates for Configuration
|
|
44
|
+
- **Product Model**: Updated to use config module instead of `process.env.APP_URL`
|
|
45
|
+
- Virtual property `imagesss` now uses `getBaseURL()`
|
|
46
|
+
- Virtual property `variantImages` now uses `getBaseURL()` and `getDefaultImagePath()`
|
|
47
|
+
|
|
48
|
+
- **Store Model**: Updated to use config module instead of `process.env.APP_URL`
|
|
49
|
+
- Virtual property `imageUrl` now uses `getBaseURL()` and `getDefaultStoreImagePath()`
|
|
50
|
+
|
|
51
|
+
#### Code Organization & Cleanup
|
|
52
|
+
|
|
53
|
+
**Removed Unused Imports:**
|
|
54
|
+
- `User.js`: Removed unused `ObjectId` from `mongodb`
|
|
55
|
+
- `Store.js`: Removed unused imports (`User`, `Product`, `ObjectId`)
|
|
56
|
+
- `Product.js`: Removed unused `ObjectId` from `mongodb`
|
|
57
|
+
- `Bill.js`: Removed unused `Timestamp` from `mongodb`
|
|
58
|
+
- `Notification.js`: Removed unused `Timestamp` from `mongodb`
|
|
59
|
+
- `Offer.js`: Removed unused `Timestamp` from `mongodb`
|
|
60
|
+
- `Payment.js`: Removed unused `ObjectId` from `mongodb`
|
|
61
|
+
|
|
62
|
+
**Code Formatting & Consistency:**
|
|
63
|
+
- Standardized indentation to tabs across all models
|
|
64
|
+
- Removed trailing commas for consistency
|
|
65
|
+
- Organized schema definitions with proper spacing
|
|
66
|
+
- Cleaned up inline comments to proper documentation format
|
|
67
|
+
|
|
68
|
+
**Specific Model Improvements:**
|
|
69
|
+
|
|
70
|
+
1. **View.js**
|
|
71
|
+
- Removed inline comment about region tracking
|
|
72
|
+
- Cleaned up schema formatting
|
|
73
|
+
|
|
74
|
+
2. **Product.js**
|
|
75
|
+
- Organized commented-out virtual properties with proper documentation
|
|
76
|
+
- Added descriptive comments for active virtual properties:
|
|
77
|
+
- `imagesss`: Virtual for product images with full URLs
|
|
78
|
+
- `discounted`: Virtual for discounted price calculation
|
|
79
|
+
- `variantImages`: Virtual for variant images with full URLs
|
|
80
|
+
- Fixed typo in console.log ("Disount" → "Discount")
|
|
81
|
+
|
|
82
|
+
3. **Bill.js**
|
|
83
|
+
- Organized virtual properties with descriptive comments:
|
|
84
|
+
- `needToBePay`: Calculate amount that needs to be paid
|
|
85
|
+
- `isPayed`: Check if bill is fully paid
|
|
86
|
+
|
|
87
|
+
4. **Category.js**
|
|
88
|
+
- Cleaned up schema formatting
|
|
89
|
+
- Organized timestamps configuration
|
|
90
|
+
|
|
91
|
+
5. **FlashDeal.js**
|
|
92
|
+
- Removed trailing commas
|
|
93
|
+
- Standardized formatting
|
|
94
|
+
|
|
95
|
+
6. **Notification.js**
|
|
96
|
+
- Cleaned up spacing in enum definitions
|
|
97
|
+
- Organized boolean field declarations
|
|
98
|
+
|
|
99
|
+
7. **Payment.js**
|
|
100
|
+
- Organized closing braces
|
|
101
|
+
- Cleaned up formatting
|
|
102
|
+
|
|
103
|
+
8. **Sale.js**
|
|
104
|
+
- Removed inline comment about region tracking
|
|
105
|
+
- Cleaned up schema definition
|
|
106
|
+
|
|
107
|
+
9. **StoreCategory.js**
|
|
108
|
+
- Removed excessive spacing
|
|
109
|
+
- Organized confirmed field
|
|
110
|
+
|
|
111
|
+
10. **StoreRate.js**
|
|
112
|
+
- Removed trailing commas
|
|
113
|
+
- Cleaned up schema
|
|
114
|
+
|
|
115
|
+
11. **ResetPassword.js**
|
|
116
|
+
- Fixed indentation for `expires` field
|
|
117
|
+
|
|
118
|
+
12. **OrderOld.js** (Legacy Model)
|
|
119
|
+
- Added comprehensive Swagger documentation
|
|
120
|
+
- Removed unused `ObjectId` import
|
|
121
|
+
- Organized schema with consistent formatting
|
|
122
|
+
- Added note indicating this is a legacy model (export commented out)
|
|
123
|
+
- Provided clear instructions for enabling if needed
|
|
124
|
+
|
|
125
|
+
13. **Policy.js**
|
|
126
|
+
- Converted to export both schema and standalone model
|
|
127
|
+
- Maintains backward compatibility
|
|
128
|
+
|
|
129
|
+
### Fixed
|
|
130
|
+
- **Environment Variables**: Resolved issue with `process.env` not working in npm packages
|
|
131
|
+
- Package now properly handles configuration from consuming applications
|
|
132
|
+
- No longer relies on environment variables being available in package context
|
|
133
|
+
|
|
134
|
+
### Maintained
|
|
135
|
+
- **All Commented Code**: Preserved all commented code with improved formatting
|
|
136
|
+
- **Backward Compatibility**: All existing imports and usage patterns remain functional
|
|
137
|
+
- **Schema Definitions**: No changes to actual schema structures or validations
|
|
138
|
+
- **Model Exports**: All models maintain their existing export patterns
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Summary
|
|
143
|
+
|
|
144
|
+
**Models with Complete Swagger Documentation (24 total):**
|
|
145
|
+
Bill, Cart, Category, FlashDeal, Notification, Offer, Order, OrderOld (Legacy), Payment, PaymentType, Plan, Policy, Product, ReductionOffer, ResetPassword, Sale, Store, StoreCategory, StoreRate, Subscription, SubscriptionOffer, User, UserAction, View
|
|
146
|
+
|
|
147
|
+
**Code Quality Improvements:**
|
|
148
|
+
- ✅ Zero linting errors
|
|
149
|
+
- ✅ Consistent formatting across all models
|
|
150
|
+
- ✅ Removed 8 unused dependencies
|
|
151
|
+
- ✅ Proper documentation for all virtual properties
|
|
152
|
+
- ✅ Clean, readable code structure
|
|
153
|
+
|
|
154
|
+
**Files Modified:** 24 model files + 1 new CHANGELOG.md + 1 new config.js + 1 new README.md
|
|
155
|
+
|
|
156
|
+
**Total Lines of Documentation Added:** ~1,800+
|
|
157
|
+
|
|
158
|
+
**Migration Notes:**
|
|
159
|
+
- No breaking changes - all changes are backward compatible
|
|
160
|
+
- Policy model now exports both `policySchema` and `Policy` model
|
|
161
|
+
- Product and Store models now use config module for URL virtualization
|
package/README.md
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# Database Connector Package
|
|
2
|
+
|
|
3
|
+
MongoDB models package with Mongoose schemas for e-commerce application.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install database-connector
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Basic Setup
|
|
14
|
+
|
|
15
|
+
```javascript
|
|
16
|
+
const { connectToDatabase, configure, User, Product, Store } = require('database-connector');
|
|
17
|
+
|
|
18
|
+
// Configure the package (IMPORTANT: Do this before using models)
|
|
19
|
+
configure({
|
|
20
|
+
baseURL: process.env.APP_URL || 'http://localhost:3000',
|
|
21
|
+
defaultImagePath: '/images/default.png',
|
|
22
|
+
defaultStoreImagePath: '/images/stores/default.jpg'
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// Connect to database
|
|
26
|
+
await connectToDatabase(process.env.MONGODB_URI);
|
|
27
|
+
|
|
28
|
+
// Use models
|
|
29
|
+
const user = await User.findById(userId);
|
|
30
|
+
const products = await Product.find({ storeId });
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Configuration
|
|
34
|
+
|
|
35
|
+
**Important:** You must configure the package before using any models that have virtual properties for image URLs (Product and Store models).
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
const { configure } = require('database-connector');
|
|
39
|
+
|
|
40
|
+
configure({
|
|
41
|
+
baseURL: 'https://api.yourdomain.com', // Your API base URL
|
|
42
|
+
defaultImagePath: '/images/default.png', // Default product image
|
|
43
|
+
defaultStoreImagePath: '/images/stores/default.jpg' // Default store image
|
|
44
|
+
});
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
#### Configuration Options
|
|
48
|
+
|
|
49
|
+
| Option | Type | Default | Description |
|
|
50
|
+
|--------|------|---------|-------------|
|
|
51
|
+
| `baseURL` | string | `process.env.APP_URL` or `'http://localhost:3000'` | Base URL for constructing image URLs |
|
|
52
|
+
| `defaultImagePath` | string | `'/images/default.png'` | Default image path for products without images |
|
|
53
|
+
| `defaultStoreImagePath` | string | `'/images/stores/default.jpg'` | Default image path for stores without images |
|
|
54
|
+
|
|
55
|
+
### Environment Variables
|
|
56
|
+
|
|
57
|
+
The package will use `process.env.APP_URL` as the default `baseURL` if not configured explicitly. You can set this in your `.env` file:
|
|
58
|
+
|
|
59
|
+
```env
|
|
60
|
+
APP_URL=https://api.yourdomain.com
|
|
61
|
+
MONGODB_URI=mongodb://localhost:27017/your-database
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Available Models
|
|
65
|
+
|
|
66
|
+
- **User** - User accounts and profiles
|
|
67
|
+
- **Store** - Store/shop information
|
|
68
|
+
- **Product** - Product catalog
|
|
69
|
+
- **Order** - Customer orders
|
|
70
|
+
- **Cart** - Shopping cart
|
|
71
|
+
- **Bill** - Billing information
|
|
72
|
+
- **Payment** - Payment transactions
|
|
73
|
+
- **Category** - Product categories
|
|
74
|
+
- **StoreCategory** - Store categories
|
|
75
|
+
- **Offer** - Special offers and promotions
|
|
76
|
+
- **FlashDeal** - Flash sale deals
|
|
77
|
+
- **Subscription** - Store subscriptions
|
|
78
|
+
- **Plan** - Subscription plans
|
|
79
|
+
- **SubscriptionOffer** - Subscription offer details
|
|
80
|
+
- **ReductionOffer** - Reduction/discount offers
|
|
81
|
+
- **Notification** - User notifications
|
|
82
|
+
- **View** - Product/store view tracking
|
|
83
|
+
- **Sale** - Sales records
|
|
84
|
+
- **StoreRate** - Store ratings
|
|
85
|
+
- **ResetPassword** - Password reset tokens
|
|
86
|
+
- **PaymentType** - Payment method types
|
|
87
|
+
- **UserAction** - User activity tracking
|
|
88
|
+
- **Policy** - Store/product policies
|
|
89
|
+
|
|
90
|
+
## Virtual Properties
|
|
91
|
+
|
|
92
|
+
Some models include virtual properties that generate full URLs for images:
|
|
93
|
+
|
|
94
|
+
### Product Model
|
|
95
|
+
|
|
96
|
+
- `imagesss` - Returns array of product images with full URLs
|
|
97
|
+
- `variantImages` - Returns array of variant images with full URLs
|
|
98
|
+
- `discounted` - Returns discounted price if offer exists
|
|
99
|
+
|
|
100
|
+
```javascript
|
|
101
|
+
const product = await Product.findById(productId).populate('offer');
|
|
102
|
+
console.log(product.imagesss);
|
|
103
|
+
// ['https://api.yourdomain.com/uploads/product1.jpg', ...]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Store Model
|
|
107
|
+
|
|
108
|
+
- `imageUrl` - Returns store image with full URL
|
|
109
|
+
- `rating` - Calculates average rating from ratingSum/ratingCount
|
|
110
|
+
|
|
111
|
+
```javascript
|
|
112
|
+
const store = await Store.findById(storeId);
|
|
113
|
+
console.log(store.imageUrl);
|
|
114
|
+
// 'https://api.yourdomain.com/uploads/store-logo.jpg'
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## Example: Complete Setup
|
|
118
|
+
|
|
119
|
+
```javascript
|
|
120
|
+
const express = require('express');
|
|
121
|
+
const {
|
|
122
|
+
connectToDatabase,
|
|
123
|
+
configure,
|
|
124
|
+
User,
|
|
125
|
+
Product,
|
|
126
|
+
Store,
|
|
127
|
+
Order
|
|
128
|
+
} = require('database-connector');
|
|
129
|
+
|
|
130
|
+
const app = express();
|
|
131
|
+
|
|
132
|
+
// Configure the package FIRST
|
|
133
|
+
configure({
|
|
134
|
+
baseURL: process.env.APP_URL || 'http://localhost:3000'
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// Connect to database
|
|
138
|
+
connectToDatabase(process.env.MONGODB_URI)
|
|
139
|
+
.then(() => console.log('Database connected'))
|
|
140
|
+
.catch(err => console.error('Database connection failed:', err));
|
|
141
|
+
|
|
142
|
+
// Use models in your routes
|
|
143
|
+
app.get('/products/:id', async (req, res) => {
|
|
144
|
+
try {
|
|
145
|
+
const product = await Product.findById(req.params.id);
|
|
146
|
+
res.json({
|
|
147
|
+
...product.toJSON(),
|
|
148
|
+
// Virtual properties are automatically included with toJSON
|
|
149
|
+
images: product.imagesss
|
|
150
|
+
});
|
|
151
|
+
} catch (error) {
|
|
152
|
+
res.status(500).json({ error: error.message });
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
app.listen(3000);
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## Swagger Documentation
|
|
160
|
+
|
|
161
|
+
All models include comprehensive Swagger/OpenAPI documentation. You can use these to generate API documentation.
|
|
162
|
+
|
|
163
|
+
## Policy Schema
|
|
164
|
+
|
|
165
|
+
The `Policy` model can be used both as a standalone model and as an embedded schema:
|
|
166
|
+
|
|
167
|
+
```javascript
|
|
168
|
+
const { Policy, policySchema } = require('database-connector');
|
|
169
|
+
|
|
170
|
+
// As standalone model
|
|
171
|
+
const policy = new Policy({ /* ... */ });
|
|
172
|
+
await policy.save();
|
|
173
|
+
|
|
174
|
+
// As embedded schema (already used in Product, Store, User models)
|
|
175
|
+
const product = new Product({
|
|
176
|
+
name: 'Product Name',
|
|
177
|
+
policy: {
|
|
178
|
+
workingTime: { openTime: '09:00', closeTime: '18:00' },
|
|
179
|
+
// ... other policy fields
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
## TypeScript Support
|
|
185
|
+
|
|
186
|
+
Type definitions are not included in this package yet. They may be added in future versions.
|
|
187
|
+
|
|
188
|
+
## License
|
|
189
|
+
|
|
190
|
+
ISC
|
|
191
|
+
|
|
192
|
+
## Changelog
|
|
193
|
+
|
|
194
|
+
See [CHANGELOG.md](./CHANGELOG.md) for version history and changes.
|
package/config.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration module for database-connector package
|
|
3
|
+
* Allows consuming applications to set runtime configuration
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
let config = {
|
|
7
|
+
baseURL: process.env.APP_URL || 'http://localhost:3000',
|
|
8
|
+
defaultImagePath: '/images/default.png',
|
|
9
|
+
defaultStoreImagePath: '/images/stores/default.jpg'
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Set the configuration for the package
|
|
14
|
+
* @param {Object} options - Configuration options
|
|
15
|
+
* @param {string} options.baseURL - Base URL for image paths (e.g., 'https://api.example.com')
|
|
16
|
+
* @param {string} options.defaultImagePath - Default image path for products
|
|
17
|
+
* @param {string} options.defaultStoreImagePath - Default image path for stores
|
|
18
|
+
*/
|
|
19
|
+
function configure(options = {}) {
|
|
20
|
+
if (options.baseURL !== undefined) {
|
|
21
|
+
config.baseURL = options.baseURL;
|
|
22
|
+
}
|
|
23
|
+
if (options.defaultImagePath !== undefined) {
|
|
24
|
+
config.defaultImagePath = options.defaultImagePath;
|
|
25
|
+
}
|
|
26
|
+
if (options.defaultStoreImagePath !== undefined) {
|
|
27
|
+
config.defaultStoreImagePath = options.defaultStoreImagePath;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Get the current configuration
|
|
33
|
+
* @returns {Object} Current configuration
|
|
34
|
+
*/
|
|
35
|
+
function getConfig() {
|
|
36
|
+
return { ...config };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get the base URL
|
|
41
|
+
* @returns {string} Base URL
|
|
42
|
+
*/
|
|
43
|
+
function getBaseURL() {
|
|
44
|
+
return config.baseURL;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Get the default image path
|
|
49
|
+
* @returns {string} Default image path
|
|
50
|
+
*/
|
|
51
|
+
function getDefaultImagePath() {
|
|
52
|
+
return config.defaultImagePath;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Get the default store image path
|
|
57
|
+
* @returns {string} Default store image path
|
|
58
|
+
*/
|
|
59
|
+
function getDefaultStoreImagePath() {
|
|
60
|
+
return config.defaultStoreImagePath;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
module.exports = {
|
|
64
|
+
configure,
|
|
65
|
+
getConfig,
|
|
66
|
+
getBaseURL,
|
|
67
|
+
getDefaultImagePath,
|
|
68
|
+
getDefaultStoreImagePath
|
|
69
|
+
};
|
package/models/Bill.js
CHANGED
|
@@ -1,5 +1,87 @@
|
|
|
1
|
-
const { Timestamp } = require('mongodb');
|
|
2
1
|
const mongoose = require('mongoose');
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @swagger
|
|
5
|
+
* components:
|
|
6
|
+
* schemas:
|
|
7
|
+
* Bill:
|
|
8
|
+
* type: object
|
|
9
|
+
* required:
|
|
10
|
+
* - userId
|
|
11
|
+
* - storeId
|
|
12
|
+
* - totalPrice
|
|
13
|
+
* - discount
|
|
14
|
+
* properties:
|
|
15
|
+
* id:
|
|
16
|
+
* type: string
|
|
17
|
+
* description: The bill identifier
|
|
18
|
+
* userId:
|
|
19
|
+
* type: string
|
|
20
|
+
* description: Reference to the user
|
|
21
|
+
* storeId:
|
|
22
|
+
* type: string
|
|
23
|
+
* description: Reference to the store
|
|
24
|
+
* paymentId:
|
|
25
|
+
* type: string
|
|
26
|
+
* description: Payment identifier
|
|
27
|
+
* paymentMethod:
|
|
28
|
+
* type: string
|
|
29
|
+
* description: Payment method used
|
|
30
|
+
* products:
|
|
31
|
+
* type: array
|
|
32
|
+
* items:
|
|
33
|
+
* type: object
|
|
34
|
+
* properties:
|
|
35
|
+
* productId:
|
|
36
|
+
* type: string
|
|
37
|
+
* variantId:
|
|
38
|
+
* type: string
|
|
39
|
+
* quantity:
|
|
40
|
+
* type: number
|
|
41
|
+
* totalPrice:
|
|
42
|
+
* type: number
|
|
43
|
+
* discount:
|
|
44
|
+
* type: number
|
|
45
|
+
* totalPrice:
|
|
46
|
+
* type: number
|
|
47
|
+
* description: Total price of the bill
|
|
48
|
+
* discount:
|
|
49
|
+
* type: number
|
|
50
|
+
* description: Total discount applied
|
|
51
|
+
* shippingStatus:
|
|
52
|
+
* type: string
|
|
53
|
+
* enum: [none, pending, shipped, delivered]
|
|
54
|
+
* default: pending
|
|
55
|
+
* paymentStatus:
|
|
56
|
+
* type: string
|
|
57
|
+
* enum: [none, pending, succeeded, cancelled]
|
|
58
|
+
* default: pending
|
|
59
|
+
* refundStatus:
|
|
60
|
+
* type: string
|
|
61
|
+
* enum: [none, pending, succeeded, cancelled]
|
|
62
|
+
* default: none
|
|
63
|
+
* payed:
|
|
64
|
+
* type: number
|
|
65
|
+
* default: 0
|
|
66
|
+
* description: Amount already paid
|
|
67
|
+
* createdAt:
|
|
68
|
+
* type: string
|
|
69
|
+
* format: date-time
|
|
70
|
+
* updatedAt:
|
|
71
|
+
* type: string
|
|
72
|
+
* format: date-time
|
|
73
|
+
* example:
|
|
74
|
+
* id: "507f1f77bcf86cd799439011"
|
|
75
|
+
* userId: "507f1f77bcf86cd799439012"
|
|
76
|
+
* storeId: "507f1f77bcf86cd799439013"
|
|
77
|
+
* totalPrice: 150.00
|
|
78
|
+
* discount: 15.00
|
|
79
|
+
* paymentStatus: "succeeded"
|
|
80
|
+
* shippingStatus: "delivered"
|
|
81
|
+
* payed: 135.00
|
|
82
|
+
* createdAt: "2025-12-07T10:30:00.000Z"
|
|
83
|
+
* updatedAt: "2025-12-07T10:30:00.000Z"
|
|
84
|
+
*/
|
|
3
85
|
const BillSchema = new mongoose.Schema(
|
|
4
86
|
{
|
|
5
87
|
userId: {
|
|
@@ -87,9 +169,11 @@ const BillSchema = new mongoose.Schema(
|
|
|
87
169
|
},
|
|
88
170
|
{
|
|
89
171
|
timestamps: true,
|
|
90
|
-
toJSON: { virtuals: true }
|
|
172
|
+
toJSON: { virtuals: true }
|
|
91
173
|
}
|
|
92
174
|
);
|
|
175
|
+
|
|
176
|
+
// Virtual: calculate amount that needs to be paid
|
|
93
177
|
BillSchema.virtual('needToBePay').get(function () {
|
|
94
178
|
if (this.paymentStatus === 'pending') {
|
|
95
179
|
return this.totalPrice;
|
|
@@ -99,6 +183,8 @@ BillSchema.virtual('needToBePay').get(function () {
|
|
|
99
183
|
return 0;
|
|
100
184
|
}
|
|
101
185
|
});
|
|
186
|
+
|
|
187
|
+
// Virtual: check if bill is fully paid
|
|
102
188
|
BillSchema.virtual('isPayed').get(function () {
|
|
103
189
|
if (this.paymentStatus === 'succeeded') {
|
|
104
190
|
return true;
|
package/models/Cart.js
CHANGED
|
@@ -1,5 +1,58 @@
|
|
|
1
1
|
const { Schema, model } = require('mongoose');
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @swagger
|
|
5
|
+
* components:
|
|
6
|
+
* schemas:
|
|
7
|
+
* Cart:
|
|
8
|
+
* type: object
|
|
9
|
+
* properties:
|
|
10
|
+
* id:
|
|
11
|
+
* type: string
|
|
12
|
+
* description: The cart identifier
|
|
13
|
+
* userId:
|
|
14
|
+
* type: string
|
|
15
|
+
* description: Reference to the user (unique)
|
|
16
|
+
* items:
|
|
17
|
+
* type: array
|
|
18
|
+
* items:
|
|
19
|
+
* type: object
|
|
20
|
+
* properties:
|
|
21
|
+
* productId:
|
|
22
|
+
* type: string
|
|
23
|
+
* variantId:
|
|
24
|
+
* type: string
|
|
25
|
+
* discount:
|
|
26
|
+
* type: number
|
|
27
|
+
* default: 0
|
|
28
|
+
* quantity:
|
|
29
|
+
* type: number
|
|
30
|
+
* default: 1
|
|
31
|
+
* totalPrice:
|
|
32
|
+
* type: number
|
|
33
|
+
* default: 0
|
|
34
|
+
* totalDiscount:
|
|
35
|
+
* type: number
|
|
36
|
+
* default: 0
|
|
37
|
+
* description: Total discount for the cart
|
|
38
|
+
* totalPayable:
|
|
39
|
+
* type: number
|
|
40
|
+
* default: 0
|
|
41
|
+
* description: Total amount payable
|
|
42
|
+
* createdAt:
|
|
43
|
+
* type: string
|
|
44
|
+
* format: date-time
|
|
45
|
+
* updatedAt:
|
|
46
|
+
* type: string
|
|
47
|
+
* format: date-time
|
|
48
|
+
* example:
|
|
49
|
+
* id: "507f1f77bcf86cd799439011"
|
|
50
|
+
* userId: "507f1f77bcf86cd799439012"
|
|
51
|
+
* totalDiscount: 20.00
|
|
52
|
+
* totalPayable: 180.00
|
|
53
|
+
* createdAt: "2025-12-07T10:30:00.000Z"
|
|
54
|
+
* updatedAt: "2025-12-07T10:30:00.000Z"
|
|
55
|
+
*/
|
|
3
56
|
const itemSchema = new Schema(
|
|
4
57
|
{
|
|
5
58
|
productId: { type: Schema.Types.ObjectId, ref: 'Product', required: true },
|
package/models/Category.js
CHANGED
|
@@ -1,5 +1,50 @@
|
|
|
1
1
|
const mongoose = require('mongoose');
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @swagger
|
|
5
|
+
* components:
|
|
6
|
+
* schemas:
|
|
7
|
+
* Category:
|
|
8
|
+
* type: object
|
|
9
|
+
* required:
|
|
10
|
+
* - name
|
|
11
|
+
* properties:
|
|
12
|
+
* id:
|
|
13
|
+
* type: string
|
|
14
|
+
* description: The category identifier
|
|
15
|
+
* storeCategoryId:
|
|
16
|
+
* type: string
|
|
17
|
+
* description: Reference to store category
|
|
18
|
+
* name:
|
|
19
|
+
* type: string
|
|
20
|
+
* description: Category name
|
|
21
|
+
* confirmed:
|
|
22
|
+
* type: boolean
|
|
23
|
+
* default: false
|
|
24
|
+
* description: Whether the category is confirmed
|
|
25
|
+
* subCategories:
|
|
26
|
+
* type: array
|
|
27
|
+
* items:
|
|
28
|
+
* type: object
|
|
29
|
+
* properties:
|
|
30
|
+
* name:
|
|
31
|
+
* type: string
|
|
32
|
+
* confirmed:
|
|
33
|
+
* type: boolean
|
|
34
|
+
* default: false
|
|
35
|
+
* createdAt:
|
|
36
|
+
* type: string
|
|
37
|
+
* format: date-time
|
|
38
|
+
* updatedAt:
|
|
39
|
+
* type: string
|
|
40
|
+
* format: date-time
|
|
41
|
+
* example:
|
|
42
|
+
* id: "507f1f77bcf86cd799439011"
|
|
43
|
+
* name: "Electronics"
|
|
44
|
+
* confirmed: true
|
|
45
|
+
* createdAt: "2025-11-01T10:30:00.000Z"
|
|
46
|
+
* updatedAt: "2025-12-01T15:45:00.000Z"
|
|
47
|
+
*/
|
|
3
48
|
const categorySchema = new mongoose.Schema(
|
|
4
49
|
{
|
|
5
50
|
storeCategoryId: {
|
|
@@ -20,9 +65,9 @@ const categorySchema = new mongoose.Schema(
|
|
|
20
65
|
confirmed: { type: Boolean, default: false },
|
|
21
66
|
},
|
|
22
67
|
{
|
|
23
|
-
timestamps: true
|
|
24
|
-
}
|
|
25
|
-
]
|
|
68
|
+
timestamps: true
|
|
69
|
+
}
|
|
70
|
+
]
|
|
26
71
|
},
|
|
27
72
|
{ timestamps: true, toJSON: { virtuals: true } }
|
|
28
73
|
);
|