@winible/winible-typed 2.48.0 → 2.50.0
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/README.md +101 -7
- package/dist/src/types.js +26 -1
- package/dist/src/types.js.map +1 -1
- package/dist/typed-model/campaign-message.js +76 -0
- package/dist/typed-model/campaign-message.js.map +1 -0
- package/dist/typed-model/campaign-template.js +63 -0
- package/dist/typed-model/campaign-template.js.map +1 -0
- package/dist/typed-model/campaign.js +81 -0
- package/dist/typed-model/campaign.js.map +1 -0
- package/dist/typed-model/creator-service-fee.js +2 -2
- package/dist/typed-model/{recurly-payment-monitoring-whitelist.js → featured-capper.js} +22 -16
- package/dist/typed-model/featured-capper.js.map +1 -0
- package/dist/typed-model/segment.js +52 -0
- package/dist/typed-model/segment.js.map +1 -0
- package/dist/typed-model/trigger.js +64 -0
- package/dist/typed-model/trigger.js.map +1 -0
- package/package.json +1 -1
- package/src/types.ts +41 -0
- package/typed-model/campaign-message.ts +112 -0
- package/typed-model/campaign-template.ts +83 -0
- package/typed-model/campaign.ts +119 -0
- package/typed-model/creator-service-fee.ts +2 -2
- package/typed-model/segment.ts +79 -0
- package/typed-model/trigger.ts +93 -0
- package/dist/migrations/20241123184623-recurly-payment-monitoring-whitelist.js +0 -33
- package/dist/migrations/20241123184623-recurly-payment-monitoring-whitelist.js.map +0 -1
- package/dist/typed-model/recurly-payment-monitoring-whitelist.js.map +0 -1
package/README.md
CHANGED
@@ -1,9 +1,103 @@
|
|
1
|
-
#
|
1
|
+
# Winible Typescript Models
|
2
2
|
|
3
|
-
|
3
|
+
The Winible Typescript Models or `@winible/winible-typed` npm package is a project that holds all of Winible's sequelize database model declarations, sequelize client instantiation, as well as type declarations for unifying type sharing between all of our projects.
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
## Overview
|
6
|
+
|
7
|
+
This package serves as the central source of truth for Winible's database models and TypeScript types. It's used across multiple projects including:
|
8
|
+
|
9
|
+
- Main backend
|
10
|
+
- Lambda functions
|
11
|
+
- Other Winible services
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
```bash
|
16
|
+
npm install @winible/winible-typed
|
17
|
+
```
|
18
|
+
|
19
|
+
## Project Structure
|
20
|
+
|
21
|
+
```
|
22
|
+
├── src/ # Source code
|
23
|
+
│ ├── types.ts # Index types (NOT IN USE)
|
24
|
+
│ ├── index.ts # Main entry point
|
25
|
+
│ └── recurlyInstance.ts # Recurly integration
|
26
|
+
├── migrations/ # Database migrations (NOT IN USE)
|
27
|
+
├── typed-model/ # Typed model definitions
|
28
|
+
├── support/ # Support utilities (NOT IN USE)
|
29
|
+
└── webhooks/ # Webhook handlers (NOT IN USE)
|
30
|
+
```
|
31
|
+
|
32
|
+
## Features
|
33
|
+
|
34
|
+
- Sequelize model declarations
|
35
|
+
- TypeScript type definitions
|
36
|
+
- Database migrations (Not in use)
|
37
|
+
- Shared database client instance
|
38
|
+
|
39
|
+
## Development Setup
|
40
|
+
|
41
|
+
1. Clone the repository:
|
42
|
+
|
43
|
+
```bash
|
44
|
+
git clone https://github.com/winible-betting/winible-typescript-models.git
|
45
|
+
```
|
46
|
+
|
47
|
+
2. Install dependencies:
|
48
|
+
|
49
|
+
```bash
|
50
|
+
npm install
|
51
|
+
```
|
52
|
+
|
53
|
+
3. Build the project:
|
54
|
+
|
55
|
+
```bash
|
56
|
+
npm run build
|
57
|
+
```
|
58
|
+
|
59
|
+
## Database Migrations
|
60
|
+
|
61
|
+
While this package includes migration files in the `migrations/` directory, these migrations are currently not in use and should not be used. The migration system has been deprecated in favor of other database management approaches.
|
62
|
+
|
63
|
+
## Contributing
|
64
|
+
|
65
|
+
We use npm and [semantic versioning](#semantic-versioning) for making changes to the models and sharing. We need to be extremely careful when making major changes because almost all of winible's project use the npm package and are reliant on its typescript or model declarations, some of them use the sequelize instance to make database calls, like the [main backend](https://github.com/winible-betting/winible-backend) or some of our [lambda functions](https://github.com/winible-betting/winible-lambda-functions).
|
66
|
+
|
67
|
+
### Releasing a new version
|
68
|
+
|
69
|
+
1. Make the changes to the models needed
|
70
|
+
2. PR your changes into main
|
71
|
+
1. Get approvals
|
72
|
+
3. Merge into main
|
73
|
+
4. Release a new version:
|
74
|
+
1. `npm version minor|major|patch` ← please refer to the [semantic versioning section](#semantic-versioning) for explanation
|
75
|
+
1. Most changes fall into a MINOR version category change (eg. updates to a existing data model, adding a new data model)
|
76
|
+
5. Push new version change to main
|
77
|
+
6. Update the Database manually
|
78
|
+
7. Update the package version on all needed repositories by:
|
79
|
+
1. Manually changing the version on `package.json`
|
80
|
+
2. Using `npm run winible`
|
81
|
+
1. This will install the latest version of the package that being major, minor or patch
|
82
|
+
|
83
|
+
### NPM Tags
|
84
|
+
|
85
|
+
For more complex feature development that will require testing or major overhauls, we can use npm tag releases. Please follow the guide below:
|
86
|
+
|
87
|
+
[How to Use NPM Tags](https://dev.to/andywer/how-to-use-npm-tags-4lla)
|
88
|
+
|
89
|
+
After all testing is done and it's ready to release, make a [regular release](#releasing-a-new-version) with all the changes.
|
90
|
+
|
91
|
+
## Misc
|
92
|
+
|
93
|
+
### Links
|
94
|
+
|
95
|
+
- [NPM Package](https://www.npmjs.com/package/@winible/winible-typed)
|
96
|
+
|
97
|
+
### Semantic Versioning
|
98
|
+
|
99
|
+
Given a version number MAJOR.MINOR.PATCH, we increment the:
|
100
|
+
|
101
|
+
1. MAJOR version when you make incompatible API changes (1.x.x)
|
102
|
+
2. MINOR version when you add functionality in a backward compatible manner (x.1.x)
|
103
|
+
3. PATCH version when you make backward compatible bug fixes (x.x.1)
|
package/dist/src/types.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.RewardType = exports.RewardFrequency = exports.ShouldRemoveSubscriberStatus = exports.SubscriptionPlanType = exports.VerifyStatus = exports.TemporalUnit = exports.DiscountType = exports.UserStoreRole = exports.UserRole = exports.UserStatus = void 0;
|
3
|
+
exports.MessageTimingType = exports.CampaignStatus = exports.MessageChannel = exports.CampaignType = exports.RewardType = exports.RewardFrequency = exports.ShouldRemoveSubscriberStatus = exports.SubscriptionPlanType = exports.VerifyStatus = exports.TemporalUnit = exports.DiscountType = exports.UserStoreRole = exports.UserRole = exports.UserStatus = void 0;
|
4
4
|
var UserStatus;
|
5
5
|
(function (UserStatus) {
|
6
6
|
UserStatus["PENDING_REVIEW"] = "PENDING_REVIEW";
|
@@ -59,4 +59,29 @@ var RewardType;
|
|
59
59
|
RewardType["CENTS"] = "CENTS";
|
60
60
|
RewardType["PERCENTAGE"] = "PERCENTAGE";
|
61
61
|
})(RewardType = exports.RewardType || (exports.RewardType = {}));
|
62
|
+
var CampaignType;
|
63
|
+
(function (CampaignType) {
|
64
|
+
CampaignType["AUTOMATION"] = "AUTOMATION";
|
65
|
+
CampaignType["BROADCAST"] = "BROADCAST";
|
66
|
+
})(CampaignType = exports.CampaignType || (exports.CampaignType = {}));
|
67
|
+
var MessageChannel;
|
68
|
+
(function (MessageChannel) {
|
69
|
+
MessageChannel["SMS"] = "SMS";
|
70
|
+
MessageChannel["EMAIL"] = "EMAIL";
|
71
|
+
MessageChannel["PUSH"] = "PUSH";
|
72
|
+
})(MessageChannel = exports.MessageChannel || (exports.MessageChannel = {}));
|
73
|
+
var CampaignStatus;
|
74
|
+
(function (CampaignStatus) {
|
75
|
+
CampaignStatus["DRAFT"] = "draft";
|
76
|
+
CampaignStatus["ACTIVE"] = "active";
|
77
|
+
CampaignStatus["PAUSED"] = "paused";
|
78
|
+
CampaignStatus["COMPLETED"] = "completed";
|
79
|
+
CampaignStatus["SCHEDULED"] = "scheduled";
|
80
|
+
})(CampaignStatus = exports.CampaignStatus || (exports.CampaignStatus = {}));
|
81
|
+
var MessageTimingType;
|
82
|
+
(function (MessageTimingType) {
|
83
|
+
MessageTimingType["RELATIVE"] = "RELATIVE";
|
84
|
+
MessageTimingType["ABSOLUTE"] = "ABSOLUTE";
|
85
|
+
MessageTimingType["IMMEDIATE"] = "IMMEDIATE";
|
86
|
+
})(MessageTimingType = exports.MessageTimingType || (exports.MessageTimingType = {}));
|
62
87
|
//# sourceMappingURL=types.js.map
|
package/dist/src/types.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAyCA,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,+CAAiC,CAAA;IACjC,mCAAqB,CAAA;IACrB,+BAAiB,CAAA;AACnB,CAAC,EAJW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAIrB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EAJW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAInB;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,wCAAuB,CAAA;IACvB,gCAAe,CAAA;AACjB,CAAC,EAJW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAIxB;AAED,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,mCAAmB,CAAA;IACnB,+BAAe,CAAA;IACf,yCAAyB,CAAA;AAC3B,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB;AAED,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,2BAAW,CAAA;IACX,6BAAa,CAAA;IACb,+BAAe,CAAA;IACf,6BAAa,CAAA;IACb,mCAAmB,CAAA;AACrB,CAAC,EANW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAMvB;AAED,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,yCAAyB,CAAA;IACzB,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;AACvB,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB;AAED,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,+CAAuB,CAAA;IACvB,uCAAe,CAAA;AACjB,CAAC,EAHW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAG/B;AAED,IAAY,4BAGX;AAHD,WAAY,4BAA4B;IACtC,6CAAa,CAAA;IACb,+CAAe,CAAA;AACjB,CAAC,EAHW,4BAA4B,GAA5B,oCAA4B,KAA5B,oCAA4B,QAGvC;AAED,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,0CAAuB,CAAA;AACzB,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B;AAED,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,uCAAyB,CAAA;AAC3B,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB"}
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAyCA,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,+CAAiC,CAAA;IACjC,mCAAqB,CAAA;IACrB,+BAAiB,CAAA;AACnB,CAAC,EAJW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAIrB;AAED,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,+BAAmB,CAAA;IACnB,yBAAa,CAAA;IACb,2BAAe,CAAA;AACjB,CAAC,EAJW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QAInB;AAED,IAAY,aAIX;AAJD,WAAY,aAAa;IACvB,oCAAmB,CAAA;IACnB,wCAAuB,CAAA;IACvB,gCAAe,CAAA;AACjB,CAAC,EAJW,aAAa,GAAb,qBAAa,KAAb,qBAAa,QAIxB;AAED,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,mCAAmB,CAAA;IACnB,+BAAe,CAAA;IACf,yCAAyB,CAAA;AAC3B,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB;AAED,IAAY,YAMX;AAND,WAAY,YAAY;IACtB,2BAAW,CAAA;IACX,6BAAa,CAAA;IACb,+BAAe,CAAA;IACf,6BAAa,CAAA;IACb,mCAAmB,CAAA;AACrB,CAAC,EANW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAMvB;AAED,IAAY,YAIX;AAJD,WAAY,YAAY;IACtB,yCAAyB,CAAA;IACzB,mCAAmB,CAAA;IACnB,qCAAqB,CAAA;AACvB,CAAC,EAJW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAIvB;AAED,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,+CAAuB,CAAA;IACvB,uCAAe,CAAA;AACjB,CAAC,EAHW,oBAAoB,GAApB,4BAAoB,KAApB,4BAAoB,QAG/B;AAED,IAAY,4BAGX;AAHD,WAAY,4BAA4B;IACtC,6CAAa,CAAA;IACb,+CAAe,CAAA;AACjB,CAAC,EAHW,4BAA4B,GAA5B,oCAA4B,KAA5B,oCAA4B,QAGvC;AAED,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,0CAAuB,CAAA;AACzB,CAAC,EAHW,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAG1B;AAED,IAAY,UAGX;AAHD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,uCAAyB,CAAA;AAC3B,CAAC,EAHW,UAAU,GAAV,kBAAU,KAAV,kBAAU,QAGrB;AAED,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,yCAAyB,CAAA;IACzB,uCAAuB,CAAA;AACzB,CAAC,EAHW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QAGvB;AAED,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,6BAAW,CAAA;IACX,iCAAe,CAAA;IACf,+BAAa,CAAA;AACf,CAAC,EAJW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAIzB;AAED,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,iCAAe,CAAA;IACf,mCAAiB,CAAA;IACjB,mCAAiB,CAAA;IACjB,yCAAuB,CAAA;IACvB,yCAAuB,CAAA;AACzB,CAAC,EANW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAMzB;AAED,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IAC3B,0CAAqB,CAAA;IACrB,0CAAqB,CAAA;IACrB,4CAAuB,CAAA;AACzB,CAAC,EAJW,iBAAiB,GAAjB,yBAAiB,KAAjB,yBAAiB,QAI5B"}
|
@@ -0,0 +1,76 @@
|
|
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 types_1 = require("../src/types");
|
9
|
+
const campaign_1 = __importDefault(require("./campaign"));
|
10
|
+
class CampaignMessage extends sequelize_1.Model {
|
11
|
+
}
|
12
|
+
CampaignMessage.init({
|
13
|
+
id: {
|
14
|
+
type: sequelize_1.DataTypes.INTEGER,
|
15
|
+
primaryKey: true,
|
16
|
+
autoIncrement: true,
|
17
|
+
},
|
18
|
+
campaignId: {
|
19
|
+
type: sequelize_1.DataTypes.INTEGER,
|
20
|
+
allowNull: false,
|
21
|
+
field: "campaign_id",
|
22
|
+
references: {
|
23
|
+
model: "campaign",
|
24
|
+
key: "id",
|
25
|
+
},
|
26
|
+
},
|
27
|
+
channel: {
|
28
|
+
type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.MessageChannel)),
|
29
|
+
allowNull: false,
|
30
|
+
},
|
31
|
+
order: {
|
32
|
+
type: sequelize_1.DataTypes.INTEGER,
|
33
|
+
allowNull: false,
|
34
|
+
},
|
35
|
+
timingType: {
|
36
|
+
type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.MessageTimingType)),
|
37
|
+
allowNull: false,
|
38
|
+
field: "timing_type",
|
39
|
+
},
|
40
|
+
delaySeconds: {
|
41
|
+
type: sequelize_1.DataTypes.INTEGER,
|
42
|
+
field: "delay_seconds",
|
43
|
+
},
|
44
|
+
sendTime: {
|
45
|
+
type: sequelize_1.DataTypes.DATE,
|
46
|
+
field: "send_time",
|
47
|
+
},
|
48
|
+
subject: {
|
49
|
+
type: sequelize_1.DataTypes.TEXT,
|
50
|
+
},
|
51
|
+
content: {
|
52
|
+
type: sequelize_1.DataTypes.JSONB,
|
53
|
+
allowNull: false,
|
54
|
+
},
|
55
|
+
complianceStatus: {
|
56
|
+
type: sequelize_1.DataTypes.JSONB,
|
57
|
+
field: "compliance_status",
|
58
|
+
},
|
59
|
+
createdAt: {
|
60
|
+
type: sequelize_1.DataTypes.DATE,
|
61
|
+
field: "created_at",
|
62
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
63
|
+
},
|
64
|
+
updatedAt: {
|
65
|
+
type: sequelize_1.DataTypes.DATE,
|
66
|
+
field: "updated_at",
|
67
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
68
|
+
},
|
69
|
+
}, {
|
70
|
+
tableName: "campaign_message",
|
71
|
+
sequelize: pb_sequelize_1.default,
|
72
|
+
});
|
73
|
+
// Associations
|
74
|
+
CampaignMessage.belongsTo(campaign_1.default, { foreignKey: "campaignId" });
|
75
|
+
exports.default = CampaignMessage;
|
76
|
+
//# sourceMappingURL=campaign-message.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"campaign-message.js","sourceRoot":"","sources":["../../typed-model/campaign-message.ts"],"names":[],"mappings":";;;;;AAAA,yCAQmB;AAEnB,kEAAuC;AACvC,wCAIsB;AACtB,0DAAkC;AAElC,MAAM,eAAgB,SAAQ,iBAG7B;CAoBA;AAED,eAAe,CAAC,IAAI,CAClB;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACpB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE;YACV,KAAK,EAAE,UAAU;YACjB,GAAG,EAAE,IAAI;SACV;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,CAAC;QACtD,SAAS,EAAE,KAAK;KACjB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;KACjB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,yBAAiB,CAAC,CAAC;QACzD,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,aAAa;KACrB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,eAAe;KACvB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,WAAW;KACnB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,qBAAS,CAAC,IAAI;KACrB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,qBAAS,CAAC,KAAK;QACrB,SAAS,EAAE,KAAK;KACjB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,qBAAS,CAAC,KAAK;QACrB,KAAK,EAAE,mBAAmB;KAC3B;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;CACF,EACD;IACE,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,eAAe;AACf,eAAe,CAAC,SAAS,CAAC,kBAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAElE,kBAAe,eAAe,CAAC"}
|
@@ -0,0 +1,63 @@
|
|
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 types_1 = require("../src/types");
|
9
|
+
class CampaignTemplate extends sequelize_1.Model {
|
10
|
+
}
|
11
|
+
CampaignTemplate.init({
|
12
|
+
id: {
|
13
|
+
type: sequelize_1.DataTypes.INTEGER,
|
14
|
+
primaryKey: true,
|
15
|
+
autoIncrement: true,
|
16
|
+
},
|
17
|
+
name: {
|
18
|
+
type: sequelize_1.DataTypes.STRING(255),
|
19
|
+
allowNull: false,
|
20
|
+
unique: true,
|
21
|
+
},
|
22
|
+
displayName: {
|
23
|
+
type: sequelize_1.DataTypes.STRING(255),
|
24
|
+
allowNull: false,
|
25
|
+
field: "display_name",
|
26
|
+
},
|
27
|
+
type: {
|
28
|
+
type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.CampaignType)),
|
29
|
+
allowNull: false,
|
30
|
+
},
|
31
|
+
channels: {
|
32
|
+
type: sequelize_1.DataTypes.ARRAY(sequelize_1.DataTypes.ENUM(...Object.values(types_1.MessageChannel))),
|
33
|
+
allowNull: false,
|
34
|
+
},
|
35
|
+
triggerEventType: {
|
36
|
+
type: sequelize_1.DataTypes.STRING(255),
|
37
|
+
allowNull: false,
|
38
|
+
field: "trigger_event_type",
|
39
|
+
},
|
40
|
+
segmentOptions: {
|
41
|
+
type: sequelize_1.DataTypes.JSONB,
|
42
|
+
field: "segment_options",
|
43
|
+
},
|
44
|
+
templatePrompt: {
|
45
|
+
type: sequelize_1.DataTypes.JSONB,
|
46
|
+
field: "template_prompt",
|
47
|
+
},
|
48
|
+
createdAt: {
|
49
|
+
type: sequelize_1.DataTypes.DATE,
|
50
|
+
field: "created_at",
|
51
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
52
|
+
},
|
53
|
+
updatedAt: {
|
54
|
+
type: sequelize_1.DataTypes.DATE,
|
55
|
+
field: "updated_at",
|
56
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
57
|
+
},
|
58
|
+
}, {
|
59
|
+
tableName: "campaign_template",
|
60
|
+
sequelize: pb_sequelize_1.default,
|
61
|
+
});
|
62
|
+
exports.default = CampaignTemplate;
|
63
|
+
//# sourceMappingURL=campaign-template.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"campaign-template.js","sourceRoot":"","sources":["../../typed-model/campaign-template.ts"],"names":[],"mappings":";;;;;AAAA,yCAMmB;AAEnB,kEAAuC;AACvC,wCAA4E;AAE5E,MAAM,gBAAiB,SAAQ,iBAG9B;CAWA;AAED,gBAAgB,CAAC,IAAI,CACnB;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACpB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3B,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,IAAI;KACb;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3B,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,cAAc;KACtB;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAY,CAAC,CAAC;QACpD,SAAS,EAAE,KAAK;KACjB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,KAAK,CAAC,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,CAAC,CAAC;QACvE,SAAS,EAAE,KAAK;KACjB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3B,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,oBAAoB;KAC5B;IACD,cAAc,EAAE;QACd,IAAI,EAAE,qBAAS,CAAC,KAAK;QACrB,KAAK,EAAE,iBAAiB;KACzB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,qBAAS,CAAC,KAAK;QACrB,KAAK,EAAE,iBAAiB;KACzB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;CACF,EACD;IACE,SAAS,EAAE,mBAAmB;IAC9B,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,kBAAe,gBAAgB,CAAC"}
|
@@ -0,0 +1,81 @@
|
|
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 types_1 = require("../src/types");
|
9
|
+
const user_1 = __importDefault(require("./user"));
|
10
|
+
const campaign_template_1 = __importDefault(require("./campaign-template"));
|
11
|
+
const campaign_message_1 = __importDefault(require("./campaign-message"));
|
12
|
+
const segment_1 = __importDefault(require("./segment"));
|
13
|
+
const trigger_1 = __importDefault(require("./trigger"));
|
14
|
+
class Campaign extends sequelize_1.Model {
|
15
|
+
}
|
16
|
+
Campaign.init({
|
17
|
+
id: {
|
18
|
+
type: sequelize_1.DataTypes.INTEGER,
|
19
|
+
primaryKey: true,
|
20
|
+
autoIncrement: true,
|
21
|
+
},
|
22
|
+
userId: {
|
23
|
+
type: sequelize_1.DataTypes.INTEGER,
|
24
|
+
allowNull: false,
|
25
|
+
field: "user_id",
|
26
|
+
references: {
|
27
|
+
model: "users",
|
28
|
+
key: "id",
|
29
|
+
},
|
30
|
+
},
|
31
|
+
campaignTemplateId: {
|
32
|
+
type: sequelize_1.DataTypes.INTEGER,
|
33
|
+
allowNull: false,
|
34
|
+
field: "campaign_template_id",
|
35
|
+
references: {
|
36
|
+
model: "campaign_template",
|
37
|
+
key: "id",
|
38
|
+
},
|
39
|
+
},
|
40
|
+
name: {
|
41
|
+
type: sequelize_1.DataTypes.STRING(255),
|
42
|
+
allowNull: false,
|
43
|
+
},
|
44
|
+
channel: {
|
45
|
+
type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.MessageChannel)),
|
46
|
+
allowNull: false,
|
47
|
+
},
|
48
|
+
status: {
|
49
|
+
type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.CampaignStatus)),
|
50
|
+
allowNull: false,
|
51
|
+
},
|
52
|
+
startDate: {
|
53
|
+
type: sequelize_1.DataTypes.DATE,
|
54
|
+
field: "start_date",
|
55
|
+
},
|
56
|
+
endDate: {
|
57
|
+
type: sequelize_1.DataTypes.DATE,
|
58
|
+
field: "end_date",
|
59
|
+
},
|
60
|
+
createdAt: {
|
61
|
+
type: sequelize_1.DataTypes.DATE,
|
62
|
+
field: "created_at",
|
63
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
64
|
+
},
|
65
|
+
updatedAt: {
|
66
|
+
type: sequelize_1.DataTypes.DATE,
|
67
|
+
field: "updated_at",
|
68
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
69
|
+
},
|
70
|
+
}, {
|
71
|
+
tableName: "campaign",
|
72
|
+
sequelize: pb_sequelize_1.default,
|
73
|
+
});
|
74
|
+
// Associations
|
75
|
+
Campaign.belongsTo(user_1.default, { foreignKey: "userId" });
|
76
|
+
Campaign.belongsTo(campaign_template_1.default, { foreignKey: "campaignTemplateId" });
|
77
|
+
Campaign.hasMany(campaign_message_1.default, { foreignKey: "campaignId" });
|
78
|
+
Campaign.hasMany(segment_1.default, { foreignKey: "campaignId" });
|
79
|
+
Campaign.hasMany(trigger_1.default, { foreignKey: "campaignId" });
|
80
|
+
exports.default = Campaign;
|
81
|
+
//# sourceMappingURL=campaign.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"campaign.js","sourceRoot":"","sources":["../../typed-model/campaign.ts"],"names":[],"mappings":";;;;;AAAA,yCAQmB;AAEnB,kEAAuC;AACvC,wCAA8D;AAC9D,kDAA0B;AAC1B,4EAAmD;AACnD,0EAAiD;AACjD,wDAAgC;AAChC,wDAAgC;AAEhC,MAAM,QAAS,SAAQ,iBAGtB;CA0BA;AAED,QAAQ,CAAC,IAAI,CACX;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACpB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE;YACV,KAAK,EAAE,OAAO;YACd,GAAG,EAAE,IAAI;SACV;KACF;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,sBAAsB;QAC7B,UAAU,EAAE;YACV,KAAK,EAAE,mBAAmB;YAC1B,GAAG,EAAE,IAAI;SACV;KACF;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3B,SAAS,EAAE,KAAK;KACjB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,CAAC;QACtD,SAAS,EAAE,KAAK;KACjB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,sBAAc,CAAC,CAAC;QACtD,SAAS,EAAE,KAAK;KACjB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;KACpB;IACD,OAAO,EAAE;QACP,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,UAAU;KAClB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;CACF,EACD;IACE,SAAS,EAAE,UAAU;IACrB,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,eAAe;AACf,QAAQ,CAAC,SAAS,CAAC,cAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AACnD,QAAQ,CAAC,SAAS,CAAC,2BAAgB,EAAE,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC;AAC3E,QAAQ,CAAC,OAAO,CAAC,0BAAe,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAChE,QAAQ,CAAC,OAAO,CAAC,iBAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AACxD,QAAQ,CAAC,OAAO,CAAC,iBAAO,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAExD,kBAAe,QAAQ,CAAC"}
|
@@ -33,14 +33,14 @@ CreatorServiceFee.init({
|
|
33
33
|
updatedAt: sequelize_1.DataTypes.DATE,
|
34
34
|
}, {
|
35
35
|
sequelize: pb_sequelize_1.default,
|
36
|
-
tableName: "
|
36
|
+
tableName: "creator_service_fees",
|
37
37
|
timestamps: true,
|
38
38
|
deletedAt: false,
|
39
39
|
});
|
40
40
|
user_1.default.hasOne(CreatorServiceFee, {
|
41
41
|
foreignKey: "creatorId",
|
42
42
|
sourceKey: "id",
|
43
|
-
as: "
|
43
|
+
as: "creator_service_fees",
|
44
44
|
});
|
45
45
|
CreatorServiceFee.belongsTo(user_1.default, {
|
46
46
|
foreignKey: "creatorId",
|
@@ -4,16 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const sequelize_1 = require("sequelize");
|
7
|
-
const user_1 = __importDefault(require("./user"));
|
8
7
|
const pb_sequelize_1 = __importDefault(require("./pb-sequelize"));
|
9
|
-
|
8
|
+
const user_1 = __importDefault(require("./user"));
|
9
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
10
|
+
class FeaturedCapper extends sequelize_1.Model {
|
10
11
|
}
|
11
|
-
|
12
|
+
FeaturedCapper.init({
|
12
13
|
id: {
|
13
14
|
type: sequelize_1.DataTypes.BIGINT,
|
14
15
|
primaryKey: true,
|
15
16
|
allowNull: false,
|
16
|
-
|
17
|
+
defaultValue: pb_sequelize_1.default.fn("next_id"),
|
17
18
|
},
|
18
19
|
userId: {
|
19
20
|
type: sequelize_1.DataTypes.BIGINT,
|
@@ -21,25 +22,30 @@ RecurlyPaymentMonitoringWhitelist.init({
|
|
21
22
|
field: "user_id",
|
22
23
|
references: {
|
23
24
|
model: user_1.default,
|
24
|
-
key: "id",
|
25
25
|
},
|
26
|
-
|
26
|
+
},
|
27
|
+
priority: {
|
28
|
+
type: sequelize_1.DataTypes.SMALLINT,
|
29
|
+
field: "priority",
|
30
|
+
},
|
31
|
+
customLabel: {
|
32
|
+
type: sequelize_1.DataTypes.STRING,
|
33
|
+
field: "custom_label",
|
27
34
|
},
|
28
35
|
createdAt: sequelize_1.DataTypes.DATE,
|
36
|
+
updatedAt: sequelize_1.DataTypes.DATE,
|
29
37
|
}, {
|
38
|
+
tableName: "featured_cappers",
|
30
39
|
sequelize: pb_sequelize_1.default,
|
31
|
-
tableName: "recurly_payment_monitoring_whitelist",
|
32
|
-
timestamps: false,
|
33
40
|
});
|
34
|
-
user_1.default.hasOne(
|
41
|
+
user_1.default.hasOne(FeaturedCapper, {
|
35
42
|
foreignKey: "userId",
|
36
43
|
sourceKey: "id",
|
37
|
-
as: "paymentMonitoringWhitelist",
|
38
44
|
});
|
39
|
-
|
40
|
-
foreignKey: "
|
41
|
-
|
42
|
-
|
45
|
+
FeaturedCapper.hasOne(user_1.default, {
|
46
|
+
foreignKey: "id",
|
47
|
+
sourceKey: "userId",
|
48
|
+
onDelete: "NO ACTION",
|
43
49
|
});
|
44
|
-
exports.default =
|
45
|
-
//# sourceMappingURL=
|
50
|
+
exports.default = FeaturedCapper;
|
51
|
+
//# sourceMappingURL=featured-capper.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"featured-capper.js","sourceRoot":"","sources":["../../typed-model/featured-capper.ts"],"names":[],"mappings":";;;;;AAAA,yCAMmB;AAEnB,kEAAuC;AACvC,kDAA0B;AAE1B,mEAAmE;AACnE,MAAM,cAAe,SAAQ,iBAG5B;CAUA;AAED,cAAc,CAAC,IAAI,CACjB;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,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE;YACV,KAAK,EAAE,cAAI;SACZ;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,QAAQ;QACxB,KAAK,EAAE,UAAU;KAClB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,cAAc;KACtB;IAED,SAAS,EAAE,qBAAS,CAAC,IAAI;IACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;CAC1B,EACD;IACE,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,cAAI,CAAC,MAAM,CAAC,cAAc,EAAE;IAC1B,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AAEH,cAAc,CAAC,MAAM,CAAC,cAAI,EAAE;IAC1B,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,WAAW;CACtB,CAAC,CAAC;AAEH,kBAAe,cAAc,CAAC"}
|
@@ -0,0 +1,52 @@
|
|
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 campaign_1 = __importDefault(require("./campaign"));
|
9
|
+
class Segment extends sequelize_1.Model {
|
10
|
+
}
|
11
|
+
Segment.init({
|
12
|
+
id: {
|
13
|
+
type: sequelize_1.DataTypes.INTEGER,
|
14
|
+
primaryKey: true,
|
15
|
+
autoIncrement: true,
|
16
|
+
},
|
17
|
+
campaignId: {
|
18
|
+
type: sequelize_1.DataTypes.INTEGER,
|
19
|
+
allowNull: false,
|
20
|
+
field: "campaign_id",
|
21
|
+
references: {
|
22
|
+
model: "campaign",
|
23
|
+
key: "id",
|
24
|
+
},
|
25
|
+
},
|
26
|
+
segmentFilters: {
|
27
|
+
type: sequelize_1.DataTypes.JSONB,
|
28
|
+
allowNull: false,
|
29
|
+
field: "segment_filters",
|
30
|
+
},
|
31
|
+
audienceQuery: {
|
32
|
+
type: sequelize_1.DataTypes.JSONB,
|
33
|
+
field: "audience_query",
|
34
|
+
},
|
35
|
+
createdAt: {
|
36
|
+
type: sequelize_1.DataTypes.DATE,
|
37
|
+
field: "created_at",
|
38
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
39
|
+
},
|
40
|
+
updatedAt: {
|
41
|
+
type: sequelize_1.DataTypes.DATE,
|
42
|
+
field: "updated_at",
|
43
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
44
|
+
},
|
45
|
+
}, {
|
46
|
+
tableName: "segment",
|
47
|
+
sequelize: pb_sequelize_1.default,
|
48
|
+
});
|
49
|
+
// Associations
|
50
|
+
Segment.belongsTo(campaign_1.default, { foreignKey: "campaignId" });
|
51
|
+
exports.default = Segment;
|
52
|
+
//# sourceMappingURL=segment.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"segment.js","sourceRoot":"","sources":["../../typed-model/segment.ts"],"names":[],"mappings":";;;;;AAAA,yCAQmB;AAEnB,kEAAuC;AAEvC,0DAAkC;AAElC,MAAM,OAAQ,SAAQ,iBAGrB;CAcA;AAED,OAAO,CAAC,IAAI,CACV;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;KACpB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE;YACV,KAAK,EAAE,UAAU;YACjB,GAAG,EAAE,IAAI;SACV;KACF;IACD,cAAc,EAAE;QACd,IAAI,EAAE,qBAAS,CAAC,KAAK;QACrB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,iBAAiB;KACzB;IACD,aAAa,EAAE;QACb,IAAI,EAAE,qBAAS,CAAC,KAAK;QACrB,KAAK,EAAE,gBAAgB;KACxB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;CACF,EACD;IACE,SAAS,EAAE,SAAS;IACpB,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,eAAe;AACf,OAAO,CAAC,SAAS,CAAC,kBAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAE1D,kBAAe,OAAO,CAAC"}
|
@@ -0,0 +1,64 @@
|
|
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 campaign_1 = __importDefault(require("./campaign"));
|
9
|
+
const segment_1 = __importDefault(require("./segment"));
|
10
|
+
class Trigger extends sequelize_1.Model {
|
11
|
+
}
|
12
|
+
Trigger.init({
|
13
|
+
triggerId: {
|
14
|
+
type: sequelize_1.DataTypes.INTEGER,
|
15
|
+
primaryKey: true,
|
16
|
+
autoIncrement: true,
|
17
|
+
field: "trigger_id",
|
18
|
+
},
|
19
|
+
userId: {
|
20
|
+
type: sequelize_1.DataTypes.INTEGER,
|
21
|
+
allowNull: false,
|
22
|
+
field: "user_id",
|
23
|
+
},
|
24
|
+
campaignId: {
|
25
|
+
type: sequelize_1.DataTypes.INTEGER,
|
26
|
+
allowNull: false,
|
27
|
+
field: "campaign_id",
|
28
|
+
references: {
|
29
|
+
model: "campaign",
|
30
|
+
key: "id",
|
31
|
+
},
|
32
|
+
},
|
33
|
+
eventType: {
|
34
|
+
type: sequelize_1.DataTypes.STRING(255),
|
35
|
+
allowNull: false,
|
36
|
+
field: "event_type",
|
37
|
+
},
|
38
|
+
segmentId: {
|
39
|
+
type: sequelize_1.DataTypes.INTEGER,
|
40
|
+
field: "segment_id",
|
41
|
+
references: {
|
42
|
+
model: "segment",
|
43
|
+
key: "id",
|
44
|
+
},
|
45
|
+
},
|
46
|
+
createdAt: {
|
47
|
+
type: sequelize_1.DataTypes.DATE,
|
48
|
+
field: "created_at",
|
49
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
50
|
+
},
|
51
|
+
updatedAt: {
|
52
|
+
type: sequelize_1.DataTypes.DATE,
|
53
|
+
field: "updated_at",
|
54
|
+
defaultValue: sequelize_1.DataTypes.NOW,
|
55
|
+
},
|
56
|
+
}, {
|
57
|
+
tableName: "trigger",
|
58
|
+
sequelize: pb_sequelize_1.default,
|
59
|
+
});
|
60
|
+
// Associations
|
61
|
+
Trigger.belongsTo(campaign_1.default, { foreignKey: "campaignId" });
|
62
|
+
Trigger.belongsTo(segment_1.default, { foreignKey: "segmentId" });
|
63
|
+
exports.default = Trigger;
|
64
|
+
//# sourceMappingURL=trigger.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"trigger.js","sourceRoot":"","sources":["../../typed-model/trigger.ts"],"names":[],"mappings":";;;;;AAAA,yCAQmB;AAEnB,kEAAuC;AACvC,0DAAkC;AAClC,wDAAgC;AAEhC,MAAM,OAAQ,SAAQ,iBAGrB;CAiBA;AAED,OAAO,CAAC,IAAI,CACV;IACE,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,UAAU,EAAE,IAAI;QAChB,aAAa,EAAE,IAAI;QACnB,KAAK,EAAE,YAAY;KACpB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,SAAS;KACjB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,aAAa;QACpB,UAAU,EAAE;YACV,KAAK,EAAE,UAAU;YACjB,GAAG,EAAE,IAAI;SACV;KACF;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,GAAG,CAAC;QAC3B,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,YAAY;KACpB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE;YACV,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,IAAI;SACV;KACF;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,IAAI;QACpB,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,qBAAS,CAAC,GAAG;KAC5B;CACF,EACD;IACE,SAAS,EAAE,SAAS;IACpB,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,eAAe;AACf,OAAO,CAAC,SAAS,CAAC,kBAAQ,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC;AAC1D,OAAO,CAAC,SAAS,CAAC,iBAAO,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC;AAExD,kBAAe,OAAO,CAAC"}
|
package/package.json
CHANGED
package/src/types.ts
CHANGED
@@ -96,3 +96,44 @@ export enum RewardType {
|
|
96
96
|
CENTS = "CENTS",
|
97
97
|
PERCENTAGE = "PERCENTAGE",
|
98
98
|
}
|
99
|
+
|
100
|
+
export enum CampaignType {
|
101
|
+
AUTOMATION = "AUTOMATION",
|
102
|
+
BROADCAST = "BROADCAST",
|
103
|
+
}
|
104
|
+
|
105
|
+
export enum MessageChannel {
|
106
|
+
SMS = "SMS",
|
107
|
+
EMAIL = "EMAIL",
|
108
|
+
PUSH = "PUSH",
|
109
|
+
}
|
110
|
+
|
111
|
+
export enum CampaignStatus {
|
112
|
+
DRAFT = "draft",
|
113
|
+
ACTIVE = "active",
|
114
|
+
PAUSED = "paused",
|
115
|
+
COMPLETED = "completed",
|
116
|
+
SCHEDULED = "scheduled",
|
117
|
+
}
|
118
|
+
|
119
|
+
export enum MessageTimingType {
|
120
|
+
RELATIVE = "RELATIVE",
|
121
|
+
ABSOLUTE = "ABSOLUTE",
|
122
|
+
IMMEDIATE = "IMMEDIATE",
|
123
|
+
}
|
124
|
+
|
125
|
+
export interface SegmentFilters {
|
126
|
+
[key: string]: any;
|
127
|
+
}
|
128
|
+
|
129
|
+
export interface AudienceQuery {
|
130
|
+
[key: string]: any;
|
131
|
+
}
|
132
|
+
|
133
|
+
export interface TemplatePrompt {
|
134
|
+
[key: string]: any;
|
135
|
+
}
|
136
|
+
|
137
|
+
export interface ComplianceStatus {
|
138
|
+
[key: string]: any;
|
139
|
+
}
|
@@ -0,0 +1,112 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
Association,
|
8
|
+
NonAttribute,
|
9
|
+
} from "sequelize";
|
10
|
+
|
11
|
+
import sequelize from "./pb-sequelize";
|
12
|
+
import {
|
13
|
+
MessageChannel,
|
14
|
+
MessageTimingType,
|
15
|
+
ComplianceStatus,
|
16
|
+
} from "../src/types";
|
17
|
+
import Campaign from "./campaign";
|
18
|
+
|
19
|
+
class CampaignMessage extends Model<
|
20
|
+
InferAttributes<CampaignMessage>,
|
21
|
+
InferCreationAttributes<CampaignMessage>
|
22
|
+
> {
|
23
|
+
declare id: CreationOptional<number>;
|
24
|
+
declare campaignId: number;
|
25
|
+
declare channel: MessageChannel;
|
26
|
+
declare order: number;
|
27
|
+
declare timingType: MessageTimingType;
|
28
|
+
declare delaySeconds: number | null;
|
29
|
+
declare sendTime: Date | null;
|
30
|
+
declare subject: string | null;
|
31
|
+
declare content: any;
|
32
|
+
declare complianceStatus: ComplianceStatus | null;
|
33
|
+
declare createdAt: CreationOptional<Date>;
|
34
|
+
declare updatedAt: CreationOptional<Date>;
|
35
|
+
|
36
|
+
// Associations
|
37
|
+
declare campaign?: NonAttribute<Campaign>;
|
38
|
+
|
39
|
+
declare static associations: {
|
40
|
+
campaign: Association<CampaignMessage, Campaign>;
|
41
|
+
};
|
42
|
+
}
|
43
|
+
|
44
|
+
CampaignMessage.init(
|
45
|
+
{
|
46
|
+
id: {
|
47
|
+
type: DataTypes.INTEGER,
|
48
|
+
primaryKey: true,
|
49
|
+
autoIncrement: true,
|
50
|
+
},
|
51
|
+
campaignId: {
|
52
|
+
type: DataTypes.INTEGER,
|
53
|
+
allowNull: false,
|
54
|
+
field: "campaign_id",
|
55
|
+
references: {
|
56
|
+
model: "campaign",
|
57
|
+
key: "id",
|
58
|
+
},
|
59
|
+
},
|
60
|
+
channel: {
|
61
|
+
type: DataTypes.ENUM(...Object.values(MessageChannel)),
|
62
|
+
allowNull: false,
|
63
|
+
},
|
64
|
+
order: {
|
65
|
+
type: DataTypes.INTEGER,
|
66
|
+
allowNull: false,
|
67
|
+
},
|
68
|
+
timingType: {
|
69
|
+
type: DataTypes.ENUM(...Object.values(MessageTimingType)),
|
70
|
+
allowNull: false,
|
71
|
+
field: "timing_type",
|
72
|
+
},
|
73
|
+
delaySeconds: {
|
74
|
+
type: DataTypes.INTEGER,
|
75
|
+
field: "delay_seconds",
|
76
|
+
},
|
77
|
+
sendTime: {
|
78
|
+
type: DataTypes.DATE,
|
79
|
+
field: "send_time",
|
80
|
+
},
|
81
|
+
subject: {
|
82
|
+
type: DataTypes.TEXT,
|
83
|
+
},
|
84
|
+
content: {
|
85
|
+
type: DataTypes.JSONB,
|
86
|
+
allowNull: false,
|
87
|
+
},
|
88
|
+
complianceStatus: {
|
89
|
+
type: DataTypes.JSONB,
|
90
|
+
field: "compliance_status",
|
91
|
+
},
|
92
|
+
createdAt: {
|
93
|
+
type: DataTypes.DATE,
|
94
|
+
field: "created_at",
|
95
|
+
defaultValue: DataTypes.NOW,
|
96
|
+
},
|
97
|
+
updatedAt: {
|
98
|
+
type: DataTypes.DATE,
|
99
|
+
field: "updated_at",
|
100
|
+
defaultValue: DataTypes.NOW,
|
101
|
+
},
|
102
|
+
},
|
103
|
+
{
|
104
|
+
tableName: "campaign_message",
|
105
|
+
sequelize,
|
106
|
+
}
|
107
|
+
);
|
108
|
+
|
109
|
+
// Associations
|
110
|
+
CampaignMessage.belongsTo(Campaign, { foreignKey: "campaignId" });
|
111
|
+
|
112
|
+
export default CampaignMessage;
|
@@ -0,0 +1,83 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
} from "sequelize";
|
8
|
+
|
9
|
+
import sequelize from "./pb-sequelize";
|
10
|
+
import { CampaignType, MessageChannel, TemplatePrompt } from "../src/types";
|
11
|
+
|
12
|
+
class CampaignTemplate extends Model<
|
13
|
+
InferAttributes<CampaignTemplate>,
|
14
|
+
InferCreationAttributes<CampaignTemplate>
|
15
|
+
> {
|
16
|
+
declare id: CreationOptional<number>;
|
17
|
+
declare name: string;
|
18
|
+
declare displayName: string;
|
19
|
+
declare type: CampaignType;
|
20
|
+
declare channels: MessageChannel[];
|
21
|
+
declare triggerEventType: string;
|
22
|
+
declare segmentOptions: any;
|
23
|
+
declare templatePrompt: TemplatePrompt;
|
24
|
+
declare createdAt: CreationOptional<Date>;
|
25
|
+
declare updatedAt: CreationOptional<Date>;
|
26
|
+
}
|
27
|
+
|
28
|
+
CampaignTemplate.init(
|
29
|
+
{
|
30
|
+
id: {
|
31
|
+
type: DataTypes.INTEGER,
|
32
|
+
primaryKey: true,
|
33
|
+
autoIncrement: true,
|
34
|
+
},
|
35
|
+
name: {
|
36
|
+
type: DataTypes.STRING(255),
|
37
|
+
allowNull: false,
|
38
|
+
unique: true,
|
39
|
+
},
|
40
|
+
displayName: {
|
41
|
+
type: DataTypes.STRING(255),
|
42
|
+
allowNull: false,
|
43
|
+
field: "display_name",
|
44
|
+
},
|
45
|
+
type: {
|
46
|
+
type: DataTypes.ENUM(...Object.values(CampaignType)),
|
47
|
+
allowNull: false,
|
48
|
+
},
|
49
|
+
channels: {
|
50
|
+
type: DataTypes.ARRAY(DataTypes.ENUM(...Object.values(MessageChannel))),
|
51
|
+
allowNull: false,
|
52
|
+
},
|
53
|
+
triggerEventType: {
|
54
|
+
type: DataTypes.STRING(255),
|
55
|
+
allowNull: false,
|
56
|
+
field: "trigger_event_type",
|
57
|
+
},
|
58
|
+
segmentOptions: {
|
59
|
+
type: DataTypes.JSONB,
|
60
|
+
field: "segment_options",
|
61
|
+
},
|
62
|
+
templatePrompt: {
|
63
|
+
type: DataTypes.JSONB,
|
64
|
+
field: "template_prompt",
|
65
|
+
},
|
66
|
+
createdAt: {
|
67
|
+
type: DataTypes.DATE,
|
68
|
+
field: "created_at",
|
69
|
+
defaultValue: DataTypes.NOW,
|
70
|
+
},
|
71
|
+
updatedAt: {
|
72
|
+
type: DataTypes.DATE,
|
73
|
+
field: "updated_at",
|
74
|
+
defaultValue: DataTypes.NOW,
|
75
|
+
},
|
76
|
+
},
|
77
|
+
{
|
78
|
+
tableName: "campaign_template",
|
79
|
+
sequelize,
|
80
|
+
}
|
81
|
+
);
|
82
|
+
|
83
|
+
export default CampaignTemplate;
|
@@ -0,0 +1,119 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
Association,
|
8
|
+
NonAttribute,
|
9
|
+
} from "sequelize";
|
10
|
+
|
11
|
+
import sequelize from "./pb-sequelize";
|
12
|
+
import { MessageChannel, CampaignStatus } from "../src/types";
|
13
|
+
import User from "./user";
|
14
|
+
import CampaignTemplate from "./campaign-template";
|
15
|
+
import CampaignMessage from "./campaign-message";
|
16
|
+
import Segment from "./segment";
|
17
|
+
import Trigger from "./trigger";
|
18
|
+
|
19
|
+
class Campaign extends Model<
|
20
|
+
InferAttributes<Campaign>,
|
21
|
+
InferCreationAttributes<Campaign>
|
22
|
+
> {
|
23
|
+
declare id: CreationOptional<number>;
|
24
|
+
declare userId: number;
|
25
|
+
declare campaignTemplateId: number;
|
26
|
+
declare name: string;
|
27
|
+
declare channel: MessageChannel;
|
28
|
+
declare status: CampaignStatus;
|
29
|
+
declare startDate: Date | null;
|
30
|
+
declare endDate: Date | null;
|
31
|
+
declare createdAt: CreationOptional<Date>;
|
32
|
+
declare updatedAt: CreationOptional<Date>;
|
33
|
+
|
34
|
+
// Associations
|
35
|
+
declare user?: NonAttribute<User>;
|
36
|
+
declare template?: NonAttribute<CampaignTemplate>;
|
37
|
+
declare messages?: NonAttribute<CampaignMessage[]>;
|
38
|
+
declare segments?: NonAttribute<Segment[]>;
|
39
|
+
declare triggers?: NonAttribute<Trigger[]>;
|
40
|
+
|
41
|
+
declare static associations: {
|
42
|
+
user: Association<Campaign, User>;
|
43
|
+
template: Association<Campaign, CampaignTemplate>;
|
44
|
+
messages: Association<Campaign, CampaignMessage>;
|
45
|
+
segments: Association<Campaign, Segment>;
|
46
|
+
triggers: Association<Campaign, Trigger>;
|
47
|
+
};
|
48
|
+
}
|
49
|
+
|
50
|
+
Campaign.init(
|
51
|
+
{
|
52
|
+
id: {
|
53
|
+
type: DataTypes.INTEGER,
|
54
|
+
primaryKey: true,
|
55
|
+
autoIncrement: true,
|
56
|
+
},
|
57
|
+
userId: {
|
58
|
+
type: DataTypes.INTEGER,
|
59
|
+
allowNull: false,
|
60
|
+
field: "user_id",
|
61
|
+
references: {
|
62
|
+
model: "users",
|
63
|
+
key: "id",
|
64
|
+
},
|
65
|
+
},
|
66
|
+
campaignTemplateId: {
|
67
|
+
type: DataTypes.INTEGER,
|
68
|
+
allowNull: false,
|
69
|
+
field: "campaign_template_id",
|
70
|
+
references: {
|
71
|
+
model: "campaign_template",
|
72
|
+
key: "id",
|
73
|
+
},
|
74
|
+
},
|
75
|
+
name: {
|
76
|
+
type: DataTypes.STRING(255),
|
77
|
+
allowNull: false,
|
78
|
+
},
|
79
|
+
channel: {
|
80
|
+
type: DataTypes.ENUM(...Object.values(MessageChannel)),
|
81
|
+
allowNull: false,
|
82
|
+
},
|
83
|
+
status: {
|
84
|
+
type: DataTypes.ENUM(...Object.values(CampaignStatus)),
|
85
|
+
allowNull: false,
|
86
|
+
},
|
87
|
+
startDate: {
|
88
|
+
type: DataTypes.DATE,
|
89
|
+
field: "start_date",
|
90
|
+
},
|
91
|
+
endDate: {
|
92
|
+
type: DataTypes.DATE,
|
93
|
+
field: "end_date",
|
94
|
+
},
|
95
|
+
createdAt: {
|
96
|
+
type: DataTypes.DATE,
|
97
|
+
field: "created_at",
|
98
|
+
defaultValue: DataTypes.NOW,
|
99
|
+
},
|
100
|
+
updatedAt: {
|
101
|
+
type: DataTypes.DATE,
|
102
|
+
field: "updated_at",
|
103
|
+
defaultValue: DataTypes.NOW,
|
104
|
+
},
|
105
|
+
},
|
106
|
+
{
|
107
|
+
tableName: "campaign",
|
108
|
+
sequelize,
|
109
|
+
}
|
110
|
+
);
|
111
|
+
|
112
|
+
// Associations
|
113
|
+
Campaign.belongsTo(User, { foreignKey: "userId" });
|
114
|
+
Campaign.belongsTo(CampaignTemplate, { foreignKey: "campaignTemplateId" });
|
115
|
+
Campaign.hasMany(CampaignMessage, { foreignKey: "campaignId" });
|
116
|
+
Campaign.hasMany(Segment, { foreignKey: "campaignId" });
|
117
|
+
Campaign.hasMany(Trigger, { foreignKey: "campaignId" });
|
118
|
+
|
119
|
+
export default Campaign;
|
@@ -48,7 +48,7 @@ CreatorServiceFee.init(
|
|
48
48
|
},
|
49
49
|
{
|
50
50
|
sequelize,
|
51
|
-
tableName: "
|
51
|
+
tableName: "creator_service_fees",
|
52
52
|
timestamps: true,
|
53
53
|
deletedAt: false,
|
54
54
|
}
|
@@ -57,7 +57,7 @@ CreatorServiceFee.init(
|
|
57
57
|
User.hasOne(CreatorServiceFee, {
|
58
58
|
foreignKey: "creatorId",
|
59
59
|
sourceKey: "id",
|
60
|
-
as: "
|
60
|
+
as: "creator_service_fees",
|
61
61
|
});
|
62
62
|
|
63
63
|
CreatorServiceFee.belongsTo(User, {
|
@@ -0,0 +1,79 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
Association,
|
8
|
+
NonAttribute,
|
9
|
+
} from "sequelize";
|
10
|
+
|
11
|
+
import sequelize from "./pb-sequelize";
|
12
|
+
import { SegmentFilters, AudienceQuery } from "../src/types";
|
13
|
+
import Campaign from "./campaign";
|
14
|
+
|
15
|
+
class Segment extends Model<
|
16
|
+
InferAttributes<Segment>,
|
17
|
+
InferCreationAttributes<Segment>
|
18
|
+
> {
|
19
|
+
declare id: CreationOptional<number>;
|
20
|
+
declare campaignId: number;
|
21
|
+
declare segmentFilters: SegmentFilters;
|
22
|
+
declare audienceQuery: AudienceQuery;
|
23
|
+
declare createdAt: CreationOptional<Date>;
|
24
|
+
declare updatedAt: CreationOptional<Date>;
|
25
|
+
|
26
|
+
// Associations
|
27
|
+
declare campaign?: NonAttribute<Campaign>;
|
28
|
+
|
29
|
+
declare static associations: {
|
30
|
+
campaign: Association<Segment, Campaign>;
|
31
|
+
};
|
32
|
+
}
|
33
|
+
|
34
|
+
Segment.init(
|
35
|
+
{
|
36
|
+
id: {
|
37
|
+
type: DataTypes.INTEGER,
|
38
|
+
primaryKey: true,
|
39
|
+
autoIncrement: true,
|
40
|
+
},
|
41
|
+
campaignId: {
|
42
|
+
type: DataTypes.INTEGER,
|
43
|
+
allowNull: false,
|
44
|
+
field: "campaign_id",
|
45
|
+
references: {
|
46
|
+
model: "campaign",
|
47
|
+
key: "id",
|
48
|
+
},
|
49
|
+
},
|
50
|
+
segmentFilters: {
|
51
|
+
type: DataTypes.JSONB,
|
52
|
+
allowNull: false,
|
53
|
+
field: "segment_filters",
|
54
|
+
},
|
55
|
+
audienceQuery: {
|
56
|
+
type: DataTypes.JSONB,
|
57
|
+
field: "audience_query",
|
58
|
+
},
|
59
|
+
createdAt: {
|
60
|
+
type: DataTypes.DATE,
|
61
|
+
field: "created_at",
|
62
|
+
defaultValue: DataTypes.NOW,
|
63
|
+
},
|
64
|
+
updatedAt: {
|
65
|
+
type: DataTypes.DATE,
|
66
|
+
field: "updated_at",
|
67
|
+
defaultValue: DataTypes.NOW,
|
68
|
+
},
|
69
|
+
},
|
70
|
+
{
|
71
|
+
tableName: "segment",
|
72
|
+
sequelize,
|
73
|
+
}
|
74
|
+
);
|
75
|
+
|
76
|
+
// Associations
|
77
|
+
Segment.belongsTo(Campaign, { foreignKey: "campaignId" });
|
78
|
+
|
79
|
+
export default Segment;
|
@@ -0,0 +1,93 @@
|
|
1
|
+
import {
|
2
|
+
Model,
|
3
|
+
InferAttributes,
|
4
|
+
InferCreationAttributes,
|
5
|
+
CreationOptional,
|
6
|
+
DataTypes,
|
7
|
+
Association,
|
8
|
+
NonAttribute,
|
9
|
+
} from "sequelize";
|
10
|
+
|
11
|
+
import sequelize from "./pb-sequelize";
|
12
|
+
import Campaign from "./campaign";
|
13
|
+
import Segment from "./segment";
|
14
|
+
|
15
|
+
class Trigger extends Model<
|
16
|
+
InferAttributes<Trigger>,
|
17
|
+
InferCreationAttributes<Trigger>
|
18
|
+
> {
|
19
|
+
declare triggerId: CreationOptional<number>;
|
20
|
+
declare userId: number;
|
21
|
+
declare campaignId: number;
|
22
|
+
declare eventType: string;
|
23
|
+
declare segmentId: number | null;
|
24
|
+
declare createdAt: CreationOptional<Date>;
|
25
|
+
declare updatedAt: CreationOptional<Date>;
|
26
|
+
|
27
|
+
// Associations
|
28
|
+
declare campaign?: NonAttribute<Campaign>;
|
29
|
+
declare segment?: NonAttribute<Segment>;
|
30
|
+
|
31
|
+
declare static associations: {
|
32
|
+
campaign: Association<Trigger, Campaign>;
|
33
|
+
segment: Association<Trigger, Segment>;
|
34
|
+
};
|
35
|
+
}
|
36
|
+
|
37
|
+
Trigger.init(
|
38
|
+
{
|
39
|
+
triggerId: {
|
40
|
+
type: DataTypes.INTEGER,
|
41
|
+
primaryKey: true,
|
42
|
+
autoIncrement: true,
|
43
|
+
field: "trigger_id",
|
44
|
+
},
|
45
|
+
userId: {
|
46
|
+
type: DataTypes.INTEGER,
|
47
|
+
allowNull: false,
|
48
|
+
field: "user_id",
|
49
|
+
},
|
50
|
+
campaignId: {
|
51
|
+
type: DataTypes.INTEGER,
|
52
|
+
allowNull: false,
|
53
|
+
field: "campaign_id",
|
54
|
+
references: {
|
55
|
+
model: "campaign",
|
56
|
+
key: "id",
|
57
|
+
},
|
58
|
+
},
|
59
|
+
eventType: {
|
60
|
+
type: DataTypes.STRING(255),
|
61
|
+
allowNull: false,
|
62
|
+
field: "event_type",
|
63
|
+
},
|
64
|
+
segmentId: {
|
65
|
+
type: DataTypes.INTEGER,
|
66
|
+
field: "segment_id",
|
67
|
+
references: {
|
68
|
+
model: "segment",
|
69
|
+
key: "id",
|
70
|
+
},
|
71
|
+
},
|
72
|
+
createdAt: {
|
73
|
+
type: DataTypes.DATE,
|
74
|
+
field: "created_at",
|
75
|
+
defaultValue: DataTypes.NOW,
|
76
|
+
},
|
77
|
+
updatedAt: {
|
78
|
+
type: DataTypes.DATE,
|
79
|
+
field: "updated_at",
|
80
|
+
defaultValue: DataTypes.NOW,
|
81
|
+
},
|
82
|
+
},
|
83
|
+
{
|
84
|
+
tableName: "trigger",
|
85
|
+
sequelize,
|
86
|
+
}
|
87
|
+
);
|
88
|
+
|
89
|
+
// Associations
|
90
|
+
Trigger.belongsTo(Campaign, { foreignKey: "campaignId" });
|
91
|
+
Trigger.belongsTo(Segment, { foreignKey: "segmentId" });
|
92
|
+
|
93
|
+
export default Trigger;
|
@@ -1,33 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
const sequelize_1 = require("sequelize");
|
4
|
-
exports.default = {
|
5
|
-
async up(queryInterface, sequelize) {
|
6
|
-
await queryInterface.createTable("recurly_payment_monitoring_whitelist", {
|
7
|
-
id: {
|
8
|
-
type: sequelize_1.DataTypes.BIGINT,
|
9
|
-
primaryKey: true,
|
10
|
-
allowNull: false,
|
11
|
-
autoIncrement: true,
|
12
|
-
},
|
13
|
-
user_id: {
|
14
|
-
type: sequelize_1.DataTypes.BIGINT,
|
15
|
-
allowNull: false,
|
16
|
-
references: {
|
17
|
-
model: "users",
|
18
|
-
key: "id",
|
19
|
-
},
|
20
|
-
onDelete: "CASCADE",
|
21
|
-
},
|
22
|
-
createdAt: {
|
23
|
-
type: sequelize_1.DataTypes.DATE,
|
24
|
-
allowNull: false,
|
25
|
-
defaultValue: sequelize.literal("NOW()"),
|
26
|
-
},
|
27
|
-
});
|
28
|
-
},
|
29
|
-
async down(queryInterface, sequelize) {
|
30
|
-
await queryInterface.dropTable("recurly_payment_monitoring_whitelist");
|
31
|
-
},
|
32
|
-
};
|
33
|
-
//# sourceMappingURL=20241123184623-recurly-payment-monitoring-whitelist.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"20241123184623-recurly-payment-monitoring-whitelist.js","sourceRoot":"","sources":["../../migrations/20241123184623-recurly-payment-monitoring-whitelist.ts"],"names":[],"mappings":";;AAAA,yCAAiE;AAEjE,kBAAe;IACb,KAAK,CAAC,EAAE,CAAC,cAA8B,EAAE,SAAoB;QAC3D,MAAM,cAAc,CAAC,WAAW,CAAC,sCAAsC,EAAE;YACvE,EAAE,EAAE;gBACF,IAAI,EAAE,qBAAS,CAAC,MAAM;gBACtB,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,IAAI;aACpB;YACD,OAAO,EAAE;gBACP,IAAI,EAAE,qBAAS,CAAC,MAAM;gBACtB,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE;oBACV,KAAK,EAAE,OAAO;oBACd,GAAG,EAAE,IAAI;iBACV;gBACD,QAAQ,EAAE,SAAS;aACpB;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,qBAAS,CAAC,IAAI;gBACpB,SAAS,EAAE,KAAK;gBAChB,YAAY,EAAE,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC;aACzC;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,cAA8B,EAAE,SAAoB;QAC7D,MAAM,cAAc,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACzE,CAAC;CACF,CAAC"}
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"recurly-payment-monitoring-whitelist.js","sourceRoot":"","sources":["../../typed-model/recurly-payment-monitoring-whitelist.ts"],"names":[],"mappings":";;;;;AAAA,yCAMmB;AAEnB,kDAA0B;AAE1B,kEAAuC;AAEvC,MAAM,iCAAkC,SAAQ,iBAG/C;CAIA;AAED,iCAAiC,CAAC,IAAI,CACpC;IACE,EAAE,EAAE;QACF,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,UAAU,EAAE,IAAI;QAChB,SAAS,EAAE,KAAK;QAChB,aAAa,EAAE,IAAI;KACpB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE;YACV,KAAK,EAAE,cAAI;YACX,GAAG,EAAE,IAAI;SACV;QACD,QAAQ,EAAE,SAAS;KACpB;IACD,SAAS,EAAE,qBAAS,CAAC,IAAI;CAC1B,EACD;IACE,SAAS,EAAT,sBAAS;IACT,SAAS,EAAE,sCAAsC;IACjD,UAAU,EAAE,KAAK;CAClB,CACF,CAAC;AAGF,cAAI,CAAC,MAAM,CAAC,iCAAiC,EAAE;IAC7C,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,IAAI;IACf,EAAE,EAAE,4BAA4B;CACjC,CAAC,CAAC;AAEH,iCAAiC,CAAC,SAAS,CAAC,cAAI,EAAE;IAChD,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,IAAI;IACf,EAAE,EAAE,MAAM;CACX,CAAC,CAAC;AAEH,kBAAe,iCAAiC,CAAC"}
|