@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 CHANGED
@@ -1,9 +1,103 @@
1
- # Updating Typescript Models
1
+ # Winible Typescript Models
2
2
 
3
- This must be done before you deploy the FE and BE
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
- 1) PR your commits into main
6
- 2) run `npm version minor|major|patch` (this will update the npm package version and make a commit)
7
- 3) run `git push origin main`
8
- 4) run `npm run publish`
9
- 5) update your winible-typed version in winible-frontend and winible-backend
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
@@ -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: "creator-service-fees",
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: "creator-service-fees",
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
- class RecurlyPaymentMonitoringWhitelist extends sequelize_1.Model {
8
+ const user_1 = __importDefault(require("./user"));
9
+ // order of InferAttributes & InferCreationAttributes is important.
10
+ class FeaturedCapper extends sequelize_1.Model {
10
11
  }
11
- RecurlyPaymentMonitoringWhitelist.init({
12
+ FeaturedCapper.init({
12
13
  id: {
13
14
  type: sequelize_1.DataTypes.BIGINT,
14
15
  primaryKey: true,
15
16
  allowNull: false,
16
- autoIncrement: true,
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
- onDelete: "CASCADE",
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(RecurlyPaymentMonitoringWhitelist, {
41
+ user_1.default.hasOne(FeaturedCapper, {
35
42
  foreignKey: "userId",
36
43
  sourceKey: "id",
37
- as: "paymentMonitoringWhitelist",
38
44
  });
39
- RecurlyPaymentMonitoringWhitelist.belongsTo(user_1.default, {
40
- foreignKey: "userId",
41
- targetKey: "id",
42
- as: "user",
45
+ FeaturedCapper.hasOne(user_1.default, {
46
+ foreignKey: "id",
47
+ sourceKey: "userId",
48
+ onDelete: "NO ACTION",
43
49
  });
44
- exports.default = RecurlyPaymentMonitoringWhitelist;
45
- //# sourceMappingURL=recurly-payment-monitoring-whitelist.js.map
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winible/winible-typed",
3
- "version": "2.48.0",
3
+ "version": "2.50.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "./dist/index.d.ts",
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: "creator-service-fees",
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: "creator-service-fees",
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"}