@winible/winible-typed 1.0.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 +32 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/20220601151258-custom_name_describing_your_migration.js +19 -0
- package/dist/migrations/20220601151258-custom_name_describing_your_migration.js.map +1 -0
- package/dist/migrations/20220605225655-create-dashboard-user-permissions.js +27 -0
- package/dist/migrations/20220605225655-create-dashboard-user-permissions.js.map +1 -0
- package/dist/migrations/20220606001300-update-dashboard-user-permissions.js +14 -0
- package/dist/migrations/20220606001300-update-dashboard-user-permissions.js.map +1 -0
- package/dist/migrations/20220607091109-add-read-date-for-message.js +19 -0
- package/dist/migrations/20220607091109-add-read-date-for-message.js.map +1 -0
- package/dist/migrations/20220616225456-add-delete-columns.js +21 -0
- package/dist/migrations/20220616225456-add-delete-columns.js.map +1 -0
- package/dist/migrations/20220709202211-disable-feed.js +24 -0
- package/dist/migrations/20220709202211-disable-feed.js.map +1 -0
- package/dist/migrations/20220723215213-limit-promotion-claims.js +18 -0
- package/dist/migrations/20220723215213-limit-promotion-claims.js.map +1 -0
- package/dist/migrations/20220723220233-num_claims.js +12 -0
- package/dist/migrations/20220723220233-num_claims.js.map +1 -0
- package/dist/migrations/20220723221907-default_false_promos.js +17 -0
- package/dist/migrations/20220723221907-default_false_promos.js.map +1 -0
- package/dist/migrations/20220724172559-default_zero_claims.js +13 -0
- package/dist/migrations/20220724172559-default_zero_claims.js.map +1 -0
- package/dist/migrations/20220724201419-pinned_post.js +13 -0
- package/dist/migrations/20220724201419-pinned_post.js.map +1 -0
- package/dist/migrations/20220729164625-unsend_mass.js +12 -0
- package/dist/migrations/20220729164625-unsend_mass.js.map +1 -0
- package/dist/migrations/20220823033002-interval-unit.js +14 -0
- package/dist/migrations/20220823033002-interval-unit.js.map +1 -0
- package/dist/migrations/20220830193530-processorId.js +15 -0
- package/dist/migrations/20220830193530-processorId.js.map +1 -0
- package/dist/migrations/20220907121932-add-processor-to-sub.js +15 -0
- package/dist/migrations/20220907121932-add-processor-to-sub.js.map +1 -0
- package/dist/migrations/20220907212232-add-trans-id.js +12 -0
- package/dist/migrations/20220907212232-add-trans-id.js.map +1 -0
- package/dist/migrations/20220907220423-big-int-trans.js +12 -0
- package/dist/migrations/20220907220423-big-int-trans.js.map +1 -0
- package/dist/migrations/20220909161902-add-stale.js +13 -0
- package/dist/migrations/20220909161902-add-stale.js.map +1 -0
- package/dist/migrations/20220922000225-verified-spender.js +13 -0
- package/dist/migrations/20220922000225-verified-spender.js.map +1 -0
- package/dist/migrations/20220922212108-verified-spender-2.js +16 -0
- package/dist/migrations/20220922212108-verified-spender-2.js.map +1 -0
- package/dist/migrations/20221013223648-product-subscription-list.js +12 -0
- package/dist/migrations/20221013223648-product-subscription-list.js.map +1 -0
- package/dist/migrations/20221014001037-product-subscription-list.js +75 -0
- package/dist/migrations/20221014001037-product-subscription-list.js.map +1 -0
- package/dist/migrations/20221026055245-update-type.js +15 -0
- package/dist/migrations/20221026055245-update-type.js.map +1 -0
- package/dist/scripts/authorizeTransfer.js +188 -0
- package/dist/scripts/authorizeTransfer.js.map +1 -0
- package/dist/scripts/createDashboardLink.js +30 -0
- package/dist/scripts/createDashboardLink.js.map +1 -0
- package/dist/scripts/deleteMalformedImages.js +84 -0
- package/dist/scripts/deleteMalformedImages.js.map +1 -0
- package/dist/scripts/importMixpanelEvents.js +44 -0
- package/dist/scripts/importMixpanelEvents.js.map +1 -0
- package/dist/scripts/payoutSubscriptions.js +185 -0
- package/dist/scripts/payoutSubscriptions.js.map +1 -0
- package/dist/scripts/removeUnreferenceSubs.js +39 -0
- package/dist/scripts/removeUnreferenceSubs.js.map +1 -0
- package/dist/scripts/test.js +33 -0
- package/dist/scripts/test.js.map +1 -0
- package/dist/server/index.js +30 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/middlewares/slack-auth.js +40 -0
- package/dist/server/middlewares/slack-auth.js.map +1 -0
- package/dist/server/v1/bypassCreator.js +81 -0
- package/dist/server/v1/bypassCreator.js.map +1 -0
- package/dist/server/v1/cancelSubscription.js +35 -0
- package/dist/server/v1/cancelSubscription.js.map +1 -0
- package/dist/server/v1/changeName.js +41 -0
- package/dist/server/v1/changeName.js.map +1 -0
- package/dist/server/v1/checkAuthSub.js +58 -0
- package/dist/server/v1/checkAuthSub.js.map +1 -0
- package/dist/server/v1/dashboardLink.js +30 -0
- package/dist/server/v1/dashboardLink.js.map +1 -0
- package/dist/server/v1/getSuspendedSubs.js +76 -0
- package/dist/server/v1/getSuspendedSubs.js.map +1 -0
- package/dist/server/v1/index.js +28 -0
- package/dist/server/v1/index.js.map +1 -0
- package/dist/server/v1/manualCreateSub.js +159 -0
- package/dist/server/v1/manualCreateSub.js.map +1 -0
- package/dist/server/v1/refund.js +78 -0
- package/dist/server/v1/refund.js.map +1 -0
- package/dist/server/v1/retrySubscription.js +81 -0
- package/dist/server/v1/retrySubscription.js.map +1 -0
- package/dist/server/v1/searchUser.js +169 -0
- package/dist/server/v1/searchUser.js.map +1 -0
- package/dist/server/v1/slack.js +14 -0
- package/dist/server/v1/slack.js.map +1 -0
- package/dist/src/index.js +24 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/pk-client.js +1103 -0
- package/dist/src/pk-client.js.map +1 -0
- package/dist/src/pk-sub.js +310 -0
- package/dist/src/pk-sub.js.map +1 -0
- package/dist/src/slack-client.js +48 -0
- package/dist/src/slack-client.js.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/support/index.js +19 -0
- package/dist/support/index.js.map +1 -0
- package/dist/support/metrics.js +21 -0
- package/dist/support/metrics.js.map +1 -0
- package/dist/support/mixpanel.js +7 -0
- package/dist/support/mixpanel.js.map +1 -0
- package/dist/support/slack-client.js +51 -0
- package/dist/support/slack-client.js.map +1 -0
- package/dist/support/uploadcare.js +140 -0
- package/dist/support/uploadcare.js.map +1 -0
- package/dist/support/utils.js +69 -0
- package/dist/support/utils.js.map +1 -0
- package/dist/typed-model/asset-category.js +38 -0
- package/dist/typed-model/asset-category.js.map +1 -0
- package/dist/typed-model/asset-constent-person.js +56 -0
- package/dist/typed-model/asset-constent-person.js.map +1 -0
- package/dist/typed-model/blocked-ip.js +34 -0
- package/dist/typed-model/blocked-ip.js.map +1 -0
- package/dist/typed-model/category-tag.js +46 -0
- package/dist/typed-model/category-tag.js.map +1 -0
- package/dist/typed-model/consent-person.js +55 -0
- package/dist/typed-model/consent-person.js.map +1 -0
- package/dist/typed-model/content-category-tag.js +58 -0
- package/dist/typed-model/content-category-tag.js.map +1 -0
- package/dist/typed-model/content-like.js +58 -0
- package/dist/typed-model/content-like.js.map +1 -0
- package/dist/typed-model/credit-payment.js +389 -0
- package/dist/typed-model/credit-payment.js.map +1 -0
- package/dist/typed-model/credit-payout.js +42 -0
- package/dist/typed-model/credit-payout.js.map +1 -0
- package/dist/typed-model/credit-purchase.js +46 -0
- package/dist/typed-model/credit-purchase.js.map +1 -0
- package/dist/typed-model/customer-profile.js +51 -0
- package/dist/typed-model/customer-profile.js.map +1 -0
- package/dist/typed-model/dashboard-user-permissions.js +34 -0
- package/dist/typed-model/dashboard-user-permissions.js.map +1 -0
- package/dist/typed-model/dashboard-user.js +109 -0
- package/dist/typed-model/dashboard-user.js.map +1 -0
- package/dist/typed-model/fan-list.js +46 -0
- package/dist/typed-model/fan-list.js.map +1 -0
- package/dist/typed-model/fraud.js +41 -0
- package/dist/typed-model/fraud.js.map +1 -0
- package/dist/typed-model/index.js +101 -0
- package/dist/typed-model/index.js.map +1 -0
- package/dist/typed-model/list-member.js +47 -0
- package/dist/typed-model/list-member.js.map +1 -0
- package/dist/typed-model/mass-message.js +43 -0
- package/dist/typed-model/mass-message.js.map +1 -0
- package/dist/typed-model/media-asset.js +73 -0
- package/dist/typed-model/media-asset.js.map +1 -0
- package/dist/typed-model/media-category.js +49 -0
- package/dist/typed-model/media-category.js.map +1 -0
- package/dist/typed-model/media.js +59 -0
- package/dist/typed-model/media.js.map +1 -0
- package/dist/typed-model/message-media.js +53 -0
- package/dist/typed-model/message-media.js.map +1 -0
- package/dist/typed-model/message.js +191 -0
- package/dist/typed-model/message.js.map +1 -0
- package/dist/typed-model/notification.js +84 -0
- package/dist/typed-model/notification.js.map +1 -0
- package/dist/typed-model/pb-sequelize.js +25 -0
- package/dist/typed-model/pb-sequelize.js.map +1 -0
- package/dist/typed-model/phone-chat-participation.js +127 -0
- package/dist/typed-model/phone-chat-participation.js.map +1 -0
- package/dist/typed-model/phone-chat.js +118 -0
- package/dist/typed-model/phone-chat.js.map +1 -0
- package/dist/typed-model/phone-owner.js +266 -0
- package/dist/typed-model/phone-owner.js.map +1 -0
- package/dist/typed-model/phone-user.js +109 -0
- package/dist/typed-model/phone-user.js.map +1 -0
- package/dist/typed-model/premium-content.js +123 -0
- package/dist/typed-model/premium-content.js.map +1 -0
- package/dist/typed-model/purchased-content.js +69 -0
- package/dist/typed-model/purchased-content.js.map +1 -0
- package/dist/typed-model/short-url.js +88 -0
- package/dist/typed-model/short-url.js.map +1 -0
- package/dist/typed-model/subscription-bundle.js +53 -0
- package/dist/typed-model/subscription-bundle.js.map +1 -0
- package/dist/typed-model/subscription-category-tags.js +58 -0
- package/dist/typed-model/subscription-category-tags.js.map +1 -0
- package/dist/typed-model/subscription-plan.js +126 -0
- package/dist/typed-model/subscription-plan.js.map +1 -0
- package/dist/typed-model/subscription-promotion.js +93 -0
- package/dist/typed-model/subscription-promotion.js.map +1 -0
- package/dist/typed-model/subscription.js +123 -0
- package/dist/typed-model/subscription.js.map +1 -0
- package/dist/typed-model/twilio-phone.js +92 -0
- package/dist/typed-model/twilio-phone.js.map +1 -0
- package/dist/typed-model/user-follow.js +103 -0
- package/dist/typed-model/user-follow.js.map +1 -0
- package/dist/typed-model/verification-code.js +52 -0
- package/dist/typed-model/verification-code.js.map +1 -0
- package/index.ts +3 -0
- package/package.json +72 -0
- package/src/index.ts +2 -0
- package/src/pk-client.ts +1650 -0
- package/src/pk-sub.ts +455 -0
- package/src/types.ts +40 -0
- package/support/index.ts +2 -0
- package/support/slack-client.ts +43 -0
- package/support/uploadcare.ts +191 -0
- package/support/utils.ts +72 -0
- package/typed-model/asset-category.ts +57 -0
- package/typed-model/asset-constent-person.ts +82 -0
- package/typed-model/blocked-ip.ts +52 -0
- package/typed-model/category-tag.ts +66 -0
- package/typed-model/consent-person.ts +78 -0
- package/typed-model/content-category-tag.ts +79 -0
- package/typed-model/content-like.ts +79 -0
- package/typed-model/credit-payment.ts +678 -0
- package/typed-model/credit-payout.ts +62 -0
- package/typed-model/credit-purchase.ts +67 -0
- package/typed-model/customer-profile.ts +70 -0
- package/typed-model/dashboard-user-permissions.ts +51 -0
- package/typed-model/dashboard-user.ts +146 -0
- package/typed-model/fan-list.ts +68 -0
- package/typed-model/fraud.ts +62 -0
- package/typed-model/index.ts +58 -0
- package/typed-model/list-member.ts +67 -0
- package/typed-model/mass-message.ts +64 -0
- package/typed-model/media-asset.ts +99 -0
- package/typed-model/media-category.ts +70 -0
- package/typed-model/media.ts +85 -0
- package/typed-model/message-media.ts +74 -0
- package/typed-model/message.ts +258 -0
- package/typed-model/notification.ts +130 -0
- package/typed-model/pb-sequelize.ts +25 -0
- package/typed-model/phone-chat-participation.ts +166 -0
- package/typed-model/phone-chat.ts +185 -0
- package/typed-model/phone-owner.ts +341 -0
- package/typed-model/phone-user.ts +146 -0
- package/typed-model/premium-content.ts +164 -0
- package/typed-model/purchased-content.ts +100 -0
- package/typed-model/short-url.ts +120 -0
- package/typed-model/subscription-bundle.ts +75 -0
- package/typed-model/subscription-category-tags.ts +79 -0
- package/typed-model/subscription-plan.ts +171 -0
- package/typed-model/subscription-promotion.ts +125 -0
- package/typed-model/subscription.ts +170 -0
- package/typed-model/twilio-phone.ts +149 -0
- package/typed-model/user-follow.ts +141 -0
- package/typed-model/verification-code.ts +74 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Model,
|
|
3
|
+
InferAttributes,
|
|
4
|
+
InferCreationAttributes,
|
|
5
|
+
CreationOptional,
|
|
6
|
+
DataTypes,
|
|
7
|
+
fn,
|
|
8
|
+
} from "sequelize";
|
|
9
|
+
|
|
10
|
+
import sequelize from "./pb-sequelize";
|
|
11
|
+
|
|
12
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
|
13
|
+
class MassMessage extends Model<
|
|
14
|
+
InferAttributes<MassMessage>,
|
|
15
|
+
InferCreationAttributes<MassMessage>
|
|
16
|
+
> {
|
|
17
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
|
18
|
+
// when creating an instance of the model (such as using Model.create()).
|
|
19
|
+
declare id: CreationOptional<string>;
|
|
20
|
+
declare ownerId: string;
|
|
21
|
+
declare filterOptions?: any;
|
|
22
|
+
declare copiedMessageId?: string;
|
|
23
|
+
declare unsendDate?: Date;
|
|
24
|
+
declare createdAt: CreationOptional<Date>;
|
|
25
|
+
declare updatedAt: CreationOptional<Date>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
MassMessage.init(
|
|
29
|
+
{
|
|
30
|
+
id: {
|
|
31
|
+
type: DataTypes.BIGINT,
|
|
32
|
+
primaryKey: true,
|
|
33
|
+
allowNull: false,
|
|
34
|
+
defaultValue: sequelize.fn("next_id"),
|
|
35
|
+
},
|
|
36
|
+
ownerId: {
|
|
37
|
+
type: DataTypes.BIGINT,
|
|
38
|
+
field: "owner_id",
|
|
39
|
+
},
|
|
40
|
+
filterOptions: {
|
|
41
|
+
type: DataTypes.JSON,
|
|
42
|
+
field: "filter_options",
|
|
43
|
+
},
|
|
44
|
+
copiedMessageId: {
|
|
45
|
+
type: DataTypes.BIGINT,
|
|
46
|
+
field: "copied_message_id",
|
|
47
|
+
},
|
|
48
|
+
unsendDate: {
|
|
49
|
+
type: DataTypes.DATE,
|
|
50
|
+
field: "unsend_date",
|
|
51
|
+
},
|
|
52
|
+
createdAt: DataTypes.DATE,
|
|
53
|
+
updatedAt: DataTypes.DATE,
|
|
54
|
+
},
|
|
55
|
+
{ tableName: "mass_messages", sequelize }
|
|
56
|
+
);
|
|
57
|
+
|
|
58
|
+
/*
|
|
59
|
+
====================================================================
|
|
60
|
+
Class functions
|
|
61
|
+
====================================================================
|
|
62
|
+
*/
|
|
63
|
+
|
|
64
|
+
export default MassMessage;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Model,
|
|
3
|
+
InferAttributes,
|
|
4
|
+
InferCreationAttributes,
|
|
5
|
+
CreationOptional,
|
|
6
|
+
DataTypes,
|
|
7
|
+
fn,
|
|
8
|
+
} from "sequelize";
|
|
9
|
+
|
|
10
|
+
import sequelize from "./pb-sequelize";
|
|
11
|
+
import AssetCategory from "./asset-category";
|
|
12
|
+
|
|
13
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
|
14
|
+
class MediaAsset extends Model<
|
|
15
|
+
InferAttributes<MediaAsset>,
|
|
16
|
+
InferCreationAttributes<MediaAsset>
|
|
17
|
+
> {
|
|
18
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
|
19
|
+
// when creating an instance of the model (such as using Model.create()).
|
|
20
|
+
declare id: CreationOptional<string>;
|
|
21
|
+
declare ownerId?: string;
|
|
22
|
+
declare userId?: string;
|
|
23
|
+
declare url: string;
|
|
24
|
+
declare previewImageUrl?: string;
|
|
25
|
+
declare type: "photo" | "video";
|
|
26
|
+
declare videoDurationInSeconds: number;
|
|
27
|
+
declare reviewStatus: "pending" | "approved";
|
|
28
|
+
declare isDeleted?: boolean;
|
|
29
|
+
declare createdAt: CreationOptional<Date>;
|
|
30
|
+
declare updatedAt: CreationOptional<Date>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
MediaAsset.init(
|
|
34
|
+
{
|
|
35
|
+
id: {
|
|
36
|
+
type: DataTypes.BIGINT,
|
|
37
|
+
primaryKey: true,
|
|
38
|
+
allowNull: false,
|
|
39
|
+
defaultValue: sequelize.fn("next_id"),
|
|
40
|
+
},
|
|
41
|
+
ownerId: {
|
|
42
|
+
type: DataTypes.BIGINT,
|
|
43
|
+
field: "owner_id",
|
|
44
|
+
},
|
|
45
|
+
userId: {
|
|
46
|
+
type: DataTypes.BIGINT,
|
|
47
|
+
field: "user_id",
|
|
48
|
+
},
|
|
49
|
+
url: {
|
|
50
|
+
type: DataTypes.STRING,
|
|
51
|
+
field: "url",
|
|
52
|
+
},
|
|
53
|
+
previewImageUrl: {
|
|
54
|
+
type: DataTypes.STRING,
|
|
55
|
+
field: "preview_image_url",
|
|
56
|
+
},
|
|
57
|
+
type: {
|
|
58
|
+
type: DataTypes.STRING,
|
|
59
|
+
field: "type",
|
|
60
|
+
},
|
|
61
|
+
videoDurationInSeconds: {
|
|
62
|
+
type: DataTypes.INTEGER,
|
|
63
|
+
field: "video_duration_in_seconds",
|
|
64
|
+
},
|
|
65
|
+
reviewStatus: {
|
|
66
|
+
type: DataTypes.STRING,
|
|
67
|
+
field: "review_status",
|
|
68
|
+
defaultValue: "pending",
|
|
69
|
+
},
|
|
70
|
+
isDeleted: {
|
|
71
|
+
type: DataTypes.BOOLEAN,
|
|
72
|
+
field: "is_deleted",
|
|
73
|
+
defaultValue: false,
|
|
74
|
+
},
|
|
75
|
+
createdAt: DataTypes.DATE,
|
|
76
|
+
updatedAt: DataTypes.DATE,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
sequelize,
|
|
80
|
+
tableName: "media_assets",
|
|
81
|
+
}
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
/*
|
|
85
|
+
====================================================================
|
|
86
|
+
Class functions
|
|
87
|
+
====================================================================
|
|
88
|
+
*/
|
|
89
|
+
|
|
90
|
+
AssetCategory.hasOne(MediaAsset, {
|
|
91
|
+
foreignKey: "id",
|
|
92
|
+
sourceKey: "mediaAssetId",
|
|
93
|
+
});
|
|
94
|
+
MediaAsset.hasMany(AssetCategory, {
|
|
95
|
+
foreignKey: "media_asset_id",
|
|
96
|
+
sourceKey: "id",
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
export default MediaAsset;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Model,
|
|
3
|
+
InferAttributes,
|
|
4
|
+
InferCreationAttributes,
|
|
5
|
+
CreationOptional,
|
|
6
|
+
DataTypes,
|
|
7
|
+
fn,
|
|
8
|
+
} from "sequelize";
|
|
9
|
+
import AssetCategory from "./asset-category";
|
|
10
|
+
|
|
11
|
+
import sequelize from "./pb-sequelize";
|
|
12
|
+
|
|
13
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
|
14
|
+
class MediaCategory extends Model<
|
|
15
|
+
InferAttributes<MediaCategory>,
|
|
16
|
+
InferCreationAttributes<MediaCategory>
|
|
17
|
+
> {
|
|
18
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
|
19
|
+
// when creating an instance of the model (such as using Model.create()).
|
|
20
|
+
declare id: CreationOptional<string>;
|
|
21
|
+
declare ownerId: string;
|
|
22
|
+
declare name: string;
|
|
23
|
+
declare isArchived?: boolean;
|
|
24
|
+
declare createdAt: CreationOptional<Date>;
|
|
25
|
+
declare updatedAt: CreationOptional<Date>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
MediaCategory.init(
|
|
29
|
+
{
|
|
30
|
+
id: {
|
|
31
|
+
type: DataTypes.BIGINT,
|
|
32
|
+
primaryKey: true,
|
|
33
|
+
allowNull: false,
|
|
34
|
+
defaultValue: sequelize.fn("next_id"),
|
|
35
|
+
},
|
|
36
|
+
ownerId: {
|
|
37
|
+
type: DataTypes.BIGINT,
|
|
38
|
+
field: "owner_id",
|
|
39
|
+
},
|
|
40
|
+
name: {
|
|
41
|
+
type: DataTypes.STRING,
|
|
42
|
+
field: "name",
|
|
43
|
+
},
|
|
44
|
+
isArchived: {
|
|
45
|
+
type: DataTypes.BOOLEAN,
|
|
46
|
+
field: "is_archived",
|
|
47
|
+
defaultValue: false,
|
|
48
|
+
},
|
|
49
|
+
createdAt: DataTypes.DATE,
|
|
50
|
+
updatedAt: DataTypes.DATE,
|
|
51
|
+
},
|
|
52
|
+
{ tableName: "media_categories", sequelize }
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
====================================================================
|
|
57
|
+
Class functions
|
|
58
|
+
====================================================================
|
|
59
|
+
*/
|
|
60
|
+
|
|
61
|
+
AssetCategory.hasOne(MediaCategory, {
|
|
62
|
+
foreignKey: "id",
|
|
63
|
+
sourceKey: "mediaCategoryId",
|
|
64
|
+
});
|
|
65
|
+
MediaCategory.hasMany(AssetCategory, {
|
|
66
|
+
foreignKey: "media_category_id",
|
|
67
|
+
sourceKey: "id",
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
export default MediaCategory;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Model,
|
|
3
|
+
InferAttributes,
|
|
4
|
+
InferCreationAttributes,
|
|
5
|
+
CreationOptional,
|
|
6
|
+
DataTypes,
|
|
7
|
+
fn,
|
|
8
|
+
NonAttribute,
|
|
9
|
+
} from "sequelize";
|
|
10
|
+
import MediaAsset from "./media-asset";
|
|
11
|
+
|
|
12
|
+
import sequelize from "./pb-sequelize";
|
|
13
|
+
|
|
14
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
|
15
|
+
class Media extends Model<
|
|
16
|
+
InferAttributes<Media>,
|
|
17
|
+
InferCreationAttributes<Media>
|
|
18
|
+
> {
|
|
19
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
|
20
|
+
// when creating an instance of the model (such as using Model.create()).
|
|
21
|
+
declare id: CreationOptional<string>;
|
|
22
|
+
declare mediaAssetId: string;
|
|
23
|
+
declare premiumContentId?: string;
|
|
24
|
+
declare messageMediaId?: string;
|
|
25
|
+
declare order?: number;
|
|
26
|
+
declare isPreview?: boolean;
|
|
27
|
+
declare createdAt: CreationOptional<Date>;
|
|
28
|
+
declare updatedAt: CreationOptional<Date>;
|
|
29
|
+
|
|
30
|
+
declare media_asset?: NonAttribute<MediaAsset>;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
Media.init(
|
|
34
|
+
{
|
|
35
|
+
id: {
|
|
36
|
+
type: DataTypes.BIGINT,
|
|
37
|
+
primaryKey: true,
|
|
38
|
+
allowNull: false,
|
|
39
|
+
defaultValue: sequelize.fn("next_id"),
|
|
40
|
+
},
|
|
41
|
+
mediaAssetId: {
|
|
42
|
+
type: DataTypes.BIGINT,
|
|
43
|
+
field: "media_asset_id",
|
|
44
|
+
},
|
|
45
|
+
premiumContentId: {
|
|
46
|
+
type: DataTypes.BIGINT,
|
|
47
|
+
field: "premium_content_id",
|
|
48
|
+
},
|
|
49
|
+
messageMediaId: {
|
|
50
|
+
type: DataTypes.BIGINT,
|
|
51
|
+
field: "message_media_id",
|
|
52
|
+
},
|
|
53
|
+
order: {
|
|
54
|
+
type: DataTypes.INTEGER,
|
|
55
|
+
field: "order",
|
|
56
|
+
},
|
|
57
|
+
isPreview: {
|
|
58
|
+
type: DataTypes.BOOLEAN,
|
|
59
|
+
field: "is_preview",
|
|
60
|
+
},
|
|
61
|
+
createdAt: DataTypes.DATE,
|
|
62
|
+
updatedAt: DataTypes.DATE,
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
tableName: "media",
|
|
66
|
+
sequelize,
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
====================================================================
|
|
72
|
+
Class functions
|
|
73
|
+
====================================================================
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
Media.hasOne(MediaAsset, {
|
|
77
|
+
foreignKey: "id",
|
|
78
|
+
sourceKey: "mediaAssetId",
|
|
79
|
+
});
|
|
80
|
+
MediaAsset.hasMany(Media, {
|
|
81
|
+
foreignKey: "media_asset_id",
|
|
82
|
+
sourceKey: "id",
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
export default Media;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Model,
|
|
3
|
+
InferAttributes,
|
|
4
|
+
InferCreationAttributes,
|
|
5
|
+
CreationOptional,
|
|
6
|
+
DataTypes,
|
|
7
|
+
fn,
|
|
8
|
+
} from "sequelize";
|
|
9
|
+
|
|
10
|
+
import sequelize from "./pb-sequelize";
|
|
11
|
+
import Media from "./media";
|
|
12
|
+
import Message from "./message";
|
|
13
|
+
|
|
14
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
|
15
|
+
class MessageMedia extends Model<
|
|
16
|
+
InferAttributes<MessageMedia>,
|
|
17
|
+
InferCreationAttributes<MessageMedia>
|
|
18
|
+
> {
|
|
19
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
|
20
|
+
// when creating an instance of the model (such as using Model.create()).
|
|
21
|
+
declare id: CreationOptional<string>;
|
|
22
|
+
declare ownerId?: string;
|
|
23
|
+
declare userId?: string;
|
|
24
|
+
declare createdAt: CreationOptional<Date>;
|
|
25
|
+
declare updatedAt: CreationOptional<Date>;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
MessageMedia.init(
|
|
29
|
+
{
|
|
30
|
+
id: {
|
|
31
|
+
type: DataTypes.BIGINT,
|
|
32
|
+
primaryKey: true,
|
|
33
|
+
allowNull: false,
|
|
34
|
+
defaultValue: sequelize.fn("next_id"),
|
|
35
|
+
},
|
|
36
|
+
ownerId: {
|
|
37
|
+
type: DataTypes.BIGINT,
|
|
38
|
+
field: "owner_id",
|
|
39
|
+
},
|
|
40
|
+
userId: {
|
|
41
|
+
type: DataTypes.BIGINT,
|
|
42
|
+
field: "user_id",
|
|
43
|
+
},
|
|
44
|
+
createdAt: DataTypes.DATE,
|
|
45
|
+
updatedAt: DataTypes.DATE,
|
|
46
|
+
},
|
|
47
|
+
{ tableName: "message_media", sequelize }
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
/*
|
|
51
|
+
====================================================================
|
|
52
|
+
Class functions
|
|
53
|
+
====================================================================
|
|
54
|
+
*/
|
|
55
|
+
|
|
56
|
+
Media.hasOne(MessageMedia, {
|
|
57
|
+
foreignKey: "id",
|
|
58
|
+
sourceKey: "messageMediaId",
|
|
59
|
+
});
|
|
60
|
+
MessageMedia.hasMany(Media, {
|
|
61
|
+
foreignKey: "message_media_id",
|
|
62
|
+
sourceKey: "id",
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
Message.hasOne(MessageMedia, {
|
|
66
|
+
foreignKey: "id",
|
|
67
|
+
sourceKey: "messageMediaId",
|
|
68
|
+
});
|
|
69
|
+
MessageMedia.hasMany(Message, {
|
|
70
|
+
foreignKey: "message_media_id",
|
|
71
|
+
sourceKey: "id",
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
export default MessageMedia;
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Model,
|
|
3
|
+
InferAttributes,
|
|
4
|
+
InferCreationAttributes,
|
|
5
|
+
CreationOptional,
|
|
6
|
+
DataTypes,
|
|
7
|
+
fn,
|
|
8
|
+
NOW,
|
|
9
|
+
Op,
|
|
10
|
+
literal,
|
|
11
|
+
} from "sequelize";
|
|
12
|
+
import CreditPayments from "./credit-payment";
|
|
13
|
+
import MediaAsset from "./media-asset";
|
|
14
|
+
|
|
15
|
+
import sequelize from "./pb-sequelize";
|
|
16
|
+
import PhoneOwner from "./phone-owner";
|
|
17
|
+
import PhoneUser from "./phone-user";
|
|
18
|
+
import Notification from "./notification";
|
|
19
|
+
import Media from "./media";
|
|
20
|
+
import MessageMedia from "./message-media";
|
|
21
|
+
import MassMessage from "./mass-message";
|
|
22
|
+
|
|
23
|
+
// order of InferAttributes & InferCreationAttributes is important.
|
|
24
|
+
class Message extends Model<
|
|
25
|
+
InferAttributes<Message>,
|
|
26
|
+
InferCreationAttributes<Message>
|
|
27
|
+
> {
|
|
28
|
+
// 'CreationOptional' is a special type that marks the field as optional
|
|
29
|
+
// when creating an instance of the model (such as using Model.create()).
|
|
30
|
+
declare id: CreationOptional<string>;
|
|
31
|
+
declare fromOwner: boolean;
|
|
32
|
+
declare userId: string;
|
|
33
|
+
declare ownerId: string;
|
|
34
|
+
declare message: string;
|
|
35
|
+
declare isTip: boolean;
|
|
36
|
+
declare amountInCents?: number;
|
|
37
|
+
declare creditPaymentId?: string;
|
|
38
|
+
declare isRead: boolean;
|
|
39
|
+
declare massMessageId?: string;
|
|
40
|
+
declare messageMediaId?: string;
|
|
41
|
+
declare isFollowTemplate?: boolean;
|
|
42
|
+
declare isSubscriberTemplate?: boolean;
|
|
43
|
+
declare sendDate: Date;
|
|
44
|
+
declare readDate: Date;
|
|
45
|
+
declare unsendDate: Date;
|
|
46
|
+
declare createdAt: CreationOptional<Date>;
|
|
47
|
+
declare updatedAt: CreationOptional<Date>;
|
|
48
|
+
static sendMessage: (
|
|
49
|
+
message: Message,
|
|
50
|
+
mediaAssets?: MediaAsset[]
|
|
51
|
+
) => Promise<Message | null>;
|
|
52
|
+
static getPurchasedMessages: (
|
|
53
|
+
ownerId: string,
|
|
54
|
+
userId: string,
|
|
55
|
+
earliestId: string
|
|
56
|
+
) => Promise<Message[]>;
|
|
57
|
+
static readMessages: (ownerId: string, userId: string) => Promise<void>;
|
|
58
|
+
static getConversationsForOwner: (ownerId: string) => Promise<Message[]>;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
Message.init(
|
|
62
|
+
{
|
|
63
|
+
id: {
|
|
64
|
+
type: DataTypes.BIGINT,
|
|
65
|
+
defaultValue: fn("next_id"),
|
|
66
|
+
allowNull: false,
|
|
67
|
+
primaryKey: true,
|
|
68
|
+
},
|
|
69
|
+
fromOwner: {
|
|
70
|
+
field: "from_owner",
|
|
71
|
+
type: DataTypes.BOOLEAN,
|
|
72
|
+
defaultValue: false,
|
|
73
|
+
},
|
|
74
|
+
userId: {
|
|
75
|
+
type: DataTypes.BIGINT,
|
|
76
|
+
field: "user_id",
|
|
77
|
+
},
|
|
78
|
+
ownerId: {
|
|
79
|
+
type: DataTypes.BIGINT,
|
|
80
|
+
field: "owner_id",
|
|
81
|
+
},
|
|
82
|
+
message: {
|
|
83
|
+
type: DataTypes.STRING(500),
|
|
84
|
+
field: "message",
|
|
85
|
+
},
|
|
86
|
+
isTip: {
|
|
87
|
+
field: "is_tip",
|
|
88
|
+
type: DataTypes.BOOLEAN,
|
|
89
|
+
defaultValue: false,
|
|
90
|
+
},
|
|
91
|
+
amountInCents: {
|
|
92
|
+
field: "amount_in_cents",
|
|
93
|
+
type: DataTypes.INTEGER,
|
|
94
|
+
},
|
|
95
|
+
creditPaymentId: {
|
|
96
|
+
type: DataTypes.BIGINT,
|
|
97
|
+
field: "credit_payment_id",
|
|
98
|
+
},
|
|
99
|
+
isRead: {
|
|
100
|
+
field: "is_read",
|
|
101
|
+
type: DataTypes.BOOLEAN,
|
|
102
|
+
defaultValue: false,
|
|
103
|
+
},
|
|
104
|
+
massMessageId: {
|
|
105
|
+
type: DataTypes.BIGINT,
|
|
106
|
+
field: "mass_message_id",
|
|
107
|
+
},
|
|
108
|
+
messageMediaId: {
|
|
109
|
+
type: DataTypes.BIGINT,
|
|
110
|
+
field: "message_media_id",
|
|
111
|
+
},
|
|
112
|
+
isFollowTemplate: {
|
|
113
|
+
type: DataTypes.BOOLEAN,
|
|
114
|
+
field: "is_follow_template",
|
|
115
|
+
},
|
|
116
|
+
isSubscriberTemplate: {
|
|
117
|
+
type: DataTypes.BOOLEAN,
|
|
118
|
+
field: "is_sub_template",
|
|
119
|
+
},
|
|
120
|
+
sendDate: {
|
|
121
|
+
type: DataTypes.DATE,
|
|
122
|
+
field: "send_date",
|
|
123
|
+
defaultValue: NOW,
|
|
124
|
+
allowNull: false,
|
|
125
|
+
},
|
|
126
|
+
readDate: {
|
|
127
|
+
type: DataTypes.DATE,
|
|
128
|
+
field: "read_date",
|
|
129
|
+
defaultValue: null,
|
|
130
|
+
},
|
|
131
|
+
unsendDate: {
|
|
132
|
+
type: DataTypes.DATE,
|
|
133
|
+
field: "unsend_date",
|
|
134
|
+
defaultValue: null,
|
|
135
|
+
},
|
|
136
|
+
createdAt: DataTypes.DATE,
|
|
137
|
+
updatedAt: DataTypes.DATE,
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
tableName: "messages",
|
|
141
|
+
sequelize,
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
|
|
145
|
+
/*
|
|
146
|
+
====================================================================
|
|
147
|
+
Class functions
|
|
148
|
+
====================================================================
|
|
149
|
+
*/
|
|
150
|
+
|
|
151
|
+
Message.sendMessage = async (message: Message, mediaAssets?: MediaAsset[]) => {
|
|
152
|
+
if (message.isTip) {
|
|
153
|
+
const user = await PhoneUser.getById(message.userId);
|
|
154
|
+
const owner = await PhoneOwner.getById(message.ownerId);
|
|
155
|
+
const cp = await CreditPayments.logTip(
|
|
156
|
+
user!,
|
|
157
|
+
owner!,
|
|
158
|
+
message.amountInCents!
|
|
159
|
+
);
|
|
160
|
+
message.creditPaymentId = cp.id;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const createdMessage = await Message.create(message);
|
|
164
|
+
|
|
165
|
+
if (mediaAssets && mediaAssets.length > 0) {
|
|
166
|
+
mediaAssets.map((ma, index) => {
|
|
167
|
+
return { ...ma, index };
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
let alreadyCreatedAssets = mediaAssets.filter((ma) => !!ma.id) || [];
|
|
171
|
+
let needsCreationAssets = mediaAssets.filter((ma) => !ma.id) || [];
|
|
172
|
+
|
|
173
|
+
let newlyCreatedAssets = await MediaAsset.bulkCreate(needsCreationAssets, {
|
|
174
|
+
returning: true,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
let mediaObjects = alreadyCreatedAssets
|
|
178
|
+
.concat(newlyCreatedAssets)
|
|
179
|
+
.map((ma) => {
|
|
180
|
+
let order = mediaAssets.findIndex(
|
|
181
|
+
(a) => a.id === ma.id || a.url === ma.url
|
|
182
|
+
);
|
|
183
|
+
return {
|
|
184
|
+
order,
|
|
185
|
+
messageId: createdMessage.id,
|
|
186
|
+
mediaAssetId: ma.id,
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
await Media.bulkCreate(mediaObjects);
|
|
191
|
+
return await Message.findOne({
|
|
192
|
+
where: { id: createdMessage.id },
|
|
193
|
+
include: {
|
|
194
|
+
model: Media,
|
|
195
|
+
required: true,
|
|
196
|
+
include: [
|
|
197
|
+
{
|
|
198
|
+
model: MediaAsset,
|
|
199
|
+
required: true,
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return createdMessage;
|
|
206
|
+
};
|
|
207
|
+
|
|
208
|
+
Message.getPurchasedMessages = async (
|
|
209
|
+
ownerId: string,
|
|
210
|
+
userId: string,
|
|
211
|
+
earliestId: string
|
|
212
|
+
) => {
|
|
213
|
+
const messages = await Message.findAll({
|
|
214
|
+
where: {
|
|
215
|
+
ownerId,
|
|
216
|
+
userId,
|
|
217
|
+
creditPaymentId: {
|
|
218
|
+
[Op.gt]: earliestId,
|
|
219
|
+
},
|
|
220
|
+
isTip: false,
|
|
221
|
+
},
|
|
222
|
+
order: [["updatedAt", "DESC"]],
|
|
223
|
+
});
|
|
224
|
+
return messages;
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
PhoneOwner.hasMany(Message, {
|
|
228
|
+
foreignKey: "owner_id",
|
|
229
|
+
onDelete: "NO ACTION",
|
|
230
|
+
constraints: false,
|
|
231
|
+
});
|
|
232
|
+
PhoneUser.hasMany(Message, {
|
|
233
|
+
foreignKey: "user_id",
|
|
234
|
+
onDelete: "NO ACTION",
|
|
235
|
+
constraints: false,
|
|
236
|
+
});
|
|
237
|
+
MassMessage.hasMany(Message, { foreignKey: "massMessageId" });
|
|
238
|
+
Message.hasOne(PhoneOwner, {
|
|
239
|
+
foreignKey: "id",
|
|
240
|
+
sourceKey: "owner_id",
|
|
241
|
+
onDelete: "NO ACTION",
|
|
242
|
+
constraints: false,
|
|
243
|
+
});
|
|
244
|
+
Message.hasOne(PhoneUser, {
|
|
245
|
+
foreignKey: "id",
|
|
246
|
+
sourceKey: "user_id",
|
|
247
|
+
onDelete: "NO ACTION",
|
|
248
|
+
constraints: false,
|
|
249
|
+
});
|
|
250
|
+
Message.hasOne(MassMessage, { foreignKey: "id", sourceKey: "massMessageId" });
|
|
251
|
+
|
|
252
|
+
Notification.hasOne(Message, {
|
|
253
|
+
foreignKey: "id",
|
|
254
|
+
sourceKey: "messageId",
|
|
255
|
+
constraints: false,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
export default Message;
|