@winible/winible-typed 2.13.0 → 2.13.2

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.
Files changed (142) hide show
  1. package/dist/index.js +20 -0
  2. package/dist/index.js.map +1 -0
  3. package/dist/migrations/20230104055346-oddsjam.js +501 -0
  4. package/dist/migrations/20230104055346-oddsjam.js.map +1 -0
  5. package/dist/migrations/20230104233909-markets.js +28 -0
  6. package/dist/migrations/20230104233909-markets.js.map +1 -0
  7. package/dist/migrations/20230105005418-sportsbook.js +24 -0
  8. package/dist/migrations/20230105005418-sportsbook.js.map +1 -0
  9. package/dist/migrations/20230106044910-player-result.js +59 -0
  10. package/dist/migrations/20230106044910-player-result.js.map +1 -0
  11. package/dist/migrations/20230206061925-stale.js +13 -0
  12. package/dist/migrations/20230206061925-stale.js.map +1 -0
  13. package/dist/migrations/20230313175015-league-user.js +29 -0
  14. package/dist/migrations/20230313175015-league-user.js.map +1 -0
  15. package/dist/migrations/20230405141245-deprecate-agencies.js +9 -0
  16. package/dist/migrations/20230405141245-deprecate-agencies.js.map +1 -0
  17. package/dist/migrations/20230405142440-deprecate-unused-tables.js +23 -0
  18. package/dist/migrations/20230405142440-deprecate-unused-tables.js.map +1 -0
  19. package/dist/migrations/20230410144940-deprecate-consent-people.js +9 -0
  20. package/dist/migrations/20230410144940-deprecate-consent-people.js.map +1 -0
  21. package/dist/migrations/20230410174328-deprecate-consent-people-table.js +9 -0
  22. package/dist/migrations/20230410174328-deprecate-consent-people-table.js.map +1 -0
  23. package/dist/migrations/20230410181920-migrate-credit-payments-to-transactions.js +9 -0
  24. package/dist/migrations/20230410181920-migrate-credit-payments-to-transactions.js.map +1 -0
  25. package/dist/migrations/20230410202433-migrate-credit-payments-fields.js +12 -0
  26. package/dist/migrations/20230410202433-migrate-credit-payments-fields.js.map +1 -0
  27. package/dist/migrations/20230410211059-deprecate-credit-purchases.js +9 -0
  28. package/dist/migrations/20230410211059-deprecate-credit-purchases.js.map +1 -0
  29. package/dist/migrations/20230410212035-deprecate-dashboard_user_permissions.js +10 -0
  30. package/dist/migrations/20230410212035-deprecate-dashboard_user_permissions.js.map +1 -0
  31. package/dist/migrations/20230410212324-deprecate-non-breaking-tables.js +34 -0
  32. package/dist/migrations/20230410212324-deprecate-non-breaking-tables.js.map +1 -0
  33. package/dist/migrations/20230411054826-create-users-table.js +141 -0
  34. package/dist/migrations/20230411054826-create-users-table.js.map +1 -0
  35. package/dist/migrations/20230411202848-migrate_transactions_table.js +24 -0
  36. package/dist/migrations/20230411202848-migrate_transactions_table.js.map +1 -0
  37. package/dist/migrations/20230411203543-migrate_league_users.js +9 -0
  38. package/dist/migrations/20230411203543-migrate_league_users.js.map +1 -0
  39. package/dist/migrations/20230411205324-migrate_league.js +13 -0
  40. package/dist/migrations/20230411205324-migrate_league.js.map +1 -0
  41. package/dist/migrations/20230411221159-migrate_media.js +9 -0
  42. package/dist/migrations/20230411221159-migrate_media.js.map +1 -0
  43. package/dist/migrations/20230411221327-migrate_media_asset.js +10 -0
  44. package/dist/migrations/20230411221327-migrate_media_asset.js.map +1 -0
  45. package/dist/migrations/20230411221842-migrate_media_asset_fields.js +10 -0
  46. package/dist/migrations/20230411221842-migrate_media_asset_fields.js.map +1 -0
  47. package/dist/migrations/20230411222018-migrate_notifications.js +25 -0
  48. package/dist/migrations/20230411222018-migrate_notifications.js.map +1 -0
  49. package/dist/migrations/20230412190423-migrate_purchased_contents.js +10 -0
  50. package/dist/migrations/20230412190423-migrate_purchased_contents.js.map +1 -0
  51. package/dist/migrations/20230412202031-migrate_other_fields.js +27 -0
  52. package/dist/migrations/20230412202031-migrate_other_fields.js.map +1 -0
  53. package/dist/migrations/20230412213952-deprecate_phone_users_and_phone_owners.js +27 -0
  54. package/dist/migrations/20230412213952-deprecate_phone_users_and_phone_owners.js.map +1 -0
  55. package/dist/scripts/cleanupRecurlyPlans.js +50 -0
  56. package/dist/scripts/cleanupRecurlyPlans.js.map +1 -0
  57. package/dist/scripts/deleteMalformedImages.js +87 -0
  58. package/dist/scripts/deleteMalformedImages.js.map +1 -0
  59. package/dist/scripts/test.js +18 -0
  60. package/dist/scripts/test.js.map +1 -0
  61. package/dist/src/index.js +9 -0
  62. package/dist/src/index.js.map +1 -0
  63. package/dist/src/recurlyInstance.js +33 -0
  64. package/dist/src/recurlyInstance.js.map +1 -0
  65. package/dist/src/types.js +35 -0
  66. package/dist/src/types.js.map +1 -0
  67. package/dist/support/index.js +19 -0
  68. package/dist/support/index.js.map +1 -0
  69. package/dist/support/slack-client.js +51 -0
  70. package/dist/support/slack-client.js.map +1 -0
  71. package/dist/support/uploadcare.js +143 -0
  72. package/dist/support/uploadcare.js.map +1 -0
  73. package/dist/support/utils.js +69 -0
  74. package/dist/support/utils.js.map +1 -0
  75. package/dist/typed-model/application.js +66 -0
  76. package/dist/typed-model/application.js.map +1 -0
  77. package/dist/typed-model/content-like.js +70 -0
  78. package/dist/typed-model/content-like.js.map +1 -0
  79. package/dist/typed-model/index.js +61 -0
  80. package/dist/typed-model/index.js.map +1 -0
  81. package/dist/typed-model/integration.js +59 -0
  82. package/dist/typed-model/integration.js.map +1 -0
  83. package/dist/typed-model/league-on-users.js +60 -0
  84. package/dist/typed-model/league-on-users.js.map +1 -0
  85. package/dist/typed-model/league-user.js +60 -0
  86. package/dist/typed-model/league-user.js.map +1 -0
  87. package/dist/typed-model/league.js +35 -0
  88. package/dist/typed-model/league.js.map +1 -0
  89. package/dist/typed-model/media-asset.js +64 -0
  90. package/dist/typed-model/media-asset.js.map +1 -0
  91. package/dist/typed-model/media.js +55 -0
  92. package/dist/typed-model/media.js.map +1 -0
  93. package/dist/typed-model/notification-preference.js +54 -0
  94. package/dist/typed-model/notification-preference.js.map +1 -0
  95. package/dist/typed-model/notification.js +85 -0
  96. package/dist/typed-model/notification.js.map +1 -0
  97. package/dist/typed-model/pb-sequelize.js +25 -0
  98. package/dist/typed-model/pb-sequelize.js.map +1 -0
  99. package/dist/typed-model/post.js +119 -0
  100. package/dist/typed-model/post.js.map +1 -0
  101. package/dist/typed-model/posts-on-users.js +93 -0
  102. package/dist/typed-model/posts-on-users.js.map +1 -0
  103. package/dist/typed-model/recurly-account.js +34 -0
  104. package/dist/typed-model/recurly-account.js.map +1 -0
  105. package/dist/typed-model/sport-on-posts.js +59 -0
  106. package/dist/typed-model/sport-on-posts.js.map +1 -0
  107. package/dist/typed-model/sport.js +30 -0
  108. package/dist/typed-model/sport.js.map +1 -0
  109. package/dist/typed-model/store.js +139 -0
  110. package/dist/typed-model/store.js.map +1 -0
  111. package/dist/typed-model/subscribers-on-creators.js +65 -0
  112. package/dist/typed-model/subscribers-on-creators.js.map +1 -0
  113. package/dist/typed-model/subscription-coupon.js +88 -0
  114. package/dist/typed-model/subscription-coupon.js.map +1 -0
  115. package/dist/typed-model/subscription-plan-on-post.js +55 -0
  116. package/dist/typed-model/subscription-plan-on-post.js.map +1 -0
  117. package/dist/typed-model/subscription-plan-on-users.js +133 -0
  118. package/dist/typed-model/subscription-plan-on-users.js.map +1 -0
  119. package/dist/typed-model/subscription-plan.js +81 -0
  120. package/dist/typed-model/subscription-plan.js.map +1 -0
  121. package/dist/typed-model/subscription-pricing-option-on-coupons.js +55 -0
  122. package/dist/typed-model/subscription-pricing-option-on-coupons.js.map +1 -0
  123. package/dist/typed-model/subscription-pricing-option.js +63 -0
  124. package/dist/typed-model/subscription-pricing-option.js.map +1 -0
  125. package/dist/typed-model/transaction.js +110 -0
  126. package/dist/typed-model/transaction.js.map +1 -0
  127. package/dist/typed-model/user.js +199 -0
  128. package/dist/typed-model/user.js.map +1 -0
  129. package/dist/typed-model/users_on_creators.js +71 -0
  130. package/dist/typed-model/users_on_creators.js.map +1 -0
  131. package/dist/typed-model/withdrawal.js +33 -0
  132. package/dist/typed-model/withdrawal.js.map +1 -0
  133. package/dist/webhooks/index.js +48 -0
  134. package/dist/webhooks/index.js.map +1 -0
  135. package/dist/webhooks/payment/index.js +9 -0
  136. package/dist/webhooks/payment/index.js.map +1 -0
  137. package/dist/webhooks/payment/refund.js +39 -0
  138. package/dist/webhooks/payment/refund.js.map +1 -0
  139. package/package.json +1 -1
  140. package/typed-model/index.ts +2 -0
  141. package/typed-model/sport-on-posts.ts +80 -0
  142. package/typed-model/sport.ts +46 -0
