enhancv/mongoose-subscriptions

View on GitHub
src/Schema/Discount.js

Summary

Maintainability
A
0 mins
Test Coverage
const mongoose = require("mongoose");
const ProcessorItem = require("./ProcessorItem");
const DiscountAmount = require("./Discount/Amount");
const DiscountPercent = require("./Discount/Percent");
const DiscountCoupon = require("./Discount/Coupon");
const DiscountCouponRestricted = require("./Discount/CouponRestricted");
const DiscountPreviousSubscription = require("./Discount/PreviousSubscription");
const originals = require("mongoose-originals");

const Discount = new mongoose.Schema(
    {
        amount: Number,
        processor: {
            type: ProcessorItem,
            default: ProcessorItem,
        },
        numberOfBillingCycles: {
            type: Number,
            default: 1,
            min: 1,
        },
        neverExpires: Boolean,
        currentBillingCycle: {
            type: Number,
            default: 0,
            min: 0,
        },
        preserve: {
            type: Boolean,
            default: false,
        },
        name: String,
        createdAt: {
            type: Date,
            default: Date.now,
        },
    },
    { _id: false }
);

Discount.DiscountAmount = DiscountAmount;
Discount.DiscountPercent = DiscountPercent;
Discount.DiscountCoupon = DiscountCoupon;
Discount.DiscountCouponRestricted = DiscountCouponRestricted;
Discount.DiscountPreviousSubscription = DiscountPreviousSubscription;

Discount.plugin(originals, { fields: ["processor"] });

Discount.virtual("isAddedToProcessor").get(function isAddedToProcessor() {
    const original = this.snapshotOriginal || this._original;
    return (
        original &&
        original.processor.state === ProcessorItem.INITIAL &&
        this.processor.state === ProcessorItem.SAVED
    );
});

Discount.virtual("numberOfBillingcyclesLeft").get(function isAddedToProcessor() {
    return this.numberOfBillingCycles - this.currentBillingCycle;
});

module.exports = Discount;