Spaces:
Sleeping
Sleeping
| const mongoose = require('mongoose'); | |
| const dynamicPriceSchema = new mongoose.Schema( | |
| { | |
| photographerId: { | |
| type: mongoose.Schema.Types.ObjectId, | |
| ref: 'Photographer', | |
| required: true, | |
| unique: true, | |
| }, | |
| basePrice: { | |
| type: Number, | |
| required: true, | |
| }, | |
| pricingRules: { | |
| weekendSurcharge: { | |
| type: Number, | |
| default: 25, // percentage | |
| }, | |
| peakHoursSurcharge: { | |
| type: Number, | |
| default: 30, // percentage | |
| }, | |
| peakHoursStart: { | |
| type: String, | |
| default: '17:00', // 5 PM | |
| }, | |
| peakHoursEnd: { | |
| type: String, | |
| default: '20:00', // 8 PM | |
| }, | |
| lastMinuteDiscount: { | |
| type: Number, | |
| default: 0, // percentage (can be positive for discount or negative for surcharge) | |
| }, | |
| lastMinuteThreshold: { | |
| type: Number, | |
| default: 24, // hours before booking | |
| }, | |
| groupDiscount: { | |
| type: Number, | |
| default: 10, // percentage for multiple hours | |
| }, | |
| seasonalAdjustments: [ | |
| { | |
| season: String, // "summer", "monsoon", "winter", "festival" | |
| multiplier: Number, // price multiplier | |
| }, | |
| ], | |
| }, | |
| suggestedPrice: { | |
| type: Number, | |
| default: null, | |
| }, | |
| suggestionBasis: { | |
| type: String, | |
| enum: ['market_analysis', 'demand_trend', 'competitor_analysis'], | |
| default: 'market_analysis', | |
| }, | |
| lastUpdated: { | |
| type: Date, | |
| default: Date.now, | |
| }, | |
| }, | |
| { timestamps: true } | |
| ); | |
| module.exports = mongoose.model('DynamicPrice', dynamicPriceSchema); | |