@@ -0,0 +1,199 @@
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
+ // order of InferAttributes & InferCreationAttributes is important.
10
+ class User extends sequelize_1.Model {
11
+ }
12
+ User.init({
13
+ id: {
14
+ type: sequelize_1.DataTypes.BIGINT,
15
+ primaryKey: true,
16
+ allowNull: false,
17
+ defaultValue: pb_sequelize_1.default.fn("next_id"),
18
+ },
19
+ phoneNumber: {
20
+ type: sequelize_1.DataTypes.STRING,
21
+ allowNull: true,
22
+ field: "phone_number",
23
+ unique: true,
24
+ },
25
+ firstName: {
26
+ type: sequelize_1.DataTypes.STRING,
27
+ allowNull: true,
28
+ field: "first_name",
29
+ },
30
+ lastName: {
31
+ type: sequelize_1.DataTypes.STRING,
32
+ allowNull: true,
33
+ field: "last_name",
34
+ },
35
+ username: {
36
+ type: sequelize_1.DataTypes.STRING,
37
+ field: "username",
38
+ },
39
+ email: {
40
+ type: sequelize_1.DataTypes.STRING,
41
+ field: "email",
42
+ },
43
+ password: {
44
+ type: sequelize_1.DataTypes.STRING,
45
+ field: "password",
46
+ },
47
+ emailVerified: {
48
+ type: sequelize_1.DataTypes.BOOLEAN,
49
+ field: "email_verified",
50
+ defaultValue: true,
51
+ },
52
+ userStatus: {
53
+ type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.UserStatus)),
54
+ field: "user_status",
55
+ defaultValue: types_1.UserStatus.ACTIVE,
56
+ },
57
+ userRole: {
58
+ type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.UserRole)),
59
+ field: "user_role",
60
+ defaultValue: types_1.UserRole.USER,
61
+ },
62
+ bio: {
63
+ type: sequelize_1.DataTypes.STRING(1000),
64
+ field: "bio",
65
+ },
66
+ headline: {
67
+ type: sequelize_1.DataTypes.STRING,
68
+ field: "headline",
69
+ },
70
+ avatarUrl: {
71
+ type: sequelize_1.DataTypes.STRING,
72
+ field: "avatar_url",
73
+ },
74
+ twitterUrl: {
75
+ type: sequelize_1.DataTypes.STRING,
76
+ field: "twitter_url",
77
+ },
78
+ tiktokUrl: {
79
+ type: sequelize_1.DataTypes.STRING,
80
+ field: "tiktok_url",
81
+ },
82
+ instagramUrl: {
83
+ type: sequelize_1.DataTypes.STRING,
84
+ field: "instagram_url",
85
+ },
86
+ discordUrl: {
87
+ type: sequelize_1.DataTypes.STRING,
88
+ field: "discord_url",
89
+ },
90
+ telegramUrl: {
91
+ type: sequelize_1.DataTypes.STRING,
92
+ field: "telegram_url",
93
+ },
94
+ personalSiteUrl: {
95
+ type: sequelize_1.DataTypes.STRING,
96
+ field: "personal_site_url",
97
+ },
98
+ bannerImageUrl: {
99
+ type: sequelize_1.DataTypes.STRING,
100
+ field: "banner_image_url",
101
+ },
102
+ videoUrl: {
103
+ type: sequelize_1.DataTypes.STRING,
104
+ field: "video_url",
105
+ },
106
+ stateCode: {
107
+ type: sequelize_1.DataTypes.STRING,
108
+ field: "state_code",
109
+ },
110
+ profit: {
111
+ type: sequelize_1.DataTypes.INTEGER,
112
+ field: "profit",
113
+ defaultValue: 0,
114
+ },
115
+ units: {
116
+ type: sequelize_1.DataTypes.INTEGER,
117
+ field: "units",
118
+ defaultValue: 0,
119
+ },
120
+ referringUserId: {
121
+ type: sequelize_1.DataTypes.STRING,
122
+ field: "referring_user_id",
123
+ },
124
+ referralPercentage: {
125
+ type: sequelize_1.DataTypes.BIGINT,
126
+ field: "referral_percentage",
127
+ defaultValue: 3,
128
+ },
129
+ winPercentage: {
130
+ type: sequelize_1.DataTypes.BIGINT,
131
+ field: "win_percentage",
132
+ },
133
+ platformFee: {
134
+ type: sequelize_1.DataTypes.INTEGER,
135
+ field: "platform_fee",
136
+ defaultValue: 20,
137
+ },
138
+ profileViews: {
139
+ type: sequelize_1.DataTypes.INTEGER,
140
+ field: "profile_views",
141
+ defaultValue: 0,
142
+ },
143
+ masspayUserToken: {
144
+ type: sequelize_1.DataTypes.STRING,
145
+ field: "masspay_user_token",
146
+ },
147
+ stytchUserId: {
148
+ type: sequelize_1.DataTypes.STRING,
149
+ field: "stytch_user_id",
150
+ },
151
+ optInStatus: {
152
+ type: sequelize_1.DataTypes.STRING,
153
+ field: "opt_in_status",
154
+ defaultValue: "pending",
155
+ },
156
+ createdAt: sequelize_1.DataTypes.DATE,
157
+ updatedAt: sequelize_1.DataTypes.DATE,
158
+ }, {
159
+ tableName: "users",
160
+ sequelize: pb_sequelize_1.default,
161
+ defaultScope: {
162
+ attributes: { exclude: ["password"] },
163
+ },
164
+ });
165
+ /*
166
+ ====================================================================
167
+ Class functions
168
+ ====================================================================
169
+ */
170
+ User.getByPhone = async (phoneNumber) => {
171
+ return await User.findOne({
172
+ where: {
173
+ phoneNumber,
174
+ },
175
+ });
176
+ };
177
+ User.getByEmail = async (email) => {
178
+ return await User.findOne({
179
+ where: {
180
+ email,
181
+ },
182
+ });
183
+ };
184
+ User.getById = async (userId) => {
185
+ return await User.findOne({
186
+ where: {
187
+ id: userId,
188
+ },
189
+ });
190
+ };
191
+ User.getOrCreateByPhone = async (phoneNumber) => {
192
+ let user = await User.getByPhone(phoneNumber);
193
+ if (user) {
194
+ return user;
195
+ }
196
+ return await User.create({ phoneNumber });
197
+ };
198
+ exports.default = User;
199
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../typed-model/user.ts"],"names":[],"mappings":";;;;;AAAA,yCAMmB;AAEnB,kEAAuC;AACvC,wCAAoD;AAIpD,mEAAmE;AACnE,MAAM,IAAK,SAAQ,iBAA2D;CA4C7E;AAED,IAAI,CAAC,IAAI,CACP;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,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,IAAI;KACb;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,YAAY;KACpB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,WAAW;KACnB;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,UAAU;KAClB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,OAAO;KACf;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,UAAU;KAClB;IACD,aAAa,EAAE;QACb,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,gBAAgB;QACvB,YAAY,EAAE,IAAI;KACnB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAU,CAAC,CAAC;QAClD,KAAK,EAAE,aAAa;QACpB,YAAY,EAAE,kBAAU,CAAC,MAAM;KAChC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAQ,CAAC,CAAC;QAChD,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,gBAAQ,CAAC,IAAI;KAC5B;IACD,GAAG,EAAE;QACH,IAAI,EAAE,qBAAS,CAAC,MAAM,CAAC,IAAI,CAAC;QAC5B,KAAK,EAAE,KAAK;KACb;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,UAAU;KAClB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,YAAY;KACpB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,aAAa;KACrB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,YAAY;KACpB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,eAAe;KACvB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,aAAa;KACrB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,cAAc;KACtB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,mBAAmB;KAC3B;IACD,cAAc,EAAE;QACd,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,kBAAkB;KAC1B;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,WAAW;KACnB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,YAAY;KACpB;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,CAAC;KAChB;IACD,KAAK,EAAE;QACL,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,CAAC;KAChB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,mBAAmB;KAC3B;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,qBAAqB;QAC5B,YAAY,EAAE,CAAC;KAChB;IACD,aAAa,EAAE;QACb,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,gBAAgB;KACxB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,cAAc;QACrB,YAAY,EAAE,EAAE;KACjB;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,CAAC;KAChB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,oBAAoB;KAC5B;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,gBAAgB;KACxB;IACD,WAAW,EAAE;QACX,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,eAAe;QACtB,YAAY,EAAE,SAAS;KACxB;IACD,SAAS,EAAE,qBAAS,CAAC,IAAI;IACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;CAC1B,EACD;IACE,SAAS,EAAE,OAAO;IAClB,SAAS,EAAT,sBAAS;IACT,YAAY,EAAE;QACZ,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE;KACtC;CACF,CACF,CAAC;AAEF;;;;IAII;AAEJ,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IAC9C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;QACxB,KAAK,EAAE;YACL,WAAW;SACZ;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,CAAC,UAAU,GAAG,KAAK,EAAE,KAAa,EAAE,EAAE;IACxC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;QACxB,KAAK,EAAE;YACL,KAAK;SACN;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,CAAC,OAAO,GAAG,KAAK,EAAE,MAAc,EAAE,EAAE;IACtC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC;QACxB,KAAK,EAAE;YACL,EAAE,EAAE,MAAM;SACX;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,CAAC,kBAAkB,GAAG,KAAK,EAAE,WAAmB,EAAE,EAAE;IACtD,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAE9C,IAAI,IAAI,EAAE;QACR,OAAO,IAAI,CAAC;KACb;IAED,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5C,CAAC,CAAC;AAEF,kBAAe,IAAI,CAAC"}
@@ -0,0 +1,71 @@
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 _1 = require(".");
8
+ const types_1 = require("../src/types");
9
+ const pb_sequelize_1 = __importDefault(require("./pb-sequelize"));
10
+ // order of InferAttributes & InferCreationAttributes is important.
11
+ class UsersOnCreators extends sequelize_1.Model {
12
+ }
13
+ UsersOnCreators.init({
14
+ id: {
15
+ type: sequelize_1.DataTypes.BIGINT,
16
+ primaryKey: true,
17
+ allowNull: false,
18
+ defaultValue: pb_sequelize_1.default.fn("next_id"),
19
+ },
20
+ creatorId: {
21
+ type: sequelize_1.DataTypes.BIGINT,
22
+ allowNull: false,
23
+ field: "creator_id",
24
+ references: {
25
+ model: _1.User,
26
+ },
27
+ },
28
+ userId: {
29
+ type: sequelize_1.DataTypes.BIGINT,
30
+ allowNull: false,
31
+ field: "user_id",
32
+ references: {
33
+ model: _1.User,
34
+ },
35
+ },
36
+ userRole: {
37
+ type: sequelize_1.DataTypes.ENUM(...Object.values(types_1.UserStoreRole)),
38
+ field: "user_role",
39
+ defaultValue: types_1.UserStoreRole.READ_ONLY,
40
+ },
41
+ status: {
42
+ type: sequelize_1.DataTypes.STRING,
43
+ field: "status",
44
+ defaultValue: "active",
45
+ },
46
+ createdAt: sequelize_1.DataTypes.DATE,
47
+ updatedAt: sequelize_1.DataTypes.DATE,
48
+ }, {
49
+ sequelize: pb_sequelize_1.default,
50
+ tableName: "users_on_creators",
51
+ });
52
+ _1.User.hasMany(UsersOnCreators, {
53
+ foreignKey: "userId",
54
+ sourceKey: "id",
55
+ });
56
+ UsersOnCreators.hasMany(_1.User, {
57
+ foreignKey: "id",
58
+ sourceKey: "userId",
59
+ onDelete: "NO ACTION",
60
+ });
61
+ _1.User.hasMany(UsersOnCreators, {
62
+ foreignKey: "creatorId",
63
+ sourceKey: "id",
64
+ });
65
+ UsersOnCreators.hasMany(_1.User, {
66
+ foreignKey: "id",
67
+ sourceKey: "creatorId",
68
+ onDelete: "NO ACTION",
69
+ });
70
+ exports.default = UsersOnCreators;
71
+ //# sourceMappingURL=users_on_creators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users_on_creators.js","sourceRoot":"","sources":["../../typed-model/users_on_creators.ts"],"names":[],"mappings":";;;;;AAAA,yCAMmB;AAEnB,wBAAyB;AACzB,wCAA6C;AAE7C,kEAAuC;AAEvC,mEAAmE;AACnE,MAAM,eAAgB,SAAQ,iBAG7B;CAUA;AAED,eAAe,CAAC,IAAI,CAClB;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,SAAS,EAAE;QACT,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,YAAY;QACnB,UAAU,EAAE;YACV,KAAK,EAAE,OAAI;SACZ;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;QAChB,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE;YACV,KAAK,EAAE,OAAI;SACZ;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,qBAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAa,CAAC,CAAC;QACrD,KAAK,EAAE,WAAW;QAClB,YAAY,EAAE,qBAAa,CAAC,SAAS;KACtC;IACD,MAAM,EAAE;QACN,IAAI,EAAE,qBAAS,CAAC,MAAM;QACtB,KAAK,EAAE,QAAQ;QACf,YAAY,EAAE,QAAQ;KACvB;IACD,SAAS,EAAE,qBAAS,CAAC,IAAI;IACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;CAC1B,EACD;IACE,SAAS,EAAT,sBAAS;IACT,SAAS,EAAE,mBAAmB;CAC/B,CACF,CAAC;AAEF,OAAI,CAAC,OAAO,CAAC,eAAe,EAAE;IAC5B,UAAU,EAAE,QAAQ;IACpB,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AAEH,eAAe,CAAC,OAAO,CAAC,OAAI,EAAE;IAC5B,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,QAAQ;IACnB,QAAQ,EAAE,WAAW;CACtB,CAAC,CAAC;AAEH,OAAI,CAAC,OAAO,CAAC,eAAe,EAAE;IAC5B,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,IAAI;CAChB,CAAC,CAAC;AAEH,eAAe,CAAC,OAAO,CAAC,OAAI,EAAE;IAC5B,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,WAAW;CACtB,CAAC,CAAC;AAEH,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,33 @@
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
+ // order of InferAttributes & InferCreationAttributes is important.
9
+ class Withdrawal extends sequelize_1.Model {
10
+ }
11
+ Withdrawal.init({
12
+ id: {
13
+ type: sequelize_1.DataTypes.BIGINT,
14
+ primaryKey: true,
15
+ allowNull: false,
16
+ defaultValue: pb_sequelize_1.default.fn("next_id"),
17
+ },
18
+ userId: {
19
+ type: sequelize_1.DataTypes.BIGINT,
20
+ field: "user_id",
21
+ },
22
+ amountInCents: {
23
+ type: sequelize_1.DataTypes.INTEGER,
24
+ field: "amount_in_cents",
25
+ },
26
+ createdAt: sequelize_1.DataTypes.DATE,
27
+ updatedAt: sequelize_1.DataTypes.DATE,
28
+ }, {
29
+ tableName: "withdrawals",
30
+ sequelize: pb_sequelize_1.default,
31
+ });
32
+ exports.default = Withdrawal;
33
+ //# sourceMappingURL=withdrawal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawal.js","sourceRoot":"","sources":["../../typed-model/withdrawal.ts"],"names":[],"mappings":";;;;;AAAA,yCAMmB;AAEnB,kEAAuC;AAEvC,mEAAmE;AACnE,MAAM,UAAW,SAAQ,iBAGxB;CAQA;AAED,UAAU,CAAC,IAAI,CACb;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,KAAK,EAAE,SAAS;KACjB;IACD,aAAa,EAAE;QACb,IAAI,EAAE,qBAAS,CAAC,OAAO;QACvB,KAAK,EAAE,iBAAiB;KACzB;IACD,SAAS,EAAE,qBAAS,CAAC,IAAI;IACzB,SAAS,EAAE,qBAAS,CAAC,IAAI;CAC1B,EACD;IACE,SAAS,EAAE,aAAa;IACxB,SAAS,EAAT,sBAAS;CACV,CACF,CAAC;AAEF,kBAAe,UAAU,CAAC"}
@@ -0,0 +1,48 @@
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
+ exports.app = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const dotenv_1 = __importDefault(require("dotenv"));
9
+ const body_parser_1 = __importDefault(require("body-parser"));
10
+ const http_1 = __importDefault(require("http"));
11
+ const cors_1 = __importDefault(require("cors"));
12
+ const payment_1 = require("./payment");
13
+ exports.app = (0, express_1.default)();
14
+ const server = http_1.default.createServer(exports.app);
15
+ dotenv_1.default.config();
16
+ exports.app.options("*", (req, resp, next) => {
17
+ next();
18
+ }, (0, cors_1.default)());
19
+ const corsOptions = {
20
+ origin: "*",
21
+ optionSuccessStatus: 200,
22
+ };
23
+ exports.app.use((0, cors_1.default)(corsOptions));
24
+ exports.app.use(body_parser_1.default.json());
25
+ exports.app.post("/recurly", async (req, res, next) => {
26
+ const { event_type, object_type, uuid } = req.body;
27
+ console.log(req.body);
28
+ if (object_type == "payment") {
29
+ switch (event_type) {
30
+ case "refunded":
31
+ return await (0, payment_1.refund)("uuid-" + uuid, res);
32
+ default:
33
+ break;
34
+ }
35
+ }
36
+ res.send("No actions taken on this webhook");
37
+ });
38
+ exports.app.use(function errorHandler(err, req, res, next) {
39
+ console.error(err.message);
40
+ res.status(500);
41
+ res.send(err);
42
+ });
43
+ let port = process.env.PORT;
44
+ if (port == null || port == "") {
45
+ port = "3003";
46
+ }
47
+ server.listen(port, () => console.log(`Listening on port ${port}`));
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../webhooks/index.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAE9B,oDAA4B;AAE5B,8DAAqC;AACrC,gDAAwB;AACxB,gDAAwB;AACxB,uCAAmC;AAEtB,QAAA,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;AAC7B,MAAM,MAAM,GAAG,cAAI,CAAC,YAAY,CAAC,WAAG,CAAC,CAAC;AACtC,gBAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,WAAG,CAAC,OAAO,CACT,GAAG,EACH,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;IAClB,IAAI,EAAE,CAAC;AACT,CAAC,EACD,IAAA,cAAI,GAAE,CACP,CAAC;AACF,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,GAAG;IACX,mBAAmB,EAAE,GAAG;CACzB,CAAC;AAEF,WAAG,CAAC,GAAG,CAAC,IAAA,cAAI,EAAC,WAAW,CAAC,CAAC,CAAC;AAE3B,WAAG,CAAC,GAAG,CAAC,qBAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AAE3B,WAAG,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAC5C,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtB,IAAI,WAAW,IAAI,SAAS,EAAE;QAC5B,QAAQ,UAAU,EAAE;YAClB,KAAK,UAAU;gBACb,OAAO,MAAM,IAAA,gBAAM,EAAC,OAAO,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;YAC3C;gBACE,MAAM;SACT;KACF;IACD,GAAG,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC;AAEH,WAAG,CAAC,GAAG,CAAC,SAAS,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI;IAC/C,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC;AAEH,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE;IAC9B,IAAI,GAAG,MAAM,CAAC;CACf;AAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
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
+ exports.refund = void 0;
7
+ var refund_1 = require("./refund");
8
+ Object.defineProperty(exports, "refund", { enumerable: true, get: function () { return __importDefault(refund_1).default; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../webhooks/payment/index.ts"],"names":[],"mappings":";;;;;;AAAA,mCAA6C;AAApC,iHAAA,OAAO,OAAU"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const src_1 = require("../../src");
4
+ const typed_model_1 = require("../../typed-model");
5
+ exports.default = async (id, res) => {
6
+ var _a;
7
+ let refundTransaction = await src_1.recurlyInstance.getTransaction(id);
8
+ if (!refundTransaction) {
9
+ return res.status(400).send("Could not find refund transaction");
10
+ }
11
+ if (refundTransaction.type != "refund") {
12
+ return res.status(400).send("Transaction is not a refund");
13
+ }
14
+ let originalTransaction = await src_1.recurlyInstance.getTransaction(refundTransaction.originalTransactionId);
15
+ let invoiceId = (_a = originalTransaction.invoice) === null || _a === void 0 ? void 0 : _a.id;
16
+ let transaction = await typed_model_1.Transaction.findOne({
17
+ where: {
18
+ recurlyInvoiceId: invoiceId,
19
+ },
20
+ });
21
+ if (!transaction) {
22
+ return res.status(400).send("No credit payment found");
23
+ }
24
+ if (transaction.earningAmountInCents <= 0) {
25
+ return res.status(400).send("Already refunded this payment");
26
+ }
27
+ if (!transaction.withdrawalDate) {
28
+ transaction.transactionAmountInCents = 0;
29
+ transaction.earningAmountInCents = 0;
30
+ }
31
+ else {
32
+ transaction.transactionAmountInCents = 0;
33
+ transaction.earningAmountInCents = transaction.earningAmountInCents * -1;
34
+ transaction.setAttributes("withdrawalDate", undefined);
35
+ }
36
+ await transaction.save();
37
+ return res.send("Success");
38
+ };
39
+ //# sourceMappingURL=refund.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refund.js","sourceRoot":"","sources":["../../../webhooks/payment/refund.ts"],"names":[],"mappings":";;AAAA,mCAA4C;AAC5C,mDAAgD;AAEhD,kBAAe,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;;IAC/B,IAAI,iBAAiB,GAAG,MAAM,qBAAe,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IACjE,IAAI,CAAC,iBAAiB,EAAE;QACtB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;KAClE;IACD,IAAI,iBAAiB,CAAC,IAAI,IAAI,QAAQ,EAAE;QACtC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;KAC5D;IAED,IAAI,mBAAmB,GAAG,MAAM,qBAAe,CAAC,cAAc,CAC5D,iBAAiB,CAAC,qBAAsB,CACzC,CAAC;IAEF,IAAI,SAAS,GAAG,MAAA,mBAAmB,CAAC,OAAO,0CAAE,EAAG,CAAC;IAEjD,IAAI,WAAW,GAAG,MAAM,yBAAW,CAAC,OAAO,CAAC;QAC1C,KAAK,EAAE;YACL,gBAAgB,EAAE,SAAS;SAC5B;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,WAAW,EAAE;QAChB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;KACxD;IAED,IAAI,WAAW,CAAC,oBAAoB,IAAI,CAAC,EAAE;QACzC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;KAC9D;IAED,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE;QAC/B,WAAW,CAAC,wBAAwB,GAAG,CAAC,CAAC;QACzC,WAAW,CAAC,oBAAoB,GAAG,CAAC,CAAC;KACtC;SAAM;QACL,WAAW,CAAC,wBAAwB,GAAG,CAAC,CAAC;QACzC,WAAW,CAAC,oBAAoB,GAAG,WAAW,CAAC,oBAAoB,GAAG,CAAC,CAAC,CAAC;QACzE,WAAW,CAAC,aAAa,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;KACxD;IAED,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IAEzB,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@winible/winible-typed",
3
- "version": "2.13.0",
3
+ "version": "2.13.2",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -22,4 +22,6 @@ export { default as Application } from "./application";
22
22
  export { default as Store } from "./store";
23
23
  export { default as UsersOnCreators } from "./users_on_creators";
24
24
  export { default as Integration } from "./integration";
25
+ export { default as Sport } from "./sport";
26
+ export { default as SportOnPosts } from "./sport-on-posts";
25
27
  export { default as pbSequelize } from "./pb-sequelize";
@@ -0,0 +1,80 @@
1
+ import {
2
+ Model,
3
+ InferAttributes,
4
+ InferCreationAttributes,
5
+ CreationOptional,
6
+ DataTypes,
7
+ } from "sequelize";
8
+
9
+ import sequelize from "./pb-sequelize";
10
+ import Post from "./post";
11
+ import Sport from "./sport";
12
+
13
+ // order of InferAttributes & InferCreationAttributes is important.
14
+ class SportOnPosts extends Model<
15
+ InferAttributes<SportOnPosts>,
16
+ InferCreationAttributes<SportOnPosts>
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 sportId: string;
22
+ declare postId: string;
23
+ declare createdAt: CreationOptional<Date>;
24
+ declare updatedAt: CreationOptional<Date>;
25
+ }
26
+
27
+ SportOnPosts.init(
28
+ {
29
+ id: {
30
+ type: DataTypes.BIGINT,
31
+ primaryKey: true,
32
+ allowNull: false,
33
+ defaultValue: sequelize.fn("next_id"),
34
+ },
35
+ sportId: {
36
+ type: DataTypes.BIGINT,
37
+ field: "sport_id",
38
+ allowNull: false,
39
+ },
40
+ postId: {
41
+ type: DataTypes.BIGINT,
42
+ field: "post_id",
43
+ allowNull: false,
44
+ },
45
+ createdAt: DataTypes.DATE,
46
+ updatedAt: DataTypes.DATE,
47
+ },
48
+ {
49
+ tableName: "sport_on_posts",
50
+ sequelize,
51
+ }
52
+ );
53
+
54
+ SportOnPosts.hasOne(Post, {
55
+ foreignKey: "id",
56
+ sourceKey: "postId",
57
+ onDelete: "NO ACTION",
58
+ constraints: false,
59
+ });
60
+
61
+ Post.hasMany(SportOnPosts, {
62
+ foreignKey: "postId",
63
+ onDelete: "NO ACTION",
64
+ constraints: false,
65
+ });
66
+
67
+ SportOnPosts.hasOne(Sport, {
68
+ foreignKey: "id",
69
+ sourceKey: "sportId",
70
+ onDelete: "NO ACTION",
71
+ constraints: false,
72
+ });
73
+
74
+ Sport.hasMany(SportOnPosts, {
75
+ foreignKey: "sportId",
76
+ onDelete: "NO ACTION",
77
+ constraints: false,
78
+ });
79
+
80
+ export default SportOnPosts;
@@ -0,0 +1,46 @@
1
+ import {
2
+ Model,
3
+ InferAttributes,
4
+ InferCreationAttributes,
5
+ CreationOptional,
6
+ DataTypes,
7
+ } from "sequelize";
8
+
9
+ import sequelize from "./pb-sequelize";
10
+
11
+ // order of InferAttributes & InferCreationAttributes is important.
12
+ class Sport extends Model<
13
+ InferAttributes<Sport>,
14
+ InferCreationAttributes<Sport>
15
+ > {
16
+ // 'CreationOptional' is a special type that marks the field as optional
17
+ // when creating an instance of the model (such as using Model.create()).
18
+ declare id: CreationOptional<string>;
19
+ declare sportName: string;
20
+ declare createdAt: CreationOptional<Date>;
21
+ declare updatedAt: CreationOptional<Date>;
22
+ }
23
+
24
+ Sport.init(
25
+ {
26
+ id: {
27
+ type: DataTypes.BIGINT,
28
+ primaryKey: true,
29
+ allowNull: false,
30
+ defaultValue: sequelize.fn("next_id"),
31
+ },
32
+ sportName: {
33
+ type: DataTypes.STRING,
34
+ field: "sport_name",
35
+ },
36
+ createdAt: DataTypes.DATE,
37
+ updatedAt: DataTypes.DATE,
38
+ },
39
+ {
40
+ // Other model options go here
41
+ tableName: "sports",
42
+ sequelize,
43
+ }
44
+ );
45
+
46
+ export default Sport;