@winible/winible-typed 2.2.9 → 2.3.1
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/dist/typed-model/index.js +3 -1
- package/dist/typed-model/index.js.map +1 -1
- package/dist/typed-model/pb-sequelize.js +21 -4
- package/dist/typed-model/pb-sequelize.js.map +1 -1
- package/dist/typed-model/subscription-coupon.js +42 -0
- package/dist/typed-model/subscription-coupon.js.map +1 -0
- package/dist/typed-model/subscription-plan.js +14 -4
- package/dist/typed-model/subscription-plan.js.map +1 -1
- package/package.json +1 -1
- package/typed-model/index.ts +1 -0
- package/typed-model/pb-sequelize.ts +24 -4
- package/typed-model/subscription-coupon.ts +70 -0
- package/typed-model/subscription-plan.ts +20 -7
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.User = exports.League = exports.Withdrawal = exports.RecurlyAccount = exports.SubscriptionPlanOnPost = exports.SubscriptionPlanOnUsers = exports.SubscriptionPlan = exports.PostsOnUsers = exports.Post = exports.pbSequelize = exports.Notification = exports.Media = exports.MediaAsset = exports.Transaction = exports.ContentLike = void 0;
|
6
|
+
exports.SubscriptionCoupon = exports.User = exports.League = exports.Withdrawal = exports.RecurlyAccount = exports.SubscriptionPlanOnPost = exports.SubscriptionPlanOnUsers = exports.SubscriptionPlan = exports.PostsOnUsers = exports.Post = exports.pbSequelize = exports.Notification = exports.Media = exports.MediaAsset = exports.Transaction = exports.ContentLike = void 0;
|
7
7
|
var content_like_1 = require("./content-like");
|
8
8
|
Object.defineProperty(exports, "ContentLike", { enumerable: true, get: function () { return __importDefault(content_like_1).default; } });
|
9
9
|
var transaction_1 = require("./transaction");
|
@@ -34,4 +34,6 @@ var league_1 = require("./league");
|
|
34
34
|
Object.defineProperty(exports, "League", { enumerable: true, get: function () { return __importDefault(league_1).default; } });
|
35
35
|
var user_1 = require("./user");
|
36
36
|
Object.defineProperty(exports, "User", { enumerable: true, get: function () { return __importDefault(user_1).default; } });
|
37
|
+
var subscription_coupon_1 = require("./subscription-coupon");
|
38
|
+
Object.defineProperty(exports, "SubscriptionCoupon", { enumerable: true, get: function () { return __importDefault(subscription_coupon_1).default; } });
|
37
39
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../typed-model/index.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,6CAAuD;AAA9C,2HAAA,OAAO,OAAe;AAC/B,6CAAsD;AAA7C,0HAAA,OAAO,OAAc;AAC9B,iCAA2C;AAAlC,+GAAA,OAAO,OAAS;AACzB,+CAAyD;AAAhD,6HAAA,OAAO,OAAgB;AAChC,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,+BAAyC;AAAhC,6GAAA,OAAO,OAAQ;AACxB,mDAA2D;AAAlD,+HAAA,OAAO,OAAgB;AAChC,yDAAkE;AAAzD,sIAAA,OAAO,OAAoB;AACpC,2EAAkF;AAAzE,sJAAA,OAAO,OAA2B;AAC3C,yEAAgF;AAAvE,oJAAA,OAAO,OAA0B;AAC1C,qDAA8D;AAArD,kIAAA,OAAO,OAAkB;AAClC,2CAAqD;AAA5C,yHAAA,OAAO,OAAc;AAC9B,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,+BAAyC;AAAhC,6GAAA,OAAO,OAAQ"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../typed-model/index.ts"],"names":[],"mappings":";;;;;;AAAA,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,6CAAuD;AAA9C,2HAAA,OAAO,OAAe;AAC/B,6CAAsD;AAA7C,0HAAA,OAAO,OAAc;AAC9B,iCAA2C;AAAlC,+GAAA,OAAO,OAAS;AACzB,+CAAyD;AAAhD,6HAAA,OAAO,OAAgB;AAChC,+CAAwD;AAA/C,4HAAA,OAAO,OAAe;AAC/B,+BAAyC;AAAhC,6GAAA,OAAO,OAAQ;AACxB,mDAA2D;AAAlD,+HAAA,OAAO,OAAgB;AAChC,yDAAkE;AAAzD,sIAAA,OAAO,OAAoB;AACpC,2EAAkF;AAAzE,sJAAA,OAAO,OAA2B;AAC3C,yEAAgF;AAAvE,oJAAA,OAAO,OAA0B;AAC1C,qDAA8D;AAArD,kIAAA,OAAO,OAAkB;AAClC,2CAAqD;AAA5C,yHAAA,OAAO,OAAc;AAC9B,mCAA6C;AAApC,iHAAA,OAAO,OAAU;AAC1B,+BAAyC;AAAhC,6GAAA,OAAO,OAAQ;AACxB,6DAAsE;AAA7D,0IAAA,OAAO,OAAsB"}
|
@@ -15,14 +15,31 @@ const sequelize_1 = require("sequelize");
|
|
15
15
|
const dbUrl = process.env.ENVIRONMENT === "test"
|
16
16
|
? process.env.TESTING_DATABASE_URL
|
17
17
|
: process.env.DATABASE_URL;
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
// Staging
|
19
|
+
const sequelize = new sequelize_1.Sequelize({
|
20
|
+
username: "postgres",
|
21
|
+
password: "OXVdY35B776",
|
22
|
+
database: "winible",
|
23
|
+
host: "winible-v2-staging.cd9ez5rrajpu.us-east-1.rds.amazonaws.com",
|
24
|
+
dialect: "postgres",
|
25
|
+
ssl: false,
|
21
26
|
dialectOptions: {
|
22
27
|
ssl: {
|
23
28
|
require: true,
|
24
|
-
rejectUnauthorized: false,
|
29
|
+
rejectUnauthorized: false,
|
25
30
|
},
|
26
31
|
},
|
27
32
|
});
|
33
|
+
sequelize.sync();
|
34
|
+
exports.default = sequelize;
|
35
|
+
// export default new Sequelize(dbUrl!, {
|
36
|
+
// logging: false,
|
37
|
+
// minifyAliases: true,
|
38
|
+
// dialectOptions: {
|
39
|
+
// ssl: {
|
40
|
+
// require: true,
|
41
|
+
// rejectUnauthorized: false, // <<<<<<< YOU NEED THIS
|
42
|
+
// },
|
43
|
+
// },
|
44
|
+
// });
|
28
45
|
//# sourceMappingURL=pb-sequelize.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pb-sequelize.js","sourceRoot":"","sources":["../../typed-model/pb-sequelize.ts"],"names":[],"mappings":";;;;;AAAA,oBAAoB;AACpB,oBAAoB;AACpB,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAChB,mBAAmB;AAEnB,yCAAsC;AAEtC;;GAEG;AACH,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;IAChC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;IAClC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAE/B,
|
1
|
+
{"version":3,"file":"pb-sequelize.js","sourceRoot":"","sources":["../../typed-model/pb-sequelize.ts"],"names":[],"mappings":";;;;;AAAA,oBAAoB;AACpB,oBAAoB;AACpB,oDAA4B;AAC5B,gBAAM,CAAC,MAAM,EAAE,CAAC;AAChB,mBAAmB;AAEnB,yCAAsC;AAEtC;;GAEG;AACH,MAAM,KAAK,GACT,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,MAAM;IAChC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB;IAClC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAE/B,UAAU;AACV,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC;IAC9B,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,SAAS;IACnB,IAAI,EAAE,6DAA6D;IACnE,OAAO,EAAE,UAAU;IACnB,GAAG,EAAE,KAAK;IACV,cAAc,EAAE;QACd,GAAG,EAAE;YACH,OAAO,EAAE,IAAI;YACb,kBAAkB,EAAE,KAAK;SAC1B;KACF;CACF,CAAC,CAAC;AAEH,SAAS,CAAC,IAAI,EAAE,CAAC;AAEjB,kBAAe,SAAS,CAAC;AAEzB,yCAAyC;AACzC,oBAAoB;AACpB,yBAAyB;AACzB,sBAAsB;AACtB,aAAa;AACb,uBAAuB;AACvB,4DAA4D;AAC5D,SAAS;AACT,OAAO;AACP,MAAM"}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const sequelize_1 = require("sequelize");
|
7
|
+
const pb_sequelize_1 = __importDefault(require("./pb-sequelize"));
|
8
|
+
const subscription_plan_1 = __importDefault(require("./subscription-plan"));
|
9
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
10
|
+
class SubscriptionCoupon extends sequelize_1.Model {
|
11
|
+
}
|
12
|
+
SubscriptionCoupon.init({
|
13
|
+
id: {
|
14
|
+
type: sequelize_1.DataTypes.BIGINT,
|
15
|
+
primaryKey: true,
|
16
|
+
allowNull: false,
|
17
|
+
defaultValue: pb_sequelize_1.default.fn("next_id"),
|
18
|
+
},
|
19
|
+
subscriptionPlanId: {
|
20
|
+
type: sequelize_1.DataTypes.BIGINT,
|
21
|
+
allowNull: false,
|
22
|
+
field: "subscription_plan_id",
|
23
|
+
references: {
|
24
|
+
model: subscription_plan_1.default,
|
25
|
+
},
|
26
|
+
},
|
27
|
+
name: {
|
28
|
+
type: sequelize_1.DataTypes.STRING,
|
29
|
+
field: "name",
|
30
|
+
},
|
31
|
+
code: {
|
32
|
+
type: sequelize_1.DataTypes.STRING,
|
33
|
+
field: "code",
|
34
|
+
},
|
35
|
+
createdAt: sequelize_1.DataTypes.DATE,
|
36
|
+
updatedAt: sequelize_1.DataTypes.DATE,
|
37
|
+
}, {
|
38
|
+
tableName: "subscription_coupons",
|
39
|
+
sequelize: pb_sequelize_1.default,
|
40
|
+
});
|
41
|
+
exports.default = SubscriptionCoupon;
|
42
|
+
//# sourceMappingURL=subscription-coupon.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"subscription-coupon.js","sourceRoot":"","sources":["../../typed-model/subscription-coupon.ts"],"names":[],"mappings":";;;;;AAAA,yCAMmB;AAEnB,kEAAuC;AACvC,4EAAmD;AAMnD,mEAAmE;AACnE,MAAM,kBAAmB,SAAQ,iBAGhC;CAeA;AAED,kBAAkB,CAAC,IAAI,CACrB;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,sBAAS,CAAC,EAAE,CAAC,SAAS,CAAC;KACtC;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,sBAAsB;QAC7B,UAAU,EAAE;YACV,KAAK,EAAE,2BAAgB;SACxB;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,MAAM;KACd;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,MAAM;KACd;IACD,SAAS,EAAE,qBAAS,CAAC,IAAI;IACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;CAC1B,EACD;IACE,SAAS,EAAE,sBAAsB;IACjC,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,kBAAe,kBAAkB,CAAC"}
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const sequelize_1 = require("sequelize");
|
7
7
|
const pb_sequelize_1 = __importDefault(require("./pb-sequelize"));
|
8
8
|
const user_1 = __importDefault(require("./user"));
|
9
|
+
const subscription_coupon_1 = __importDefault(require("./subscription-coupon"));
|
9
10
|
// order of InferAttributes & InferCreationAttributes is important.
|
10
11
|
class SubscriptionPlan extends sequelize_1.Model {
|
11
12
|
}
|
@@ -20,15 +21,14 @@ SubscriptionPlan.init({
|
|
20
21
|
type: sequelize_1.DataTypes.BIGINT,
|
21
22
|
allowNull: false,
|
22
23
|
field: "user_id",
|
24
|
+
references: {
|
25
|
+
model: user_1.default,
|
26
|
+
},
|
23
27
|
},
|
24
28
|
planName: {
|
25
29
|
type: sequelize_1.DataTypes.STRING,
|
26
30
|
field: "plan_name",
|
27
31
|
},
|
28
|
-
amountInCents: {
|
29
|
-
type: sequelize_1.DataTypes.INTEGER,
|
30
|
-
field: "amount_in_cents",
|
31
|
-
},
|
32
32
|
intervalCount: {
|
33
33
|
type: sequelize_1.DataTypes.INTEGER,
|
34
34
|
field: "interval_count",
|
@@ -101,5 +101,15 @@ SubscriptionPlan.hasOne(user_1.default, {
|
|
101
101
|
foreignKey: "id",
|
102
102
|
sourceKey: "userId",
|
103
103
|
});
|
104
|
+
SubscriptionPlan.hasMany(subscription_coupon_1.default, {
|
105
|
+
foreignKey: "subscriptionPlanId",
|
106
|
+
sourceKey: "id",
|
107
|
+
onDelete: "NO ACTION",
|
108
|
+
constraints: false,
|
109
|
+
});
|
110
|
+
subscription_coupon_1.default.hasOne(SubscriptionPlan, {
|
111
|
+
foreignKey: "id",
|
112
|
+
sourceKey: "subscriptionPlanId",
|
113
|
+
});
|
104
114
|
exports.default = SubscriptionPlan;
|
105
115
|
//# sourceMappingURL=subscription-plan.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"subscription-plan.js","sourceRoot":"","sources":["../../typed-model/subscription-plan.ts"],"names":[],"mappings":";;;;;AAAA,yCAOmB;AAEnB,kEAAuC;AACvC,kDAA0B;
|
1
|
+
{"version":3,"file":"subscription-plan.js","sourceRoot":"","sources":["../../typed-model/subscription-plan.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/typed-model/index.ts
CHANGED
@@ -13,3 +13,4 @@ export { default as RecurlyAccount } from "./recurly-account";
|
|
13
13
|
export { default as Withdrawal } from "./withdrawal";
|
14
14
|
export { default as League } from "./league";
|
15
15
|
export { default as User } from "./user";
|
16
|
+
export { default as SubscriptionCoupon } from "./subscription-coupon";
|
@@ -14,13 +14,33 @@ const dbUrl =
|
|
14
14
|
? process.env.TESTING_DATABASE_URL
|
15
15
|
: process.env.DATABASE_URL;
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
// Staging
|
18
|
+
const sequelize = new Sequelize({
|
19
|
+
username: "postgres",
|
20
|
+
password: "OXVdY35B776",
|
21
|
+
database: "winible",
|
22
|
+
host: "winible-v2-staging.cd9ez5rrajpu.us-east-1.rds.amazonaws.com",
|
23
|
+
dialect: "postgres",
|
24
|
+
ssl: false,
|
20
25
|
dialectOptions: {
|
21
26
|
ssl: {
|
22
27
|
require: true,
|
23
|
-
rejectUnauthorized: false,
|
28
|
+
rejectUnauthorized: false,
|
24
29
|
},
|
25
30
|
},
|
26
31
|
});
|
32
|
+
|
33
|
+
sequelize.sync();
|
34
|
+
|
35
|
+
export default sequelize;
|
36
|
+
|
37
|
+
// export default new Sequelize(dbUrl!, {
|
38
|
+
// logging: false,
|
39
|
+
// minifyAliases: true,
|
40
|
+
// dialectOptions: {
|
41
|
+
// ssl: {
|
42
|
+
// require: true,
|
43
|
+
// rejectUnauthorized: false, // <<<<<<< YOU NEED THIS
|
44
|
+
// },
|
45
|
+
// },
|
46
|
+
// });
|
@@ -0,0 +1,70 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
} from "sequelize";
|
8
|
+
|
9
|
+
import sequelize from "./pb-sequelize";
|
10
|
+
import SubscriptionPlan from "./subscription-plan";
|
11
|
+
|
12
|
+
type TemporalUnitType = "day" | "week" | "month" | "year";
|
13
|
+
|
14
|
+
type DiscountType = "percent" | "dollars" | "free_trial";
|
15
|
+
|
16
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
17
|
+
class SubscriptionCoupon extends Model<
|
18
|
+
InferAttributes<SubscriptionCoupon>,
|
19
|
+
InferCreationAttributes<SubscriptionCoupon>
|
20
|
+
> {
|
21
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
22
|
+
// when creating an instance of the model (such as using Model.create()).
|
23
|
+
declare id: CreationOptional<string>;
|
24
|
+
declare subscriptionPlanId: string;
|
25
|
+
declare name?: string;
|
26
|
+
declare code?: string;
|
27
|
+
declare discountType?: DiscountType;
|
28
|
+
declare discountPercent?: number;
|
29
|
+
declare maxRedemptions?: number;
|
30
|
+
declare redemptions?: number;
|
31
|
+
declare temporalAmount?: number;
|
32
|
+
declare temporalUnit?: TemporalUnitType;
|
33
|
+
declare createdAt: CreationOptional<Date>;
|
34
|
+
declare updatedAt: CreationOptional<Date>;
|
35
|
+
}
|
36
|
+
|
37
|
+
SubscriptionCoupon.init(
|
38
|
+
{
|
39
|
+
id: {
|
40
|
+
type: DataTypes.BIGINT,
|
41
|
+
primaryKey: true,
|
42
|
+
allowNull: false,
|
43
|
+
defaultValue: sequelize.fn("next_id"),
|
44
|
+
},
|
45
|
+
subscriptionPlanId: {
|
46
|
+
type: DataTypes.BIGINT,
|
47
|
+
allowNull: false,
|
48
|
+
field: "subscription_plan_id",
|
49
|
+
references: {
|
50
|
+
model: SubscriptionPlan,
|
51
|
+
},
|
52
|
+
},
|
53
|
+
name: {
|
54
|
+
type: DataTypes.STRING,
|
55
|
+
field: "name",
|
56
|
+
},
|
57
|
+
code: {
|
58
|
+
type: DataTypes.STRING,
|
59
|
+
field: "code",
|
60
|
+
},
|
61
|
+
createdAt: DataTypes.DATE,
|
62
|
+
updatedAt: DataTypes.DATE,
|
63
|
+
},
|
64
|
+
{
|
65
|
+
tableName: "subscription_coupons",
|
66
|
+
sequelize,
|
67
|
+
}
|
68
|
+
);
|
69
|
+
|
70
|
+
export default SubscriptionCoupon;
|
@@ -10,6 +10,9 @@ import {
|
|
10
10
|
import sequelize from "./pb-sequelize";
|
11
11
|
import User from "./user";
|
12
12
|
import SubscriptionPlanOnUsers from "./subscription-plan-on-users";
|
13
|
+
import SubscriptionCoupon from "./subscription-coupon";
|
14
|
+
|
15
|
+
type IntervalUnitType = "months" | "days";
|
13
16
|
|
14
17
|
// order of InferAttributes & InferCreationAttributes is important.
|
15
18
|
class SubscriptionPlan extends Model<
|
@@ -21,11 +24,10 @@ class SubscriptionPlan extends Model<
|
|
21
24
|
declare id: CreationOptional<string>;
|
22
25
|
declare userId: string;
|
23
26
|
declare planName?: string;
|
24
|
-
declare
|
27
|
+
declare planDescription?: string;
|
28
|
+
declare intervalUnit: CreationOptional<IntervalUnitType>;
|
25
29
|
declare intervalCount?: number;
|
26
|
-
declare intervalUnit: CreationOptional<"months" | "days">;
|
27
30
|
declare isArchived?: boolean;
|
28
|
-
declare planDescription?: string;
|
29
31
|
declare oneTimePurchase?: boolean;
|
30
32
|
declare accessEndDate?: Date;
|
31
33
|
declare recurlyPlanId?: string;
|
@@ -51,15 +53,14 @@ SubscriptionPlan.init(
|
|
51
53
|
type: DataTypes.BIGINT,
|
52
54
|
allowNull: false,
|
53
55
|
field: "user_id",
|
56
|
+
references: {
|
57
|
+
model: User,
|
58
|
+
},
|
54
59
|
},
|
55
60
|
planName: {
|
56
61
|
type: DataTypes.STRING,
|
57
62
|
field: "plan_name",
|
58
63
|
},
|
59
|
-
amountInCents: {
|
60
|
-
type: DataTypes.INTEGER,
|
61
|
-
field: "amount_in_cents",
|
62
|
-
},
|
63
64
|
intervalCount: {
|
64
65
|
type: DataTypes.INTEGER,
|
65
66
|
field: "interval_count",
|
@@ -140,4 +141,16 @@ SubscriptionPlan.hasOne(User, {
|
|
140
141
|
sourceKey: "userId",
|
141
142
|
});
|
142
143
|
|
144
|
+
SubscriptionPlan.hasMany(SubscriptionCoupon, {
|
145
|
+
foreignKey: "subscriptionPlanId",
|
146
|
+
sourceKey: "id",
|
147
|
+
onDelete: "NO ACTION",
|
148
|
+
constraints: false,
|
149
|
+
});
|
150
|
+
|
151
|
+
SubscriptionCoupon.hasOne(SubscriptionPlan, {
|
152
|
+
foreignKey: "id",
|
153
|
+
sourceKey: "subscriptionPlanId",
|
154
|
+
});
|
155
|
+
|
143
156
|
export default SubscriptionPlan;
|