| Current Path : /home/deltalab/PMS/partner-manager-backend/models/mongoose/ |
| Current File : //home/deltalab/PMS/partner-manager-backend/models/mongoose/listing.js |
const mongoose = require('mongoose');
const extendSchema = require('mongoose-extend-schema');
const { ProductSchema } = require('./product');
// SCHEMA ============================================
/**
* Listing entry
*/
const ListingEntrySchema = new mongoose.Schema(
{
productId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Product',
unique: true,
required: true,
},
price: Number,
},
{
_id: false,
},
);
/**
* Listing entry
*/
const ListingEntryProductSchema = new mongoose.Schema(
{
product: ProductSchema,
price: Number,
},
{
_id: false,
},
);
const ListingBaseSchema = new mongoose.Schema(
{
name: String,
description: String,
handle: String, // this is provided by the backoffice to match their collection
},
{
_id: false,
},
);
const ListingSchema = extendSchema(ListingBaseSchema,
{
imsgid: String, // the global idenfier provided by IMS upon creation
partnerId: {
type: mongoose.Schema.Types.ObjectId,
required: true,
ref: 'Partner',
},
entries: [ListingEntrySchema],
isDiscountActive: Boolean,
isDiscountValidFrom: Boolean,
discountValidFrom: Date,
isDiscountValidUntil: Boolean,
discountValidUntil: Date,
},
{
timestamps: true,
versionKey: false,
});
// MODELS ============================================
const listingModel = mongoose.model('Listing', ListingSchema);
const listingBaseModel = mongoose.model('ListingBase', ListingBaseSchema);
const listingEntryModel = mongoose.model('ListingEntry', ListingEntrySchema);
const listingEntryProductModel = mongoose.model('ListingEntryProduct', ListingEntryProductSchema);
// EXPORTS ===========================================
module.exports = {
listingModel,
listingBaseModel,
listingEntryModel,
listingEntryProductModel,
ListingSchema,
ListingBaseSchema,
ListingEntrySchema,
ListingEntryProductSchema,
};