1 | require('q3-schema-types');
|
2 | const { Schema } = require('mongoose');
|
3 | const {
|
4 | withNorthAmericanCurrency,
|
5 | withDateRange,
|
6 | } = require('q3-schema-utils');
|
7 | const { conditionalSkuThreshold } = require('./validation');
|
8 |
|
9 | const RebateTierSchema = new Schema({
|
10 | quantity: Number,
|
11 | value: Number,
|
12 | });
|
13 |
|
14 | const RebatesSchema = new Schema({
|
15 | name: {
|
16 | type: String,
|
17 | required: true,
|
18 | searchable: true,
|
19 | },
|
20 | description: {
|
21 | type: String,
|
22 | required: true,
|
23 | searchable: true,
|
24 | },
|
25 | couponCode: {
|
26 | type: String,
|
27 | dedupe: true,
|
28 | searchable: true,
|
29 | },
|
30 | value: {
|
31 | type: Number,
|
32 | min: [0, 'Cannot be negative'],
|
33 | },
|
34 | maximumPerOrder: Number,
|
35 | maximumPerProduct: Number,
|
36 | maximumPerHistory: Number,
|
37 | requiredSkus: {
|
38 | type: Schema.Types.CommaDelimited,
|
39 | searchable: true,
|
40 | },
|
41 | conditionalSkus: Schema.Types.CommaDelimited,
|
42 | conditionalSkuThreshold: {
|
43 | validate: conditionalSkuThreshold,
|
44 | type: Number,
|
45 | },
|
46 | tiers: [RebateTierSchema],
|
47 | symbol: {
|
48 | type: String,
|
49 | default: '$',
|
50 | enum: ['$', '%', '='],
|
51 | required: true,
|
52 | },
|
53 | });
|
54 |
|
55 | RebatesSchema.plugin(withDateRange);
|
56 | RebatesSchema.plugin(withNorthAmericanCurrency);
|
57 |
|
58 | module.exports = RebatesSchema;
|