adaptic-backend 1.0.340 → 1.0.342

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 (122) hide show
  1. package/Account.cjs +2670 -2264
  2. package/Account.d.ts +19 -2
  3. package/Action.cjs +1195 -839
  4. package/Action.d.ts +19 -2
  5. package/Alert.cjs +2651 -2347
  6. package/Alert.d.ts +19 -2
  7. package/Allocation.cjs +2631 -2304
  8. package/Allocation.d.ts +19 -2
  9. package/AlpacaAccount.cjs +2654 -2104
  10. package/AlpacaAccount.d.ts +19 -2
  11. package/Asset.cjs +2611 -1544
  12. package/Asset.d.ts +19 -2
  13. package/Authenticator.cjs +2603 -2290
  14. package/Authenticator.d.ts +19 -2
  15. package/Customer.cjs +2506 -2220
  16. package/Customer.d.ts +19 -2
  17. package/EconomicEvent.cjs +708 -367
  18. package/EconomicEvent.d.ts +19 -2
  19. package/MarketSentiment.cjs +691 -340
  20. package/MarketSentiment.d.ts +19 -2
  21. package/NewsArticle.cjs +2114 -1655
  22. package/NewsArticle.d.ts +19 -2
  23. package/NewsArticleAssetSentiment.cjs +1873 -1564
  24. package/NewsArticleAssetSentiment.d.ts +19 -2
  25. package/ScheduledOptionOrder.cjs +607 -316
  26. package/ScheduledOptionOrder.d.ts +19 -2
  27. package/Session.cjs +2592 -2294
  28. package/Session.d.ts +19 -2
  29. package/Trade.cjs +1261 -795
  30. package/Trade.d.ts +19 -2
  31. package/User.cjs +2432 -2013
  32. package/User.d.ts +19 -2
  33. package/VerificationToken.cjs +637 -328
  34. package/VerificationToken.d.ts +19 -2
  35. package/esm/Account.d.ts +19 -2
  36. package/esm/Account.d.ts.map +1 -1
  37. package/esm/Account.js.map +1 -1
  38. package/esm/Account.mjs +2661 -2262
  39. package/esm/Action.d.ts +19 -2
  40. package/esm/Action.d.ts.map +1 -1
  41. package/esm/Action.js.map +1 -1
  42. package/esm/Action.mjs +1186 -837
  43. package/esm/Alert.d.ts +19 -2
  44. package/esm/Alert.d.ts.map +1 -1
  45. package/esm/Alert.js.map +1 -1
  46. package/esm/Alert.mjs +2642 -2345
  47. package/esm/Allocation.d.ts +19 -2
  48. package/esm/Allocation.d.ts.map +1 -1
  49. package/esm/Allocation.js.map +1 -1
  50. package/esm/Allocation.mjs +2622 -2302
  51. package/esm/AlpacaAccount.d.ts +19 -2
  52. package/esm/AlpacaAccount.d.ts.map +1 -1
  53. package/esm/AlpacaAccount.js.map +1 -1
  54. package/esm/AlpacaAccount.mjs +2645 -2102
  55. package/esm/Asset.d.ts +19 -2
  56. package/esm/Asset.d.ts.map +1 -1
  57. package/esm/Asset.js.map +1 -1
  58. package/esm/Asset.mjs +2602 -1542
  59. package/esm/Authenticator.d.ts +19 -2
  60. package/esm/Authenticator.d.ts.map +1 -1
  61. package/esm/Authenticator.js.map +1 -1
  62. package/esm/Authenticator.mjs +2594 -2288
  63. package/esm/Customer.d.ts +19 -2
  64. package/esm/Customer.d.ts.map +1 -1
  65. package/esm/Customer.js.map +1 -1
  66. package/esm/Customer.mjs +2497 -2218
  67. package/esm/EconomicEvent.d.ts +19 -2
  68. package/esm/EconomicEvent.d.ts.map +1 -1
  69. package/esm/EconomicEvent.js.map +1 -1
  70. package/esm/EconomicEvent.mjs +699 -365
  71. package/esm/MarketSentiment.d.ts +19 -2
  72. package/esm/MarketSentiment.d.ts.map +1 -1
  73. package/esm/MarketSentiment.js.map +1 -1
  74. package/esm/MarketSentiment.mjs +682 -338
  75. package/esm/NewsArticle.d.ts +19 -2
  76. package/esm/NewsArticle.d.ts.map +1 -1
  77. package/esm/NewsArticle.js.map +1 -1
  78. package/esm/NewsArticle.mjs +2105 -1653
  79. package/esm/NewsArticleAssetSentiment.d.ts +19 -2
  80. package/esm/NewsArticleAssetSentiment.d.ts.map +1 -1
  81. package/esm/NewsArticleAssetSentiment.js.map +1 -1
  82. package/esm/NewsArticleAssetSentiment.mjs +1864 -1562
  83. package/esm/ScheduledOptionOrder.d.ts +19 -2
  84. package/esm/ScheduledOptionOrder.d.ts.map +1 -1
  85. package/esm/ScheduledOptionOrder.js.map +1 -1
  86. package/esm/ScheduledOptionOrder.mjs +598 -314
  87. package/esm/Session.d.ts +19 -2
  88. package/esm/Session.d.ts.map +1 -1
  89. package/esm/Session.js.map +1 -1
  90. package/esm/Session.mjs +2583 -2292
  91. package/esm/Trade.d.ts +19 -2
  92. package/esm/Trade.d.ts.map +1 -1
  93. package/esm/Trade.js.map +1 -1
  94. package/esm/Trade.mjs +1252 -793
  95. package/esm/User.d.ts +19 -2
  96. package/esm/User.d.ts.map +1 -1
  97. package/esm/User.js.map +1 -1
  98. package/esm/User.mjs +2423 -2011
  99. package/esm/VerificationToken.d.ts +19 -2
  100. package/esm/VerificationToken.d.ts.map +1 -1
  101. package/esm/VerificationToken.js.map +1 -1
  102. package/esm/VerificationToken.mjs +628 -326
  103. package/esm/generated/typegraphql-prisma/enhance.js.map +1 -1
  104. package/esm/generated/typegraphql-prisma/enhance.mjs +1 -1
  105. package/esm/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.d.ts +1 -1
  106. package/esm/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.d.ts.map +1 -1
  107. package/esm/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.js.map +1 -1
  108. package/esm/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.mjs +7 -7
  109. package/esm/prismaClient.d.ts +4 -5
  110. package/esm/prismaClient.d.ts.map +1 -1
  111. package/esm/prismaClient.js.map +1 -1
  112. package/esm/prismaClient.mjs +13 -11
  113. package/generated/typegraphql-prisma/enhance.cjs +1 -1
  114. package/generated/typegraphql-prisma/enhance.js.map +1 -1
  115. package/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.cjs +6 -6
  116. package/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.d.ts +1 -1
  117. package/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.d.ts.map +1 -1
  118. package/generated/typegraphql-prisma/resolvers/inputs/AccountWhereUniqueInput.js.map +1 -1
  119. package/package.json +1 -1
  120. package/prismaClient.cjs +13 -11
  121. package/prismaClient.d.ts +4 -5
  122. package/server.cjs +37 -5
package/Asset.cjs CHANGED
@@ -75,110 +75,780 @@ exports.Asset = {
75
75
  * @param client - Apollo Client instance.
76
76
  * @returns The created Asset or null.
77
77
  */
78
+ /**
79
+ * Create a new Asset record.
80
+ * Enhanced with connection resilience against Prisma connection errors.
81
+ * @param props - Properties for the new record.
82
+ * @param globalClient - Apollo Client instance.
83
+ * @returns The created Asset or null.
84
+ */
78
85
  async create(props, globalClient) {
79
- const [modules, client] = await Promise.all([
80
- (0, client_1.getApolloModules)(),
81
- globalClient
82
- ? Promise.resolve(globalClient)
83
- : client_1.client
84
- ]);
85
- const { gql, ApolloError } = modules;
86
- const CREATE_ONE_ASSET = gql `
87
- mutation createOneAsset($data: AssetCreateInput!) {
88
- createOneAsset(data: $data) {
89
- ${selectionSet}
90
- }
86
+ var _a, _b, _c, _d, _e;
87
+ // Maximum number of retries for database connection issues
88
+ const MAX_RETRIES = 3;
89
+ let retryCount = 0;
90
+ let lastError = null;
91
+ // Retry loop to handle potential database connection issues
92
+ while (retryCount < MAX_RETRIES) {
93
+ try {
94
+ const [modules, client] = await Promise.all([
95
+ (0, client_1.getApolloModules)(),
96
+ globalClient
97
+ ? Promise.resolve(globalClient)
98
+ : client_1.client
99
+ ]);
100
+ const { gql, ApolloError } = modules;
101
+ const CREATE_ONE_ASSET = gql `
102
+ mutation createOneAsset($data: AssetCreateInput!) {
103
+ createOneAsset(data: $data) {
104
+ ${selectionSet}
105
+ }
106
+ }
107
+ `;
108
+ const variables = {
109
+ data: {
110
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
111
+ name: props.name !== undefined ? props.name : undefined,
112
+ type: props.type !== undefined ? props.type : undefined,
113
+ logoUrl: props.logoUrl !== undefined ? props.logoUrl : undefined,
114
+ description: props.description !== undefined ? props.description : undefined,
115
+ cik: props.cik !== undefined ? props.cik : undefined,
116
+ exchange: props.exchange !== undefined ? props.exchange : undefined,
117
+ currency: props.currency !== undefined ? props.currency : undefined,
118
+ country: props.country !== undefined ? props.country : undefined,
119
+ sector: props.sector !== undefined ? props.sector : undefined,
120
+ industry: props.industry !== undefined ? props.industry : undefined,
121
+ address: props.address !== undefined ? props.address : undefined,
122
+ officialSite: props.officialSite !== undefined ? props.officialSite : undefined,
123
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? props.fiscalYearEnd : undefined,
124
+ latestQuarter: props.latestQuarter !== undefined ? props.latestQuarter : undefined,
125
+ marketCapitalization: props.marketCapitalization !== undefined ? props.marketCapitalization : undefined,
126
+ ebitda: props.ebitda !== undefined ? props.ebitda : undefined,
127
+ peRatio: props.peRatio !== undefined ? props.peRatio : undefined,
128
+ pegRatio: props.pegRatio !== undefined ? props.pegRatio : undefined,
129
+ bookValue: props.bookValue !== undefined ? props.bookValue : undefined,
130
+ dividendPerShare: props.dividendPerShare !== undefined ? props.dividendPerShare : undefined,
131
+ dividendYield: props.dividendYield !== undefined ? props.dividendYield : undefined,
132
+ eps: props.eps !== undefined ? props.eps : undefined,
133
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? props.revenuePerShareTTM : undefined,
134
+ profitMargin: props.profitMargin !== undefined ? props.profitMargin : undefined,
135
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? props.operatingMarginTTM : undefined,
136
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? props.returnOnAssetsTTM : undefined,
137
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? props.returnOnEquityTTM : undefined,
138
+ revenueTTM: props.revenueTTM !== undefined ? props.revenueTTM : undefined,
139
+ grossProfitTTM: props.grossProfitTTM !== undefined ? props.grossProfitTTM : undefined,
140
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? props.dilutedEPSTTM : undefined,
141
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? props.quarterlyEarningsGrowthYOY : undefined,
142
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? props.quarterlyRevenueGrowthYOY : undefined,
143
+ analystTargetPrice: props.analystTargetPrice !== undefined ? props.analystTargetPrice : undefined,
144
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? props.analystRatingStrongBuy : undefined,
145
+ analystRatingBuy: props.analystRatingBuy !== undefined ? props.analystRatingBuy : undefined,
146
+ analystRatingHold: props.analystRatingHold !== undefined ? props.analystRatingHold : undefined,
147
+ analystRatingSell: props.analystRatingSell !== undefined ? props.analystRatingSell : undefined,
148
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? props.analystRatingStrongSell : undefined,
149
+ trailingPE: props.trailingPE !== undefined ? props.trailingPE : undefined,
150
+ forwardPE: props.forwardPE !== undefined ? props.forwardPE : undefined,
151
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? props.priceToSalesRatioTTM : undefined,
152
+ priceToBookRatio: props.priceToBookRatio !== undefined ? props.priceToBookRatio : undefined,
153
+ evToRevenue: props.evToRevenue !== undefined ? props.evToRevenue : undefined,
154
+ evToEbitda: props.evToEbitda !== undefined ? props.evToEbitda : undefined,
155
+ beta: props.beta !== undefined ? props.beta : undefined,
156
+ week52High: props.week52High !== undefined ? props.week52High : undefined,
157
+ week52Low: props.week52Low !== undefined ? props.week52Low : undefined,
158
+ day50MovingAverage: props.day50MovingAverage !== undefined ? props.day50MovingAverage : undefined,
159
+ day200MovingAverage: props.day200MovingAverage !== undefined ? props.day200MovingAverage : undefined,
160
+ sharesOutstanding: props.sharesOutstanding !== undefined ? props.sharesOutstanding : undefined,
161
+ dividendDate: props.dividendDate !== undefined ? props.dividendDate : undefined,
162
+ exDividendDate: props.exDividendDate !== undefined ? props.exDividendDate : undefined,
163
+ askPrice: props.askPrice !== undefined ? props.askPrice : undefined,
164
+ bidPrice: props.bidPrice !== undefined ? props.bidPrice : undefined,
165
+ newsMentions: props.newsMentions ?
166
+ Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && 'id' in item && Object.keys(item).length === 1) ? {
167
+ connect: props.newsMentions.map((item) => ({
168
+ id: item.id
169
+ }))
170
+ }
171
+ : { connectOrCreate: props.newsMentions.map((item) => ({
172
+ where: {
173
+ id: item.id !== undefined ? item.id : undefined,
174
+ url: item.url !== undefined ? item.url : undefined,
175
+ newsArticleId: item.newsArticleId !== undefined ? {
176
+ equals: item.newsArticleId
177
+ } : undefined,
178
+ },
179
+ create: {
180
+ url: item.url !== undefined ? item.url : undefined,
181
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
182
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
183
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
184
+ news: item.news ?
185
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
186
+ ? { connect: {
187
+ id: item.news.id
188
+ }
189
+ }
190
+ : { connectOrCreate: {
191
+ where: {
192
+ id: item.news.id !== undefined ? item.news.id : undefined,
193
+ url: item.news.url !== undefined ? item.news.url : undefined,
194
+ title: item.news.title !== undefined ? {
195
+ equals: item.news.title
196
+ } : undefined,
197
+ },
198
+ create: {
199
+ title: item.news.title !== undefined ? item.news.title : undefined,
200
+ content: item.news.content !== undefined ? item.news.content : undefined,
201
+ source: item.news.source !== undefined ? item.news.source : undefined,
202
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
203
+ url: item.news.url !== undefined ? item.news.url : undefined,
204
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
205
+ authors: item.news.authors !== undefined ? {
206
+ set: item.news.authors
207
+ } : undefined,
208
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
209
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
210
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
211
+ category: item.news.category !== undefined ? item.news.category : undefined,
212
+ topics: item.news.topics !== undefined ? {
213
+ set: item.news.topics
214
+ } : undefined,
215
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
216
+ },
217
+ }
218
+ } : undefined,
219
+ },
220
+ }))
221
+ } : undefined,
222
+ },
223
+ };
224
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
225
+ const response = await client.mutate({
226
+ mutation: CREATE_ONE_ASSET,
227
+ variables: filteredVariables,
228
+ // Don't cache mutations, but ensure we're using the freshest context
229
+ fetchPolicy: 'no-cache'
230
+ });
231
+ if (response.errors && response.errors.length > 0)
232
+ throw new Error(response.errors[0].message);
233
+ if (response && response.data && response.data.createOneAsset) {
234
+ return response.data.createOneAsset;
235
+ }
236
+ else {
237
+ return null;
238
+ }
239
+ }
240
+ catch (error) {
241
+ lastError = error;
242
+ // Check if this is a database connection error that we should retry
243
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
244
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
245
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
246
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
247
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
248
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
249
+ retryCount++;
250
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
251
+ console.warn("Database connection error, retrying...");
252
+ await new Promise(resolve => setTimeout(resolve, delay));
253
+ continue;
254
+ }
255
+ // Log the error and rethrow
256
+ console.error("Database error occurred:", error);
257
+ throw error;
258
+ }
91
259
  }
92
- `;
93
- const variables = {
94
- data: {
95
- symbol: props.symbol !== undefined ? props.symbol : undefined,
96
- name: props.name !== undefined ? props.name : undefined,
97
- type: props.type !== undefined ? props.type : undefined,
98
- logoUrl: props.logoUrl !== undefined ? props.logoUrl : undefined,
99
- description: props.description !== undefined ? props.description : undefined,
100
- cik: props.cik !== undefined ? props.cik : undefined,
101
- exchange: props.exchange !== undefined ? props.exchange : undefined,
102
- currency: props.currency !== undefined ? props.currency : undefined,
103
- country: props.country !== undefined ? props.country : undefined,
104
- sector: props.sector !== undefined ? props.sector : undefined,
105
- industry: props.industry !== undefined ? props.industry : undefined,
106
- address: props.address !== undefined ? props.address : undefined,
107
- officialSite: props.officialSite !== undefined ? props.officialSite : undefined,
108
- fiscalYearEnd: props.fiscalYearEnd !== undefined ? props.fiscalYearEnd : undefined,
109
- latestQuarter: props.latestQuarter !== undefined ? props.latestQuarter : undefined,
110
- marketCapitalization: props.marketCapitalization !== undefined ? props.marketCapitalization : undefined,
111
- ebitda: props.ebitda !== undefined ? props.ebitda : undefined,
112
- peRatio: props.peRatio !== undefined ? props.peRatio : undefined,
113
- pegRatio: props.pegRatio !== undefined ? props.pegRatio : undefined,
114
- bookValue: props.bookValue !== undefined ? props.bookValue : undefined,
115
- dividendPerShare: props.dividendPerShare !== undefined ? props.dividendPerShare : undefined,
116
- dividendYield: props.dividendYield !== undefined ? props.dividendYield : undefined,
117
- eps: props.eps !== undefined ? props.eps : undefined,
118
- revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? props.revenuePerShareTTM : undefined,
119
- profitMargin: props.profitMargin !== undefined ? props.profitMargin : undefined,
120
- operatingMarginTTM: props.operatingMarginTTM !== undefined ? props.operatingMarginTTM : undefined,
121
- returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? props.returnOnAssetsTTM : undefined,
122
- returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? props.returnOnEquityTTM : undefined,
123
- revenueTTM: props.revenueTTM !== undefined ? props.revenueTTM : undefined,
124
- grossProfitTTM: props.grossProfitTTM !== undefined ? props.grossProfitTTM : undefined,
125
- dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? props.dilutedEPSTTM : undefined,
126
- quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? props.quarterlyEarningsGrowthYOY : undefined,
127
- quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? props.quarterlyRevenueGrowthYOY : undefined,
128
- analystTargetPrice: props.analystTargetPrice !== undefined ? props.analystTargetPrice : undefined,
129
- analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? props.analystRatingStrongBuy : undefined,
130
- analystRatingBuy: props.analystRatingBuy !== undefined ? props.analystRatingBuy : undefined,
131
- analystRatingHold: props.analystRatingHold !== undefined ? props.analystRatingHold : undefined,
132
- analystRatingSell: props.analystRatingSell !== undefined ? props.analystRatingSell : undefined,
133
- analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? props.analystRatingStrongSell : undefined,
134
- trailingPE: props.trailingPE !== undefined ? props.trailingPE : undefined,
135
- forwardPE: props.forwardPE !== undefined ? props.forwardPE : undefined,
136
- priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? props.priceToSalesRatioTTM : undefined,
137
- priceToBookRatio: props.priceToBookRatio !== undefined ? props.priceToBookRatio : undefined,
138
- evToRevenue: props.evToRevenue !== undefined ? props.evToRevenue : undefined,
139
- evToEbitda: props.evToEbitda !== undefined ? props.evToEbitda : undefined,
140
- beta: props.beta !== undefined ? props.beta : undefined,
141
- week52High: props.week52High !== undefined ? props.week52High : undefined,
142
- week52Low: props.week52Low !== undefined ? props.week52Low : undefined,
143
- day50MovingAverage: props.day50MovingAverage !== undefined ? props.day50MovingAverage : undefined,
144
- day200MovingAverage: props.day200MovingAverage !== undefined ? props.day200MovingAverage : undefined,
145
- sharesOutstanding: props.sharesOutstanding !== undefined ? props.sharesOutstanding : undefined,
146
- dividendDate: props.dividendDate !== undefined ? props.dividendDate : undefined,
147
- exDividendDate: props.exDividendDate !== undefined ? props.exDividendDate : undefined,
148
- askPrice: props.askPrice !== undefined ? props.askPrice : undefined,
149
- bidPrice: props.bidPrice !== undefined ? props.bidPrice : undefined,
150
- newsMentions: props.newsMentions ?
151
- Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && 'id' in item && Object.keys(item).length === 1) ? {
152
- connect: props.newsMentions.map((item) => ({
153
- id: item.id
154
- }))
155
- }
156
- : { connectOrCreate: props.newsMentions.map((item) => ({
157
- where: {
158
- id: item.id !== undefined ? item.id : undefined,
159
- url: item.url !== undefined ? item.url : undefined,
160
- newsArticleId: item.newsArticleId !== undefined ? {
161
- equals: item.newsArticleId
162
- } : undefined,
163
- },
164
- create: {
165
- url: item.url !== undefined ? item.url : undefined,
166
- relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
167
- sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
168
- sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
169
- news: item.news ?
170
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
171
- ? { connect: {
172
- id: item.news.id
173
- }
174
- }
175
- : { connectOrCreate: {
260
+ // If we exhausted retries, throw the last error
261
+ throw lastError;
262
+ },
263
+ /**
264
+ * Create multiple Asset records.
265
+ * Enhanced with connection resilience against Prisma connection errors.
266
+ * @param props - Array of Asset objects for the new records.
267
+ * @param globalClient - Apollo Client instance.
268
+ * @returns The count of created records or null.
269
+ */
270
+ async createMany(props, globalClient) {
271
+ var _a, _b, _c, _d, _e;
272
+ // Maximum number of retries for database connection issues
273
+ const MAX_RETRIES = 3;
274
+ let retryCount = 0;
275
+ let lastError = null;
276
+ // Retry loop to handle potential database connection issues
277
+ while (retryCount < MAX_RETRIES) {
278
+ try {
279
+ const [modules, client] = await Promise.all([
280
+ (0, client_1.getApolloModules)(),
281
+ globalClient
282
+ ? Promise.resolve(globalClient)
283
+ : client_1.client
284
+ ]);
285
+ const { gql, ApolloError } = modules;
286
+ const CREATE_MANY_ASSET = gql `
287
+ mutation createManyAsset($data: [AssetCreateManyInput!]!) {
288
+ createManyAsset(data: $data) {
289
+ count
290
+ }
291
+ }`;
292
+ const variables = {
293
+ data: props.map(prop => ({
294
+ symbol: prop.symbol !== undefined ? prop.symbol : undefined,
295
+ name: prop.name !== undefined ? prop.name : undefined,
296
+ type: prop.type !== undefined ? prop.type : undefined,
297
+ logoUrl: prop.logoUrl !== undefined ? prop.logoUrl : undefined,
298
+ description: prop.description !== undefined ? prop.description : undefined,
299
+ cik: prop.cik !== undefined ? prop.cik : undefined,
300
+ exchange: prop.exchange !== undefined ? prop.exchange : undefined,
301
+ currency: prop.currency !== undefined ? prop.currency : undefined,
302
+ country: prop.country !== undefined ? prop.country : undefined,
303
+ sector: prop.sector !== undefined ? prop.sector : undefined,
304
+ industry: prop.industry !== undefined ? prop.industry : undefined,
305
+ address: prop.address !== undefined ? prop.address : undefined,
306
+ officialSite: prop.officialSite !== undefined ? prop.officialSite : undefined,
307
+ fiscalYearEnd: prop.fiscalYearEnd !== undefined ? prop.fiscalYearEnd : undefined,
308
+ latestQuarter: prop.latestQuarter !== undefined ? prop.latestQuarter : undefined,
309
+ marketCapitalization: prop.marketCapitalization !== undefined ? prop.marketCapitalization : undefined,
310
+ ebitda: prop.ebitda !== undefined ? prop.ebitda : undefined,
311
+ peRatio: prop.peRatio !== undefined ? prop.peRatio : undefined,
312
+ pegRatio: prop.pegRatio !== undefined ? prop.pegRatio : undefined,
313
+ bookValue: prop.bookValue !== undefined ? prop.bookValue : undefined,
314
+ dividendPerShare: prop.dividendPerShare !== undefined ? prop.dividendPerShare : undefined,
315
+ dividendYield: prop.dividendYield !== undefined ? prop.dividendYield : undefined,
316
+ eps: prop.eps !== undefined ? prop.eps : undefined,
317
+ revenuePerShareTTM: prop.revenuePerShareTTM !== undefined ? prop.revenuePerShareTTM : undefined,
318
+ profitMargin: prop.profitMargin !== undefined ? prop.profitMargin : undefined,
319
+ operatingMarginTTM: prop.operatingMarginTTM !== undefined ? prop.operatingMarginTTM : undefined,
320
+ returnOnAssetsTTM: prop.returnOnAssetsTTM !== undefined ? prop.returnOnAssetsTTM : undefined,
321
+ returnOnEquityTTM: prop.returnOnEquityTTM !== undefined ? prop.returnOnEquityTTM : undefined,
322
+ revenueTTM: prop.revenueTTM !== undefined ? prop.revenueTTM : undefined,
323
+ grossProfitTTM: prop.grossProfitTTM !== undefined ? prop.grossProfitTTM : undefined,
324
+ dilutedEPSTTM: prop.dilutedEPSTTM !== undefined ? prop.dilutedEPSTTM : undefined,
325
+ quarterlyEarningsGrowthYOY: prop.quarterlyEarningsGrowthYOY !== undefined ? prop.quarterlyEarningsGrowthYOY : undefined,
326
+ quarterlyRevenueGrowthYOY: prop.quarterlyRevenueGrowthYOY !== undefined ? prop.quarterlyRevenueGrowthYOY : undefined,
327
+ analystTargetPrice: prop.analystTargetPrice !== undefined ? prop.analystTargetPrice : undefined,
328
+ analystRatingStrongBuy: prop.analystRatingStrongBuy !== undefined ? prop.analystRatingStrongBuy : undefined,
329
+ analystRatingBuy: prop.analystRatingBuy !== undefined ? prop.analystRatingBuy : undefined,
330
+ analystRatingHold: prop.analystRatingHold !== undefined ? prop.analystRatingHold : undefined,
331
+ analystRatingSell: prop.analystRatingSell !== undefined ? prop.analystRatingSell : undefined,
332
+ analystRatingStrongSell: prop.analystRatingStrongSell !== undefined ? prop.analystRatingStrongSell : undefined,
333
+ trailingPE: prop.trailingPE !== undefined ? prop.trailingPE : undefined,
334
+ forwardPE: prop.forwardPE !== undefined ? prop.forwardPE : undefined,
335
+ priceToSalesRatioTTM: prop.priceToSalesRatioTTM !== undefined ? prop.priceToSalesRatioTTM : undefined,
336
+ priceToBookRatio: prop.priceToBookRatio !== undefined ? prop.priceToBookRatio : undefined,
337
+ evToRevenue: prop.evToRevenue !== undefined ? prop.evToRevenue : undefined,
338
+ evToEbitda: prop.evToEbitda !== undefined ? prop.evToEbitda : undefined,
339
+ beta: prop.beta !== undefined ? prop.beta : undefined,
340
+ week52High: prop.week52High !== undefined ? prop.week52High : undefined,
341
+ week52Low: prop.week52Low !== undefined ? prop.week52Low : undefined,
342
+ day50MovingAverage: prop.day50MovingAverage !== undefined ? prop.day50MovingAverage : undefined,
343
+ day200MovingAverage: prop.day200MovingAverage !== undefined ? prop.day200MovingAverage : undefined,
344
+ sharesOutstanding: prop.sharesOutstanding !== undefined ? prop.sharesOutstanding : undefined,
345
+ dividendDate: prop.dividendDate !== undefined ? prop.dividendDate : undefined,
346
+ exDividendDate: prop.exDividendDate !== undefined ? prop.exDividendDate : undefined,
347
+ askPrice: prop.askPrice !== undefined ? prop.askPrice : undefined,
348
+ bidPrice: prop.bidPrice !== undefined ? prop.bidPrice : undefined,
349
+ })),
350
+ };
351
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
352
+ const response = await client.mutate({
353
+ mutation: CREATE_MANY_ASSET,
354
+ variables: filteredVariables,
355
+ // Don't cache mutations, but ensure we're using the freshest context
356
+ fetchPolicy: 'no-cache'
357
+ });
358
+ if (response.errors && response.errors.length > 0)
359
+ throw new Error(response.errors[0].message);
360
+ if (response && response.data && response.data.createManyAsset) {
361
+ return response.data.createManyAsset;
362
+ }
363
+ else {
364
+ return null;
365
+ }
366
+ }
367
+ catch (error) {
368
+ lastError = error;
369
+ // Check if this is a database connection error that we should retry
370
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
371
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
372
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
373
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
374
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
375
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
376
+ retryCount++;
377
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
378
+ console.warn("Database connection error, retrying...");
379
+ await new Promise(resolve => setTimeout(resolve, delay));
380
+ continue;
381
+ }
382
+ // Log the error and rethrow
383
+ console.error("Database error occurred:", error);
384
+ throw error;
385
+ }
386
+ }
387
+ // If we exhausted retries, throw the last error
388
+ throw lastError;
389
+ },
390
+ /**
391
+ * Update a single Asset record.
392
+ * Enhanced with connection resilience against Prisma connection errors.
393
+ * @param props - Properties to update.
394
+ * @param globalClient - Apollo Client instance.
395
+ * @returns The updated Asset or null.
396
+ */
397
+ async update(props, globalClient) {
398
+ var _a, _b, _c, _d, _e;
399
+ // Maximum number of retries for database connection issues
400
+ const MAX_RETRIES = 3;
401
+ let retryCount = 0;
402
+ let lastError = null;
403
+ // Retry loop to handle potential database connection issues
404
+ while (retryCount < MAX_RETRIES) {
405
+ try {
406
+ const [modules, client] = await Promise.all([
407
+ (0, client_1.getApolloModules)(),
408
+ globalClient
409
+ ? Promise.resolve(globalClient)
410
+ : client_1.client
411
+ ]);
412
+ const { gql, ApolloError } = modules;
413
+ const UPDATE_ONE_ASSET = gql `
414
+ mutation updateOneAsset($data: AssetUpdateInput!, $where: AssetWhereUniqueInput!) {
415
+ updateOneAsset(data: $data, where: $where) {
416
+ ${selectionSet}
417
+ }
418
+ }`;
419
+ const variables = {
420
+ where: {
421
+ id: props.id !== undefined ? props.id : undefined,
422
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
423
+ name: props.name !== undefined ? props.name : undefined,
424
+ type: props.type !== undefined ? {
425
+ equals: props.type
426
+ } : undefined,
427
+ logoUrl: props.logoUrl !== undefined ? {
428
+ equals: props.logoUrl
429
+ } : undefined,
430
+ description: props.description !== undefined ? {
431
+ equals: props.description
432
+ } : undefined,
433
+ cik: props.cik !== undefined ? {
434
+ equals: props.cik
435
+ } : undefined,
436
+ exchange: props.exchange !== undefined ? {
437
+ equals: props.exchange
438
+ } : undefined,
439
+ currency: props.currency !== undefined ? {
440
+ equals: props.currency
441
+ } : undefined,
442
+ country: props.country !== undefined ? {
443
+ equals: props.country
444
+ } : undefined,
445
+ sector: props.sector !== undefined ? {
446
+ equals: props.sector
447
+ } : undefined,
448
+ industry: props.industry !== undefined ? {
449
+ equals: props.industry
450
+ } : undefined,
451
+ address: props.address !== undefined ? {
452
+ equals: props.address
453
+ } : undefined,
454
+ officialSite: props.officialSite !== undefined ? {
455
+ equals: props.officialSite
456
+ } : undefined,
457
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
458
+ equals: props.fiscalYearEnd
459
+ } : undefined,
460
+ latestQuarter: props.latestQuarter !== undefined ? {
461
+ equals: props.latestQuarter
462
+ } : undefined,
463
+ marketCapitalization: props.marketCapitalization !== undefined ? {
464
+ equals: props.marketCapitalization
465
+ } : undefined,
466
+ ebitda: props.ebitda !== undefined ? {
467
+ equals: props.ebitda
468
+ } : undefined,
469
+ peRatio: props.peRatio !== undefined ? {
470
+ equals: props.peRatio
471
+ } : undefined,
472
+ pegRatio: props.pegRatio !== undefined ? {
473
+ equals: props.pegRatio
474
+ } : undefined,
475
+ bookValue: props.bookValue !== undefined ? {
476
+ equals: props.bookValue
477
+ } : undefined,
478
+ dividendPerShare: props.dividendPerShare !== undefined ? {
479
+ equals: props.dividendPerShare
480
+ } : undefined,
481
+ dividendYield: props.dividendYield !== undefined ? {
482
+ equals: props.dividendYield
483
+ } : undefined,
484
+ eps: props.eps !== undefined ? {
485
+ equals: props.eps
486
+ } : undefined,
487
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
488
+ equals: props.revenuePerShareTTM
489
+ } : undefined,
490
+ profitMargin: props.profitMargin !== undefined ? {
491
+ equals: props.profitMargin
492
+ } : undefined,
493
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
494
+ equals: props.operatingMarginTTM
495
+ } : undefined,
496
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
497
+ equals: props.returnOnAssetsTTM
498
+ } : undefined,
499
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
500
+ equals: props.returnOnEquityTTM
501
+ } : undefined,
502
+ revenueTTM: props.revenueTTM !== undefined ? {
503
+ equals: props.revenueTTM
504
+ } : undefined,
505
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
506
+ equals: props.grossProfitTTM
507
+ } : undefined,
508
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
509
+ equals: props.dilutedEPSTTM
510
+ } : undefined,
511
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
512
+ equals: props.quarterlyEarningsGrowthYOY
513
+ } : undefined,
514
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
515
+ equals: props.quarterlyRevenueGrowthYOY
516
+ } : undefined,
517
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
518
+ equals: props.analystTargetPrice
519
+ } : undefined,
520
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
521
+ equals: props.analystRatingStrongBuy
522
+ } : undefined,
523
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
524
+ equals: props.analystRatingBuy
525
+ } : undefined,
526
+ analystRatingHold: props.analystRatingHold !== undefined ? {
527
+ equals: props.analystRatingHold
528
+ } : undefined,
529
+ analystRatingSell: props.analystRatingSell !== undefined ? {
530
+ equals: props.analystRatingSell
531
+ } : undefined,
532
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
533
+ equals: props.analystRatingStrongSell
534
+ } : undefined,
535
+ trailingPE: props.trailingPE !== undefined ? {
536
+ equals: props.trailingPE
537
+ } : undefined,
538
+ forwardPE: props.forwardPE !== undefined ? {
539
+ equals: props.forwardPE
540
+ } : undefined,
541
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
542
+ equals: props.priceToSalesRatioTTM
543
+ } : undefined,
544
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
545
+ equals: props.priceToBookRatio
546
+ } : undefined,
547
+ evToRevenue: props.evToRevenue !== undefined ? {
548
+ equals: props.evToRevenue
549
+ } : undefined,
550
+ evToEbitda: props.evToEbitda !== undefined ? {
551
+ equals: props.evToEbitda
552
+ } : undefined,
553
+ beta: props.beta !== undefined ? {
554
+ equals: props.beta
555
+ } : undefined,
556
+ week52High: props.week52High !== undefined ? {
557
+ equals: props.week52High
558
+ } : undefined,
559
+ week52Low: props.week52Low !== undefined ? {
560
+ equals: props.week52Low
561
+ } : undefined,
562
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
563
+ equals: props.day50MovingAverage
564
+ } : undefined,
565
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
566
+ equals: props.day200MovingAverage
567
+ } : undefined,
568
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
569
+ equals: props.sharesOutstanding
570
+ } : undefined,
571
+ dividendDate: props.dividendDate !== undefined ? {
572
+ equals: props.dividendDate
573
+ } : undefined,
574
+ exDividendDate: props.exDividendDate !== undefined ? {
575
+ equals: props.exDividendDate
576
+ } : undefined,
577
+ createdAt: props.createdAt !== undefined ? {
578
+ equals: props.createdAt
579
+ } : undefined,
580
+ updatedAt: props.updatedAt !== undefined ? {
581
+ equals: props.updatedAt
582
+ } : undefined,
583
+ },
584
+ data: {
585
+ id: props.id !== undefined ? {
586
+ set: props.id
587
+ } : undefined,
588
+ symbol: props.symbol !== undefined ? {
589
+ set: props.symbol
590
+ } : undefined,
591
+ name: props.name !== undefined ? {
592
+ set: props.name
593
+ } : undefined,
594
+ type: props.type !== undefined ? {
595
+ set: props.type
596
+ } : undefined,
597
+ logoUrl: props.logoUrl !== undefined ? {
598
+ set: props.logoUrl
599
+ } : undefined,
600
+ description: props.description !== undefined ? {
601
+ set: props.description
602
+ } : undefined,
603
+ cik: props.cik !== undefined ? {
604
+ set: props.cik
605
+ } : undefined,
606
+ exchange: props.exchange !== undefined ? {
607
+ set: props.exchange
608
+ } : undefined,
609
+ currency: props.currency !== undefined ? {
610
+ set: props.currency
611
+ } : undefined,
612
+ country: props.country !== undefined ? {
613
+ set: props.country
614
+ } : undefined,
615
+ sector: props.sector !== undefined ? {
616
+ set: props.sector
617
+ } : undefined,
618
+ industry: props.industry !== undefined ? {
619
+ set: props.industry
620
+ } : undefined,
621
+ address: props.address !== undefined ? {
622
+ set: props.address
623
+ } : undefined,
624
+ officialSite: props.officialSite !== undefined ? {
625
+ set: props.officialSite
626
+ } : undefined,
627
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
628
+ set: props.fiscalYearEnd
629
+ } : undefined,
630
+ latestQuarter: props.latestQuarter !== undefined ? {
631
+ set: props.latestQuarter
632
+ } : undefined,
633
+ marketCapitalization: props.marketCapitalization !== undefined ? {
634
+ set: props.marketCapitalization
635
+ } : undefined,
636
+ ebitda: props.ebitda !== undefined ? {
637
+ set: props.ebitda
638
+ } : undefined,
639
+ peRatio: props.peRatio !== undefined ? {
640
+ set: props.peRatio
641
+ } : undefined,
642
+ pegRatio: props.pegRatio !== undefined ? {
643
+ set: props.pegRatio
644
+ } : undefined,
645
+ bookValue: props.bookValue !== undefined ? {
646
+ set: props.bookValue
647
+ } : undefined,
648
+ dividendPerShare: props.dividendPerShare !== undefined ? {
649
+ set: props.dividendPerShare
650
+ } : undefined,
651
+ dividendYield: props.dividendYield !== undefined ? {
652
+ set: props.dividendYield
653
+ } : undefined,
654
+ eps: props.eps !== undefined ? {
655
+ set: props.eps
656
+ } : undefined,
657
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
658
+ set: props.revenuePerShareTTM
659
+ } : undefined,
660
+ profitMargin: props.profitMargin !== undefined ? {
661
+ set: props.profitMargin
662
+ } : undefined,
663
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
664
+ set: props.operatingMarginTTM
665
+ } : undefined,
666
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
667
+ set: props.returnOnAssetsTTM
668
+ } : undefined,
669
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
670
+ set: props.returnOnEquityTTM
671
+ } : undefined,
672
+ revenueTTM: props.revenueTTM !== undefined ? {
673
+ set: props.revenueTTM
674
+ } : undefined,
675
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
676
+ set: props.grossProfitTTM
677
+ } : undefined,
678
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
679
+ set: props.dilutedEPSTTM
680
+ } : undefined,
681
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
682
+ set: props.quarterlyEarningsGrowthYOY
683
+ } : undefined,
684
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
685
+ set: props.quarterlyRevenueGrowthYOY
686
+ } : undefined,
687
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
688
+ set: props.analystTargetPrice
689
+ } : undefined,
690
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
691
+ set: props.analystRatingStrongBuy
692
+ } : undefined,
693
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
694
+ set: props.analystRatingBuy
695
+ } : undefined,
696
+ analystRatingHold: props.analystRatingHold !== undefined ? {
697
+ set: props.analystRatingHold
698
+ } : undefined,
699
+ analystRatingSell: props.analystRatingSell !== undefined ? {
700
+ set: props.analystRatingSell
701
+ } : undefined,
702
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
703
+ set: props.analystRatingStrongSell
704
+ } : undefined,
705
+ trailingPE: props.trailingPE !== undefined ? {
706
+ set: props.trailingPE
707
+ } : undefined,
708
+ forwardPE: props.forwardPE !== undefined ? {
709
+ set: props.forwardPE
710
+ } : undefined,
711
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
712
+ set: props.priceToSalesRatioTTM
713
+ } : undefined,
714
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
715
+ set: props.priceToBookRatio
716
+ } : undefined,
717
+ evToRevenue: props.evToRevenue !== undefined ? {
718
+ set: props.evToRevenue
719
+ } : undefined,
720
+ evToEbitda: props.evToEbitda !== undefined ? {
721
+ set: props.evToEbitda
722
+ } : undefined,
723
+ beta: props.beta !== undefined ? {
724
+ set: props.beta
725
+ } : undefined,
726
+ week52High: props.week52High !== undefined ? {
727
+ set: props.week52High
728
+ } : undefined,
729
+ week52Low: props.week52Low !== undefined ? {
730
+ set: props.week52Low
731
+ } : undefined,
732
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
733
+ set: props.day50MovingAverage
734
+ } : undefined,
735
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
736
+ set: props.day200MovingAverage
737
+ } : undefined,
738
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
739
+ set: props.sharesOutstanding
740
+ } : undefined,
741
+ dividendDate: props.dividendDate !== undefined ? {
742
+ set: props.dividendDate
743
+ } : undefined,
744
+ exDividendDate: props.exDividendDate !== undefined ? {
745
+ set: props.exDividendDate
746
+ } : undefined,
747
+ askPrice: props.askPrice !== undefined ? {
748
+ set: props.askPrice
749
+ } : undefined,
750
+ bidPrice: props.bidPrice !== undefined ? {
751
+ set: props.bidPrice
752
+ } : undefined,
753
+ createdAt: props.createdAt !== undefined ? {
754
+ set: props.createdAt
755
+ } : undefined,
756
+ updatedAt: props.updatedAt !== undefined ? {
757
+ set: props.updatedAt
758
+ } : undefined,
759
+ newsMentions: props.newsMentions ?
760
+ Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && ('id' in item || 'symbol' in item) && Object.keys(item).length === 1) ? {
761
+ connect: props.newsMentions.map((item) => ({
762
+ id: item.id
763
+ }))
764
+ } : { upsert: props.newsMentions.map((item) => ({
765
+ where: {
766
+ id: item.id !== undefined ? item.id : undefined,
767
+ url: item.url !== undefined ? item.url : undefined,
768
+ assetId: item.assetId !== undefined ? {
769
+ equals: item.assetId
770
+ } : undefined,
771
+ newsArticleId: item.newsArticleId !== undefined ? {
772
+ equals: item.newsArticleId
773
+ } : undefined,
774
+ },
775
+ update: {
776
+ id: item.id !== undefined ? {
777
+ set: item.id
778
+ } : undefined,
779
+ url: item.url !== undefined ? {
780
+ set: item.url
781
+ } : undefined,
782
+ relevancyScore: item.relevancyScore !== undefined ? {
783
+ set: item.relevancyScore
784
+ } : undefined,
785
+ sentimentScore: item.sentimentScore !== undefined ? {
786
+ set: item.sentimentScore
787
+ } : undefined,
788
+ sentimentLabel: item.sentimentLabel !== undefined ? {
789
+ set: item.sentimentLabel
790
+ } : undefined,
791
+ news: item.news ?
792
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
793
+ ? {
794
+ connect: {
795
+ id: item.news.id
796
+ }
797
+ } : { upsert: {
176
798
  where: {
177
- id: item.news.id !== undefined ? item.news.id : undefined,
178
- url: item.news.url !== undefined ? item.news.url : undefined,
799
+ id: item.news.id !== undefined ? {
800
+ equals: item.news.id
801
+ } : undefined,
179
802
  title: item.news.title !== undefined ? {
180
803
  equals: item.news.title
181
804
  } : undefined,
805
+ url: item.news.url !== undefined ? {
806
+ equals: item.news.url
807
+ } : undefined,
808
+ },
809
+ update: {
810
+ id: item.news.id !== undefined ? {
811
+ set: item.news.id
812
+ } : undefined,
813
+ title: item.news.title !== undefined ? {
814
+ set: item.news.title
815
+ } : undefined,
816
+ content: item.news.content !== undefined ? {
817
+ set: item.news.content
818
+ } : undefined,
819
+ source: item.news.source !== undefined ? {
820
+ set: item.news.source
821
+ } : undefined,
822
+ sourceDomain: item.news.sourceDomain !== undefined ? {
823
+ set: item.news.sourceDomain
824
+ } : undefined,
825
+ url: item.news.url !== undefined ? {
826
+ set: item.news.url
827
+ } : undefined,
828
+ sentiment: item.news.sentiment !== undefined ? {
829
+ set: item.news.sentiment
830
+ } : undefined,
831
+ authors: item.news.authors !== undefined ? {
832
+ set: item.news.authors
833
+ } : undefined,
834
+ summary: item.news.summary !== undefined ? {
835
+ set: item.news.summary
836
+ } : undefined,
837
+ bannerImage: item.news.bannerImage !== undefined ? {
838
+ set: item.news.bannerImage
839
+ } : undefined,
840
+ timePublished: item.news.timePublished !== undefined ? {
841
+ set: item.news.timePublished
842
+ } : undefined,
843
+ category: item.news.category !== undefined ? {
844
+ set: item.news.category
845
+ } : undefined,
846
+ topics: item.news.topics !== undefined ? {
847
+ set: item.news.topics
848
+ } : undefined,
849
+ logo: item.news.logo !== undefined ? {
850
+ set: item.news.logo
851
+ } : undefined,
182
852
  },
183
853
  create: {
184
854
  title: item.news.title !== undefined ? item.news.title : undefined,
@@ -201,617 +871,1227 @@ exports.Asset = {
201
871
  },
202
872
  }
203
873
  } : undefined,
204
- },
205
- }))
206
- } : undefined,
207
- },
208
- };
209
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
210
- try {
211
- const response = await client.mutate({ mutation: CREATE_ONE_ASSET, variables: filteredVariables });
212
- if (response.errors && response.errors.length > 0)
213
- throw new Error(response.errors[0].message);
214
- if (response && response.data && response.data.createOneAsset) {
215
- return response.data.createOneAsset;
874
+ },
875
+ create: {
876
+ url: item.url !== undefined ? item.url : undefined,
877
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
878
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
879
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
880
+ news: item.news ?
881
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
882
+ ? { connect: {
883
+ id: item.news.id
884
+ }
885
+ }
886
+ : { connectOrCreate: {
887
+ where: {
888
+ id: item.news.id !== undefined ? item.news.id : undefined,
889
+ url: item.news.url !== undefined ? item.news.url : undefined,
890
+ title: item.news.title !== undefined ? {
891
+ equals: item.news.title
892
+ } : undefined,
893
+ },
894
+ create: {
895
+ title: item.news.title !== undefined ? item.news.title : undefined,
896
+ content: item.news.content !== undefined ? item.news.content : undefined,
897
+ source: item.news.source !== undefined ? item.news.source : undefined,
898
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
899
+ url: item.news.url !== undefined ? item.news.url : undefined,
900
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
901
+ authors: item.news.authors !== undefined ? {
902
+ set: item.news.authors
903
+ } : undefined,
904
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
905
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
906
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
907
+ category: item.news.category !== undefined ? item.news.category : undefined,
908
+ topics: item.news.topics !== undefined ? {
909
+ set: item.news.topics
910
+ } : undefined,
911
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
912
+ },
913
+ }
914
+ } : undefined,
915
+ },
916
+ }))
917
+ } : undefined,
918
+ },
919
+ };
920
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
921
+ const response = await client.mutate({
922
+ mutation: UPDATE_ONE_ASSET,
923
+ variables: filteredVariables,
924
+ // Don't cache mutations, but ensure we're using the freshest context
925
+ fetchPolicy: 'no-cache'
926
+ });
927
+ if (response.errors && response.errors.length > 0)
928
+ throw new Error(response.errors[0].message);
929
+ if (response && response.data && response.data.updateOneAsset) {
930
+ return response.data.updateOneAsset;
931
+ }
932
+ else {
933
+ return null;
934
+ }
216
935
  }
217
- else {
218
- return null;
936
+ catch (error) {
937
+ lastError = error;
938
+ // Check if this is a database connection error that we should retry
939
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
940
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
941
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
942
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
943
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
944
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
945
+ retryCount++;
946
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
947
+ console.warn("Database connection error, retrying...");
948
+ await new Promise(resolve => setTimeout(resolve, delay));
949
+ continue;
950
+ }
951
+ // Log the error and rethrow
952
+ console.error("Database error occurred:", error);
953
+ throw error;
219
954
  }
220
955
  }
221
- catch (error) {
222
- console.error('Error in createOneAsset:', error);
223
- throw error;
224
- }
956
+ // If we exhausted retries, throw the last error
957
+ throw lastError;
225
958
  },
226
959
  /**
227
- * Create multiple Asset records.
228
- * @param props - Array of Asset objects for the new records.
960
+ * Upsert a single Asset record.
961
+ * Enhanced with connection resilience against Prisma connection errors.
962
+ * @param props - Properties to update.
229
963
  * @param globalClient - Apollo Client instance.
230
- * @returns The count of created records or null.
964
+ * @returns The updated Asset or null.
231
965
  */
232
- async createMany(props, globalClient) {
233
- const [modules, client] = await Promise.all([
234
- (0, client_1.getApolloModules)(),
235
- globalClient
236
- ? Promise.resolve(globalClient)
237
- : client_1.client
238
- ]);
239
- const { gql, ApolloError } = modules;
240
- const CREATE_MANY_ASSET = gql `
241
- mutation createManyAsset($data: [AssetCreateManyInput!]!) {
242
- createManyAsset(data: $data) {
243
- count
244
- }
245
- }`;
246
- const variables = {
247
- data: props.map(prop => ({
248
- symbol: prop.symbol !== undefined ? prop.symbol : undefined,
249
- name: prop.name !== undefined ? prop.name : undefined,
250
- type: prop.type !== undefined ? prop.type : undefined,
251
- logoUrl: prop.logoUrl !== undefined ? prop.logoUrl : undefined,
252
- description: prop.description !== undefined ? prop.description : undefined,
253
- cik: prop.cik !== undefined ? prop.cik : undefined,
254
- exchange: prop.exchange !== undefined ? prop.exchange : undefined,
255
- currency: prop.currency !== undefined ? prop.currency : undefined,
256
- country: prop.country !== undefined ? prop.country : undefined,
257
- sector: prop.sector !== undefined ? prop.sector : undefined,
258
- industry: prop.industry !== undefined ? prop.industry : undefined,
259
- address: prop.address !== undefined ? prop.address : undefined,
260
- officialSite: prop.officialSite !== undefined ? prop.officialSite : undefined,
261
- fiscalYearEnd: prop.fiscalYearEnd !== undefined ? prop.fiscalYearEnd : undefined,
262
- latestQuarter: prop.latestQuarter !== undefined ? prop.latestQuarter : undefined,
263
- marketCapitalization: prop.marketCapitalization !== undefined ? prop.marketCapitalization : undefined,
264
- ebitda: prop.ebitda !== undefined ? prop.ebitda : undefined,
265
- peRatio: prop.peRatio !== undefined ? prop.peRatio : undefined,
266
- pegRatio: prop.pegRatio !== undefined ? prop.pegRatio : undefined,
267
- bookValue: prop.bookValue !== undefined ? prop.bookValue : undefined,
268
- dividendPerShare: prop.dividendPerShare !== undefined ? prop.dividendPerShare : undefined,
269
- dividendYield: prop.dividendYield !== undefined ? prop.dividendYield : undefined,
270
- eps: prop.eps !== undefined ? prop.eps : undefined,
271
- revenuePerShareTTM: prop.revenuePerShareTTM !== undefined ? prop.revenuePerShareTTM : undefined,
272
- profitMargin: prop.profitMargin !== undefined ? prop.profitMargin : undefined,
273
- operatingMarginTTM: prop.operatingMarginTTM !== undefined ? prop.operatingMarginTTM : undefined,
274
- returnOnAssetsTTM: prop.returnOnAssetsTTM !== undefined ? prop.returnOnAssetsTTM : undefined,
275
- returnOnEquityTTM: prop.returnOnEquityTTM !== undefined ? prop.returnOnEquityTTM : undefined,
276
- revenueTTM: prop.revenueTTM !== undefined ? prop.revenueTTM : undefined,
277
- grossProfitTTM: prop.grossProfitTTM !== undefined ? prop.grossProfitTTM : undefined,
278
- dilutedEPSTTM: prop.dilutedEPSTTM !== undefined ? prop.dilutedEPSTTM : undefined,
279
- quarterlyEarningsGrowthYOY: prop.quarterlyEarningsGrowthYOY !== undefined ? prop.quarterlyEarningsGrowthYOY : undefined,
280
- quarterlyRevenueGrowthYOY: prop.quarterlyRevenueGrowthYOY !== undefined ? prop.quarterlyRevenueGrowthYOY : undefined,
281
- analystTargetPrice: prop.analystTargetPrice !== undefined ? prop.analystTargetPrice : undefined,
282
- analystRatingStrongBuy: prop.analystRatingStrongBuy !== undefined ? prop.analystRatingStrongBuy : undefined,
283
- analystRatingBuy: prop.analystRatingBuy !== undefined ? prop.analystRatingBuy : undefined,
284
- analystRatingHold: prop.analystRatingHold !== undefined ? prop.analystRatingHold : undefined,
285
- analystRatingSell: prop.analystRatingSell !== undefined ? prop.analystRatingSell : undefined,
286
- analystRatingStrongSell: prop.analystRatingStrongSell !== undefined ? prop.analystRatingStrongSell : undefined,
287
- trailingPE: prop.trailingPE !== undefined ? prop.trailingPE : undefined,
288
- forwardPE: prop.forwardPE !== undefined ? prop.forwardPE : undefined,
289
- priceToSalesRatioTTM: prop.priceToSalesRatioTTM !== undefined ? prop.priceToSalesRatioTTM : undefined,
290
- priceToBookRatio: prop.priceToBookRatio !== undefined ? prop.priceToBookRatio : undefined,
291
- evToRevenue: prop.evToRevenue !== undefined ? prop.evToRevenue : undefined,
292
- evToEbitda: prop.evToEbitda !== undefined ? prop.evToEbitda : undefined,
293
- beta: prop.beta !== undefined ? prop.beta : undefined,
294
- week52High: prop.week52High !== undefined ? prop.week52High : undefined,
295
- week52Low: prop.week52Low !== undefined ? prop.week52Low : undefined,
296
- day50MovingAverage: prop.day50MovingAverage !== undefined ? prop.day50MovingAverage : undefined,
297
- day200MovingAverage: prop.day200MovingAverage !== undefined ? prop.day200MovingAverage : undefined,
298
- sharesOutstanding: prop.sharesOutstanding !== undefined ? prop.sharesOutstanding : undefined,
299
- dividendDate: prop.dividendDate !== undefined ? prop.dividendDate : undefined,
300
- exDividendDate: prop.exDividendDate !== undefined ? prop.exDividendDate : undefined,
301
- askPrice: prop.askPrice !== undefined ? prop.askPrice : undefined,
302
- bidPrice: prop.bidPrice !== undefined ? prop.bidPrice : undefined,
303
- })),
304
- };
305
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
306
- try {
307
- const response = await client.mutate({ mutation: CREATE_MANY_ASSET, variables: filteredVariables });
308
- if (response.errors && response.errors.length > 0)
309
- throw new Error(response.errors[0].message);
310
- if (response && response.data && response.data.createManyAsset) {
311
- return response.data.createManyAsset;
966
+ async upsert(props, globalClient) {
967
+ var _a, _b, _c, _d, _e;
968
+ // Maximum number of retries for database connection issues
969
+ const MAX_RETRIES = 3;
970
+ let retryCount = 0;
971
+ let lastError = null;
972
+ // Retry loop to handle potential database connection issues
973
+ while (retryCount < MAX_RETRIES) {
974
+ try {
975
+ const [modules, client] = await Promise.all([
976
+ (0, client_1.getApolloModules)(),
977
+ globalClient
978
+ ? Promise.resolve(globalClient)
979
+ : client_1.client
980
+ ]);
981
+ const { gql, ApolloError } = modules;
982
+ const UPSERT_ONE_ASSET = gql `
983
+ mutation upsertOneAsset($where: AssetWhereUniqueInput!, $create: AssetCreateInput!, $update: AssetUpdateInput!) {
984
+ upsertOneAsset(where: $where, create: $create, update: $update) {
985
+ ${selectionSet}
312
986
  }
313
- else {
314
- return null;
987
+ }`;
988
+ const variables = {
989
+ where: {
990
+ id: props.id !== undefined ? props.id : undefined,
991
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
992
+ name: props.name !== undefined ? props.name : undefined,
993
+ type: props.type !== undefined ? {
994
+ equals: props.type
995
+ } : undefined,
996
+ logoUrl: props.logoUrl !== undefined ? {
997
+ equals: props.logoUrl
998
+ } : undefined,
999
+ description: props.description !== undefined ? {
1000
+ equals: props.description
1001
+ } : undefined,
1002
+ cik: props.cik !== undefined ? {
1003
+ equals: props.cik
1004
+ } : undefined,
1005
+ exchange: props.exchange !== undefined ? {
1006
+ equals: props.exchange
1007
+ } : undefined,
1008
+ currency: props.currency !== undefined ? {
1009
+ equals: props.currency
1010
+ } : undefined,
1011
+ country: props.country !== undefined ? {
1012
+ equals: props.country
1013
+ } : undefined,
1014
+ sector: props.sector !== undefined ? {
1015
+ equals: props.sector
1016
+ } : undefined,
1017
+ industry: props.industry !== undefined ? {
1018
+ equals: props.industry
1019
+ } : undefined,
1020
+ address: props.address !== undefined ? {
1021
+ equals: props.address
1022
+ } : undefined,
1023
+ officialSite: props.officialSite !== undefined ? {
1024
+ equals: props.officialSite
1025
+ } : undefined,
1026
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
1027
+ equals: props.fiscalYearEnd
1028
+ } : undefined,
1029
+ latestQuarter: props.latestQuarter !== undefined ? {
1030
+ equals: props.latestQuarter
1031
+ } : undefined,
1032
+ marketCapitalization: props.marketCapitalization !== undefined ? {
1033
+ equals: props.marketCapitalization
1034
+ } : undefined,
1035
+ ebitda: props.ebitda !== undefined ? {
1036
+ equals: props.ebitda
1037
+ } : undefined,
1038
+ peRatio: props.peRatio !== undefined ? {
1039
+ equals: props.peRatio
1040
+ } : undefined,
1041
+ pegRatio: props.pegRatio !== undefined ? {
1042
+ equals: props.pegRatio
1043
+ } : undefined,
1044
+ bookValue: props.bookValue !== undefined ? {
1045
+ equals: props.bookValue
1046
+ } : undefined,
1047
+ dividendPerShare: props.dividendPerShare !== undefined ? {
1048
+ equals: props.dividendPerShare
1049
+ } : undefined,
1050
+ dividendYield: props.dividendYield !== undefined ? {
1051
+ equals: props.dividendYield
1052
+ } : undefined,
1053
+ eps: props.eps !== undefined ? {
1054
+ equals: props.eps
1055
+ } : undefined,
1056
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
1057
+ equals: props.revenuePerShareTTM
1058
+ } : undefined,
1059
+ profitMargin: props.profitMargin !== undefined ? {
1060
+ equals: props.profitMargin
1061
+ } : undefined,
1062
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
1063
+ equals: props.operatingMarginTTM
1064
+ } : undefined,
1065
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
1066
+ equals: props.returnOnAssetsTTM
1067
+ } : undefined,
1068
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
1069
+ equals: props.returnOnEquityTTM
1070
+ } : undefined,
1071
+ revenueTTM: props.revenueTTM !== undefined ? {
1072
+ equals: props.revenueTTM
1073
+ } : undefined,
1074
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
1075
+ equals: props.grossProfitTTM
1076
+ } : undefined,
1077
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
1078
+ equals: props.dilutedEPSTTM
1079
+ } : undefined,
1080
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
1081
+ equals: props.quarterlyEarningsGrowthYOY
1082
+ } : undefined,
1083
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
1084
+ equals: props.quarterlyRevenueGrowthYOY
1085
+ } : undefined,
1086
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
1087
+ equals: props.analystTargetPrice
1088
+ } : undefined,
1089
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
1090
+ equals: props.analystRatingStrongBuy
1091
+ } : undefined,
1092
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
1093
+ equals: props.analystRatingBuy
1094
+ } : undefined,
1095
+ analystRatingHold: props.analystRatingHold !== undefined ? {
1096
+ equals: props.analystRatingHold
1097
+ } : undefined,
1098
+ analystRatingSell: props.analystRatingSell !== undefined ? {
1099
+ equals: props.analystRatingSell
1100
+ } : undefined,
1101
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
1102
+ equals: props.analystRatingStrongSell
1103
+ } : undefined,
1104
+ trailingPE: props.trailingPE !== undefined ? {
1105
+ equals: props.trailingPE
1106
+ } : undefined,
1107
+ forwardPE: props.forwardPE !== undefined ? {
1108
+ equals: props.forwardPE
1109
+ } : undefined,
1110
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
1111
+ equals: props.priceToSalesRatioTTM
1112
+ } : undefined,
1113
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
1114
+ equals: props.priceToBookRatio
1115
+ } : undefined,
1116
+ evToRevenue: props.evToRevenue !== undefined ? {
1117
+ equals: props.evToRevenue
1118
+ } : undefined,
1119
+ evToEbitda: props.evToEbitda !== undefined ? {
1120
+ equals: props.evToEbitda
1121
+ } : undefined,
1122
+ beta: props.beta !== undefined ? {
1123
+ equals: props.beta
1124
+ } : undefined,
1125
+ week52High: props.week52High !== undefined ? {
1126
+ equals: props.week52High
1127
+ } : undefined,
1128
+ week52Low: props.week52Low !== undefined ? {
1129
+ equals: props.week52Low
1130
+ } : undefined,
1131
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
1132
+ equals: props.day50MovingAverage
1133
+ } : undefined,
1134
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
1135
+ equals: props.day200MovingAverage
1136
+ } : undefined,
1137
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
1138
+ equals: props.sharesOutstanding
1139
+ } : undefined,
1140
+ dividendDate: props.dividendDate !== undefined ? {
1141
+ equals: props.dividendDate
1142
+ } : undefined,
1143
+ exDividendDate: props.exDividendDate !== undefined ? {
1144
+ equals: props.exDividendDate
1145
+ } : undefined,
1146
+ createdAt: props.createdAt !== undefined ? {
1147
+ equals: props.createdAt
1148
+ } : undefined,
1149
+ updatedAt: props.updatedAt !== undefined ? {
1150
+ equals: props.updatedAt
1151
+ } : undefined,
1152
+ },
1153
+ create: {
1154
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
1155
+ name: props.name !== undefined ? props.name : undefined,
1156
+ type: props.type !== undefined ? props.type : undefined,
1157
+ logoUrl: props.logoUrl !== undefined ? props.logoUrl : undefined,
1158
+ description: props.description !== undefined ? props.description : undefined,
1159
+ cik: props.cik !== undefined ? props.cik : undefined,
1160
+ exchange: props.exchange !== undefined ? props.exchange : undefined,
1161
+ currency: props.currency !== undefined ? props.currency : undefined,
1162
+ country: props.country !== undefined ? props.country : undefined,
1163
+ sector: props.sector !== undefined ? props.sector : undefined,
1164
+ industry: props.industry !== undefined ? props.industry : undefined,
1165
+ address: props.address !== undefined ? props.address : undefined,
1166
+ officialSite: props.officialSite !== undefined ? props.officialSite : undefined,
1167
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? props.fiscalYearEnd : undefined,
1168
+ latestQuarter: props.latestQuarter !== undefined ? props.latestQuarter : undefined,
1169
+ marketCapitalization: props.marketCapitalization !== undefined ? props.marketCapitalization : undefined,
1170
+ ebitda: props.ebitda !== undefined ? props.ebitda : undefined,
1171
+ peRatio: props.peRatio !== undefined ? props.peRatio : undefined,
1172
+ pegRatio: props.pegRatio !== undefined ? props.pegRatio : undefined,
1173
+ bookValue: props.bookValue !== undefined ? props.bookValue : undefined,
1174
+ dividendPerShare: props.dividendPerShare !== undefined ? props.dividendPerShare : undefined,
1175
+ dividendYield: props.dividendYield !== undefined ? props.dividendYield : undefined,
1176
+ eps: props.eps !== undefined ? props.eps : undefined,
1177
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? props.revenuePerShareTTM : undefined,
1178
+ profitMargin: props.profitMargin !== undefined ? props.profitMargin : undefined,
1179
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? props.operatingMarginTTM : undefined,
1180
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? props.returnOnAssetsTTM : undefined,
1181
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? props.returnOnEquityTTM : undefined,
1182
+ revenueTTM: props.revenueTTM !== undefined ? props.revenueTTM : undefined,
1183
+ grossProfitTTM: props.grossProfitTTM !== undefined ? props.grossProfitTTM : undefined,
1184
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? props.dilutedEPSTTM : undefined,
1185
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? props.quarterlyEarningsGrowthYOY : undefined,
1186
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? props.quarterlyRevenueGrowthYOY : undefined,
1187
+ analystTargetPrice: props.analystTargetPrice !== undefined ? props.analystTargetPrice : undefined,
1188
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? props.analystRatingStrongBuy : undefined,
1189
+ analystRatingBuy: props.analystRatingBuy !== undefined ? props.analystRatingBuy : undefined,
1190
+ analystRatingHold: props.analystRatingHold !== undefined ? props.analystRatingHold : undefined,
1191
+ analystRatingSell: props.analystRatingSell !== undefined ? props.analystRatingSell : undefined,
1192
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? props.analystRatingStrongSell : undefined,
1193
+ trailingPE: props.trailingPE !== undefined ? props.trailingPE : undefined,
1194
+ forwardPE: props.forwardPE !== undefined ? props.forwardPE : undefined,
1195
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? props.priceToSalesRatioTTM : undefined,
1196
+ priceToBookRatio: props.priceToBookRatio !== undefined ? props.priceToBookRatio : undefined,
1197
+ evToRevenue: props.evToRevenue !== undefined ? props.evToRevenue : undefined,
1198
+ evToEbitda: props.evToEbitda !== undefined ? props.evToEbitda : undefined,
1199
+ beta: props.beta !== undefined ? props.beta : undefined,
1200
+ week52High: props.week52High !== undefined ? props.week52High : undefined,
1201
+ week52Low: props.week52Low !== undefined ? props.week52Low : undefined,
1202
+ day50MovingAverage: props.day50MovingAverage !== undefined ? props.day50MovingAverage : undefined,
1203
+ day200MovingAverage: props.day200MovingAverage !== undefined ? props.day200MovingAverage : undefined,
1204
+ sharesOutstanding: props.sharesOutstanding !== undefined ? props.sharesOutstanding : undefined,
1205
+ dividendDate: props.dividendDate !== undefined ? props.dividendDate : undefined,
1206
+ exDividendDate: props.exDividendDate !== undefined ? props.exDividendDate : undefined,
1207
+ askPrice: props.askPrice !== undefined ? props.askPrice : undefined,
1208
+ bidPrice: props.bidPrice !== undefined ? props.bidPrice : undefined,
1209
+ newsMentions: props.newsMentions ?
1210
+ Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && 'id' in item && Object.keys(item).length === 1) ? {
1211
+ connect: props.newsMentions.map((item) => ({
1212
+ id: item.id
1213
+ }))
1214
+ }
1215
+ : { connectOrCreate: props.newsMentions.map((item) => ({
1216
+ where: {
1217
+ id: item.id !== undefined ? item.id : undefined,
1218
+ url: item.url !== undefined ? item.url : undefined,
1219
+ newsArticleId: item.newsArticleId !== undefined ? {
1220
+ equals: item.newsArticleId
1221
+ } : undefined,
1222
+ },
1223
+ create: {
1224
+ url: item.url !== undefined ? item.url : undefined,
1225
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
1226
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
1227
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
1228
+ news: item.news ?
1229
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
1230
+ ? { connect: {
1231
+ id: item.news.id
1232
+ }
1233
+ }
1234
+ : { connectOrCreate: {
1235
+ where: {
1236
+ id: item.news.id !== undefined ? item.news.id : undefined,
1237
+ url: item.news.url !== undefined ? item.news.url : undefined,
1238
+ title: item.news.title !== undefined ? {
1239
+ equals: item.news.title
1240
+ } : undefined,
1241
+ },
1242
+ create: {
1243
+ title: item.news.title !== undefined ? item.news.title : undefined,
1244
+ content: item.news.content !== undefined ? item.news.content : undefined,
1245
+ source: item.news.source !== undefined ? item.news.source : undefined,
1246
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1247
+ url: item.news.url !== undefined ? item.news.url : undefined,
1248
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1249
+ authors: item.news.authors !== undefined ? {
1250
+ set: item.news.authors
1251
+ } : undefined,
1252
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
1253
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1254
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1255
+ category: item.news.category !== undefined ? item.news.category : undefined,
1256
+ topics: item.news.topics !== undefined ? {
1257
+ set: item.news.topics
1258
+ } : undefined,
1259
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
1260
+ },
1261
+ }
1262
+ } : undefined,
1263
+ },
1264
+ }))
1265
+ } : undefined,
1266
+ },
1267
+ update: {
1268
+ symbol: props.symbol !== undefined ? {
1269
+ set: props.symbol
1270
+ } : undefined,
1271
+ name: props.name !== undefined ? {
1272
+ set: props.name
1273
+ } : undefined,
1274
+ type: props.type !== undefined ? {
1275
+ set: props.type
1276
+ } : undefined,
1277
+ logoUrl: props.logoUrl !== undefined ? {
1278
+ set: props.logoUrl
1279
+ } : undefined,
1280
+ description: props.description !== undefined ? {
1281
+ set: props.description
1282
+ } : undefined,
1283
+ cik: props.cik !== undefined ? {
1284
+ set: props.cik
1285
+ } : undefined,
1286
+ exchange: props.exchange !== undefined ? {
1287
+ set: props.exchange
1288
+ } : undefined,
1289
+ currency: props.currency !== undefined ? {
1290
+ set: props.currency
1291
+ } : undefined,
1292
+ country: props.country !== undefined ? {
1293
+ set: props.country
1294
+ } : undefined,
1295
+ sector: props.sector !== undefined ? {
1296
+ set: props.sector
1297
+ } : undefined,
1298
+ industry: props.industry !== undefined ? {
1299
+ set: props.industry
1300
+ } : undefined,
1301
+ address: props.address !== undefined ? {
1302
+ set: props.address
1303
+ } : undefined,
1304
+ officialSite: props.officialSite !== undefined ? {
1305
+ set: props.officialSite
1306
+ } : undefined,
1307
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
1308
+ set: props.fiscalYearEnd
1309
+ } : undefined,
1310
+ latestQuarter: props.latestQuarter !== undefined ? {
1311
+ set: props.latestQuarter
1312
+ } : undefined,
1313
+ marketCapitalization: props.marketCapitalization !== undefined ? {
1314
+ set: props.marketCapitalization
1315
+ } : undefined,
1316
+ ebitda: props.ebitda !== undefined ? {
1317
+ set: props.ebitda
1318
+ } : undefined,
1319
+ peRatio: props.peRatio !== undefined ? {
1320
+ set: props.peRatio
1321
+ } : undefined,
1322
+ pegRatio: props.pegRatio !== undefined ? {
1323
+ set: props.pegRatio
1324
+ } : undefined,
1325
+ bookValue: props.bookValue !== undefined ? {
1326
+ set: props.bookValue
1327
+ } : undefined,
1328
+ dividendPerShare: props.dividendPerShare !== undefined ? {
1329
+ set: props.dividendPerShare
1330
+ } : undefined,
1331
+ dividendYield: props.dividendYield !== undefined ? {
1332
+ set: props.dividendYield
1333
+ } : undefined,
1334
+ eps: props.eps !== undefined ? {
1335
+ set: props.eps
1336
+ } : undefined,
1337
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
1338
+ set: props.revenuePerShareTTM
1339
+ } : undefined,
1340
+ profitMargin: props.profitMargin !== undefined ? {
1341
+ set: props.profitMargin
1342
+ } : undefined,
1343
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
1344
+ set: props.operatingMarginTTM
1345
+ } : undefined,
1346
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
1347
+ set: props.returnOnAssetsTTM
1348
+ } : undefined,
1349
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
1350
+ set: props.returnOnEquityTTM
1351
+ } : undefined,
1352
+ revenueTTM: props.revenueTTM !== undefined ? {
1353
+ set: props.revenueTTM
1354
+ } : undefined,
1355
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
1356
+ set: props.grossProfitTTM
1357
+ } : undefined,
1358
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
1359
+ set: props.dilutedEPSTTM
1360
+ } : undefined,
1361
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
1362
+ set: props.quarterlyEarningsGrowthYOY
1363
+ } : undefined,
1364
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
1365
+ set: props.quarterlyRevenueGrowthYOY
1366
+ } : undefined,
1367
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
1368
+ set: props.analystTargetPrice
1369
+ } : undefined,
1370
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
1371
+ set: props.analystRatingStrongBuy
1372
+ } : undefined,
1373
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
1374
+ set: props.analystRatingBuy
1375
+ } : undefined,
1376
+ analystRatingHold: props.analystRatingHold !== undefined ? {
1377
+ set: props.analystRatingHold
1378
+ } : undefined,
1379
+ analystRatingSell: props.analystRatingSell !== undefined ? {
1380
+ set: props.analystRatingSell
1381
+ } : undefined,
1382
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
1383
+ set: props.analystRatingStrongSell
1384
+ } : undefined,
1385
+ trailingPE: props.trailingPE !== undefined ? {
1386
+ set: props.trailingPE
1387
+ } : undefined,
1388
+ forwardPE: props.forwardPE !== undefined ? {
1389
+ set: props.forwardPE
1390
+ } : undefined,
1391
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
1392
+ set: props.priceToSalesRatioTTM
1393
+ } : undefined,
1394
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
1395
+ set: props.priceToBookRatio
1396
+ } : undefined,
1397
+ evToRevenue: props.evToRevenue !== undefined ? {
1398
+ set: props.evToRevenue
1399
+ } : undefined,
1400
+ evToEbitda: props.evToEbitda !== undefined ? {
1401
+ set: props.evToEbitda
1402
+ } : undefined,
1403
+ beta: props.beta !== undefined ? {
1404
+ set: props.beta
1405
+ } : undefined,
1406
+ week52High: props.week52High !== undefined ? {
1407
+ set: props.week52High
1408
+ } : undefined,
1409
+ week52Low: props.week52Low !== undefined ? {
1410
+ set: props.week52Low
1411
+ } : undefined,
1412
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
1413
+ set: props.day50MovingAverage
1414
+ } : undefined,
1415
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
1416
+ set: props.day200MovingAverage
1417
+ } : undefined,
1418
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
1419
+ set: props.sharesOutstanding
1420
+ } : undefined,
1421
+ dividendDate: props.dividendDate !== undefined ? {
1422
+ set: props.dividendDate
1423
+ } : undefined,
1424
+ exDividendDate: props.exDividendDate !== undefined ? {
1425
+ set: props.exDividendDate
1426
+ } : undefined,
1427
+ askPrice: props.askPrice !== undefined ? {
1428
+ set: props.askPrice
1429
+ } : undefined,
1430
+ bidPrice: props.bidPrice !== undefined ? {
1431
+ set: props.bidPrice
1432
+ } : undefined,
1433
+ newsMentions: props.newsMentions ?
1434
+ Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && ('id' in item || 'symbol' in item) && Object.keys(item).length === 1) ? {
1435
+ connect: props.newsMentions.map((item) => ({
1436
+ id: item.id
1437
+ }))
1438
+ } : { upsert: props.newsMentions.map((item) => ({
1439
+ where: {
1440
+ id: item.id !== undefined ? item.id : undefined,
1441
+ url: item.url !== undefined ? item.url : undefined,
1442
+ assetId: item.assetId !== undefined ? {
1443
+ equals: item.assetId
1444
+ } : undefined,
1445
+ newsArticleId: item.newsArticleId !== undefined ? {
1446
+ equals: item.newsArticleId
1447
+ } : undefined,
1448
+ },
1449
+ update: {
1450
+ id: item.id !== undefined ? {
1451
+ set: item.id
1452
+ } : undefined,
1453
+ url: item.url !== undefined ? {
1454
+ set: item.url
1455
+ } : undefined,
1456
+ relevancyScore: item.relevancyScore !== undefined ? {
1457
+ set: item.relevancyScore
1458
+ } : undefined,
1459
+ sentimentScore: item.sentimentScore !== undefined ? {
1460
+ set: item.sentimentScore
1461
+ } : undefined,
1462
+ sentimentLabel: item.sentimentLabel !== undefined ? {
1463
+ set: item.sentimentLabel
1464
+ } : undefined,
1465
+ news: item.news ?
1466
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
1467
+ ? {
1468
+ connect: {
1469
+ id: item.news.id
1470
+ }
1471
+ } : { upsert: {
1472
+ where: {
1473
+ id: item.news.id !== undefined ? {
1474
+ equals: item.news.id
1475
+ } : undefined,
1476
+ title: item.news.title !== undefined ? {
1477
+ equals: item.news.title
1478
+ } : undefined,
1479
+ url: item.news.url !== undefined ? {
1480
+ equals: item.news.url
1481
+ } : undefined,
1482
+ },
1483
+ update: {
1484
+ id: item.news.id !== undefined ? {
1485
+ set: item.news.id
1486
+ } : undefined,
1487
+ title: item.news.title !== undefined ? {
1488
+ set: item.news.title
1489
+ } : undefined,
1490
+ content: item.news.content !== undefined ? {
1491
+ set: item.news.content
1492
+ } : undefined,
1493
+ source: item.news.source !== undefined ? {
1494
+ set: item.news.source
1495
+ } : undefined,
1496
+ sourceDomain: item.news.sourceDomain !== undefined ? {
1497
+ set: item.news.sourceDomain
1498
+ } : undefined,
1499
+ url: item.news.url !== undefined ? {
1500
+ set: item.news.url
1501
+ } : undefined,
1502
+ sentiment: item.news.sentiment !== undefined ? {
1503
+ set: item.news.sentiment
1504
+ } : undefined,
1505
+ authors: item.news.authors !== undefined ? {
1506
+ set: item.news.authors
1507
+ } : undefined,
1508
+ summary: item.news.summary !== undefined ? {
1509
+ set: item.news.summary
1510
+ } : undefined,
1511
+ bannerImage: item.news.bannerImage !== undefined ? {
1512
+ set: item.news.bannerImage
1513
+ } : undefined,
1514
+ timePublished: item.news.timePublished !== undefined ? {
1515
+ set: item.news.timePublished
1516
+ } : undefined,
1517
+ category: item.news.category !== undefined ? {
1518
+ set: item.news.category
1519
+ } : undefined,
1520
+ topics: item.news.topics !== undefined ? {
1521
+ set: item.news.topics
1522
+ } : undefined,
1523
+ logo: item.news.logo !== undefined ? {
1524
+ set: item.news.logo
1525
+ } : undefined,
1526
+ },
1527
+ create: {
1528
+ title: item.news.title !== undefined ? item.news.title : undefined,
1529
+ content: item.news.content !== undefined ? item.news.content : undefined,
1530
+ source: item.news.source !== undefined ? item.news.source : undefined,
1531
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1532
+ url: item.news.url !== undefined ? item.news.url : undefined,
1533
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1534
+ authors: item.news.authors !== undefined ? {
1535
+ set: item.news.authors
1536
+ } : undefined,
1537
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
1538
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1539
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1540
+ category: item.news.category !== undefined ? item.news.category : undefined,
1541
+ topics: item.news.topics !== undefined ? {
1542
+ set: item.news.topics
1543
+ } : undefined,
1544
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
1545
+ },
1546
+ }
1547
+ } : undefined,
1548
+ },
1549
+ create: {
1550
+ url: item.url !== undefined ? item.url : undefined,
1551
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
1552
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
1553
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
1554
+ news: item.news ?
1555
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
1556
+ ? { connect: {
1557
+ id: item.news.id
1558
+ }
1559
+ }
1560
+ : { connectOrCreate: {
1561
+ where: {
1562
+ id: item.news.id !== undefined ? item.news.id : undefined,
1563
+ url: item.news.url !== undefined ? item.news.url : undefined,
1564
+ title: item.news.title !== undefined ? {
1565
+ equals: item.news.title
1566
+ } : undefined,
1567
+ },
1568
+ create: {
1569
+ title: item.news.title !== undefined ? item.news.title : undefined,
1570
+ content: item.news.content !== undefined ? item.news.content : undefined,
1571
+ source: item.news.source !== undefined ? item.news.source : undefined,
1572
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1573
+ url: item.news.url !== undefined ? item.news.url : undefined,
1574
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1575
+ authors: item.news.authors !== undefined ? {
1576
+ set: item.news.authors
1577
+ } : undefined,
1578
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
1579
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1580
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1581
+ category: item.news.category !== undefined ? item.news.category : undefined,
1582
+ topics: item.news.topics !== undefined ? {
1583
+ set: item.news.topics
1584
+ } : undefined,
1585
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
1586
+ },
1587
+ }
1588
+ } : undefined,
1589
+ },
1590
+ }))
1591
+ } : undefined,
1592
+ },
1593
+ };
1594
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1595
+ const response = await client.mutate({
1596
+ mutation: UPSERT_ONE_ASSET,
1597
+ variables: filteredVariables,
1598
+ // Don't cache mutations, but ensure we're using the freshest context
1599
+ fetchPolicy: 'no-cache'
1600
+ });
1601
+ if (response.errors && response.errors.length > 0)
1602
+ throw new Error(response.errors[0].message);
1603
+ if (response && response.data && response.data.upsertOneAsset) {
1604
+ return response.data.upsertOneAsset;
1605
+ }
1606
+ else {
1607
+ return null;
1608
+ }
1609
+ }
1610
+ catch (error) {
1611
+ lastError = error;
1612
+ // Check if this is a database connection error that we should retry
1613
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
1614
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
1615
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
1616
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
1617
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
1618
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1619
+ retryCount++;
1620
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1621
+ console.warn("Database connection error, retrying...");
1622
+ await new Promise(resolve => setTimeout(resolve, delay));
1623
+ continue;
1624
+ }
1625
+ // Log the error and rethrow
1626
+ console.error("Database error occurred:", error);
1627
+ throw error;
315
1628
  }
316
1629
  }
317
- catch (error) {
318
- console.error('Error in createManyAsset:', error);
319
- throw error;
320
- }
1630
+ // If we exhausted retries, throw the last error
1631
+ throw lastError;
321
1632
  },
322
1633
  /**
323
- * Update a single Asset record.
324
- * @param props - Properties to update.
1634
+ * Update multiple Asset records.
1635
+ * Enhanced with connection resilience against Prisma connection errors.
1636
+ * @param props - Array of Asset objects for the updated records.
325
1637
  * @param globalClient - Apollo Client instance.
326
- * @returns The updated Asset or null.
1638
+ * @returns The count of created records or null.
327
1639
  */
328
- async update(props, globalClient) {
329
- const [modules, client] = await Promise.all([
330
- (0, client_1.getApolloModules)(),
331
- globalClient
332
- ? Promise.resolve(globalClient)
333
- : client_1.client
334
- ]);
335
- const { gql, ApolloError } = modules;
336
- const UPDATE_ONE_ASSET = gql `
337
- mutation updateOneAsset($data: AssetUpdateInput!, $where: AssetWhereUniqueInput!) {
338
- updateOneAsset(data: $data, where: $where) {
339
- ${selectionSet}
340
- }
341
- }`;
342
- const variables = {
343
- where: {
344
- id: props.id !== undefined ? props.id : undefined,
345
- symbol: props.symbol !== undefined ? props.symbol : undefined,
346
- name: props.name !== undefined ? props.name : undefined,
347
- },
348
- data: {
349
- id: props.id !== undefined ? {
350
- set: props.id
351
- } : undefined,
352
- symbol: props.symbol !== undefined ? {
353
- set: props.symbol
354
- } : undefined,
355
- name: props.name !== undefined ? {
356
- set: props.name
357
- } : undefined,
358
- type: props.type !== undefined ? {
359
- set: props.type
360
- } : undefined,
361
- logoUrl: props.logoUrl !== undefined ? {
362
- set: props.logoUrl
363
- } : undefined,
364
- description: props.description !== undefined ? {
365
- set: props.description
366
- } : undefined,
367
- cik: props.cik !== undefined ? {
368
- set: props.cik
369
- } : undefined,
370
- exchange: props.exchange !== undefined ? {
371
- set: props.exchange
372
- } : undefined,
373
- currency: props.currency !== undefined ? {
374
- set: props.currency
375
- } : undefined,
376
- country: props.country !== undefined ? {
377
- set: props.country
378
- } : undefined,
379
- sector: props.sector !== undefined ? {
380
- set: props.sector
381
- } : undefined,
382
- industry: props.industry !== undefined ? {
383
- set: props.industry
384
- } : undefined,
385
- address: props.address !== undefined ? {
386
- set: props.address
387
- } : undefined,
388
- officialSite: props.officialSite !== undefined ? {
389
- set: props.officialSite
390
- } : undefined,
391
- fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
392
- set: props.fiscalYearEnd
393
- } : undefined,
394
- latestQuarter: props.latestQuarter !== undefined ? {
395
- set: props.latestQuarter
396
- } : undefined,
397
- marketCapitalization: props.marketCapitalization !== undefined ? {
398
- set: props.marketCapitalization
399
- } : undefined,
400
- ebitda: props.ebitda !== undefined ? {
401
- set: props.ebitda
402
- } : undefined,
403
- peRatio: props.peRatio !== undefined ? {
404
- set: props.peRatio
405
- } : undefined,
406
- pegRatio: props.pegRatio !== undefined ? {
407
- set: props.pegRatio
408
- } : undefined,
409
- bookValue: props.bookValue !== undefined ? {
410
- set: props.bookValue
411
- } : undefined,
412
- dividendPerShare: props.dividendPerShare !== undefined ? {
413
- set: props.dividendPerShare
414
- } : undefined,
415
- dividendYield: props.dividendYield !== undefined ? {
416
- set: props.dividendYield
417
- } : undefined,
418
- eps: props.eps !== undefined ? {
419
- set: props.eps
420
- } : undefined,
421
- revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
422
- set: props.revenuePerShareTTM
423
- } : undefined,
424
- profitMargin: props.profitMargin !== undefined ? {
425
- set: props.profitMargin
426
- } : undefined,
427
- operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
428
- set: props.operatingMarginTTM
429
- } : undefined,
430
- returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
431
- set: props.returnOnAssetsTTM
432
- } : undefined,
433
- returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
434
- set: props.returnOnEquityTTM
435
- } : undefined,
436
- revenueTTM: props.revenueTTM !== undefined ? {
437
- set: props.revenueTTM
438
- } : undefined,
439
- grossProfitTTM: props.grossProfitTTM !== undefined ? {
440
- set: props.grossProfitTTM
441
- } : undefined,
442
- dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
443
- set: props.dilutedEPSTTM
444
- } : undefined,
445
- quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
446
- set: props.quarterlyEarningsGrowthYOY
447
- } : undefined,
448
- quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
449
- set: props.quarterlyRevenueGrowthYOY
450
- } : undefined,
451
- analystTargetPrice: props.analystTargetPrice !== undefined ? {
452
- set: props.analystTargetPrice
453
- } : undefined,
454
- analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
455
- set: props.analystRatingStrongBuy
456
- } : undefined,
457
- analystRatingBuy: props.analystRatingBuy !== undefined ? {
458
- set: props.analystRatingBuy
459
- } : undefined,
460
- analystRatingHold: props.analystRatingHold !== undefined ? {
461
- set: props.analystRatingHold
462
- } : undefined,
463
- analystRatingSell: props.analystRatingSell !== undefined ? {
464
- set: props.analystRatingSell
465
- } : undefined,
466
- analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
467
- set: props.analystRatingStrongSell
468
- } : undefined,
469
- trailingPE: props.trailingPE !== undefined ? {
470
- set: props.trailingPE
471
- } : undefined,
472
- forwardPE: props.forwardPE !== undefined ? {
473
- set: props.forwardPE
474
- } : undefined,
475
- priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
476
- set: props.priceToSalesRatioTTM
477
- } : undefined,
478
- priceToBookRatio: props.priceToBookRatio !== undefined ? {
479
- set: props.priceToBookRatio
480
- } : undefined,
481
- evToRevenue: props.evToRevenue !== undefined ? {
482
- set: props.evToRevenue
483
- } : undefined,
484
- evToEbitda: props.evToEbitda !== undefined ? {
485
- set: props.evToEbitda
486
- } : undefined,
487
- beta: props.beta !== undefined ? {
488
- set: props.beta
489
- } : undefined,
490
- week52High: props.week52High !== undefined ? {
491
- set: props.week52High
492
- } : undefined,
493
- week52Low: props.week52Low !== undefined ? {
494
- set: props.week52Low
495
- } : undefined,
496
- day50MovingAverage: props.day50MovingAverage !== undefined ? {
497
- set: props.day50MovingAverage
498
- } : undefined,
499
- day200MovingAverage: props.day200MovingAverage !== undefined ? {
500
- set: props.day200MovingAverage
501
- } : undefined,
502
- sharesOutstanding: props.sharesOutstanding !== undefined ? {
503
- set: props.sharesOutstanding
504
- } : undefined,
505
- dividendDate: props.dividendDate !== undefined ? {
506
- set: props.dividendDate
507
- } : undefined,
508
- exDividendDate: props.exDividendDate !== undefined ? {
509
- set: props.exDividendDate
510
- } : undefined,
511
- askPrice: props.askPrice !== undefined ? {
512
- set: props.askPrice
513
- } : undefined,
514
- bidPrice: props.bidPrice !== undefined ? {
515
- set: props.bidPrice
516
- } : undefined,
517
- createdAt: props.createdAt !== undefined ? {
518
- set: props.createdAt
519
- } : undefined,
520
- updatedAt: props.updatedAt !== undefined ? {
521
- set: props.updatedAt
522
- } : undefined,
523
- newsMentions: props.newsMentions ?
524
- Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && ('id' in item || 'symbol' in item) && Object.keys(item).length === 1) ? {
525
- connect: props.newsMentions.map((item) => ({
526
- id: item.id
527
- }))
528
- } : { upsert: props.newsMentions.map((item) => ({
529
- where: {
530
- id: item.id !== undefined ? item.id : undefined,
531
- url: item.url !== undefined ? item.url : undefined,
532
- assetId: item.assetId !== undefined ? {
533
- equals: item.assetId
534
- } : undefined,
535
- newsArticleId: item.newsArticleId !== undefined ? {
536
- equals: item.newsArticleId
537
- } : undefined,
538
- },
539
- update: {
540
- id: item.id !== undefined ? {
541
- set: item.id
542
- } : undefined,
543
- url: item.url !== undefined ? {
544
- set: item.url
545
- } : undefined,
546
- relevancyScore: item.relevancyScore !== undefined ? {
547
- set: item.relevancyScore
548
- } : undefined,
549
- sentimentScore: item.sentimentScore !== undefined ? {
550
- set: item.sentimentScore
551
- } : undefined,
552
- sentimentLabel: item.sentimentLabel !== undefined ? {
553
- set: item.sentimentLabel
554
- } : undefined,
555
- news: item.news ?
556
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
557
- ? {
558
- connect: {
559
- id: item.news.id
560
- }
561
- } : { upsert: {
562
- where: {
563
- id: item.news.id !== undefined ? {
564
- equals: item.news.id
565
- } : undefined,
566
- title: item.news.title !== undefined ? {
567
- equals: item.news.title
568
- } : undefined,
569
- url: item.news.url !== undefined ? {
570
- equals: item.news.url
571
- } : undefined,
572
- },
573
- update: {
574
- id: item.news.id !== undefined ? {
575
- set: item.news.id
576
- } : undefined,
577
- title: item.news.title !== undefined ? {
578
- set: item.news.title
579
- } : undefined,
580
- content: item.news.content !== undefined ? {
581
- set: item.news.content
582
- } : undefined,
583
- source: item.news.source !== undefined ? {
584
- set: item.news.source
585
- } : undefined,
586
- sourceDomain: item.news.sourceDomain !== undefined ? {
587
- set: item.news.sourceDomain
588
- } : undefined,
589
- url: item.news.url !== undefined ? {
590
- set: item.news.url
591
- } : undefined,
592
- sentiment: item.news.sentiment !== undefined ? {
593
- set: item.news.sentiment
594
- } : undefined,
595
- authors: item.news.authors !== undefined ? {
596
- set: item.news.authors
597
- } : undefined,
598
- summary: item.news.summary !== undefined ? {
599
- set: item.news.summary
600
- } : undefined,
601
- bannerImage: item.news.bannerImage !== undefined ? {
602
- set: item.news.bannerImage
603
- } : undefined,
604
- timePublished: item.news.timePublished !== undefined ? {
605
- set: item.news.timePublished
606
- } : undefined,
607
- category: item.news.category !== undefined ? {
608
- set: item.news.category
609
- } : undefined,
610
- topics: item.news.topics !== undefined ? {
611
- set: item.news.topics
612
- } : undefined,
613
- logo: item.news.logo !== undefined ? {
614
- set: item.news.logo
615
- } : undefined,
616
- },
617
- create: {
618
- title: item.news.title !== undefined ? item.news.title : undefined,
619
- content: item.news.content !== undefined ? item.news.content : undefined,
620
- source: item.news.source !== undefined ? item.news.source : undefined,
621
- sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
622
- url: item.news.url !== undefined ? item.news.url : undefined,
623
- sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
624
- authors: item.news.authors !== undefined ? {
625
- set: item.news.authors
626
- } : undefined,
627
- summary: item.news.summary !== undefined ? item.news.summary : undefined,
628
- bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
629
- timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
630
- category: item.news.category !== undefined ? item.news.category : undefined,
631
- topics: item.news.topics !== undefined ? {
632
- set: item.news.topics
633
- } : undefined,
634
- logo: item.news.logo !== undefined ? item.news.logo : undefined,
635
- },
636
- }
637
- } : undefined,
638
- },
639
- create: {
640
- url: item.url !== undefined ? item.url : undefined,
641
- relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
642
- sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
643
- sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
644
- news: item.news ?
645
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
646
- ? { connect: {
647
- id: item.news.id
648
- }
649
- }
650
- : { connectOrCreate: {
651
- where: {
652
- id: item.news.id !== undefined ? item.news.id : undefined,
653
- url: item.news.url !== undefined ? item.news.url : undefined,
654
- title: item.news.title !== undefined ? {
655
- equals: item.news.title
656
- } : undefined,
657
- },
658
- create: {
659
- title: item.news.title !== undefined ? item.news.title : undefined,
660
- content: item.news.content !== undefined ? item.news.content : undefined,
661
- source: item.news.source !== undefined ? item.news.source : undefined,
662
- sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
663
- url: item.news.url !== undefined ? item.news.url : undefined,
664
- sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
665
- authors: item.news.authors !== undefined ? {
666
- set: item.news.authors
667
- } : undefined,
668
- summary: item.news.summary !== undefined ? item.news.summary : undefined,
669
- bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
670
- timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
671
- category: item.news.category !== undefined ? item.news.category : undefined,
672
- topics: item.news.topics !== undefined ? {
673
- set: item.news.topics
674
- } : undefined,
675
- logo: item.news.logo !== undefined ? item.news.logo : undefined,
676
- },
677
- }
1640
+ async updateMany(props, globalClient) {
1641
+ var _a, _b, _c, _d, _e;
1642
+ // Maximum number of retries for database connection issues
1643
+ const MAX_RETRIES = 3;
1644
+ let retryCount = 0;
1645
+ let lastError = null;
1646
+ // Retry loop to handle potential database connection issues
1647
+ while (retryCount < MAX_RETRIES) {
1648
+ try {
1649
+ const [modules, client] = await Promise.all([
1650
+ (0, client_1.getApolloModules)(),
1651
+ globalClient
1652
+ ? Promise.resolve(globalClient)
1653
+ : client_1.client
1654
+ ]);
1655
+ const { gql, ApolloError } = modules;
1656
+ const UPDATE_MANY_ASSET = gql `
1657
+ mutation updateManyAsset($data: [AssetCreateManyInput!]!) {
1658
+ updateManyAsset(data: $data) {
1659
+ count
1660
+ }
1661
+ }`;
1662
+ const variables = props.map(prop => ({
1663
+ where: {
1664
+ id: prop.id !== undefined ? prop.id : undefined,
1665
+ symbol: prop.symbol !== undefined ? prop.symbol : undefined,
1666
+ name: prop.name !== undefined ? prop.name : undefined,
1667
+ type: prop.type !== undefined ? {
1668
+ equals: prop.type
1669
+ } : undefined,
1670
+ logoUrl: prop.logoUrl !== undefined ? {
1671
+ equals: prop.logoUrl
1672
+ } : undefined,
1673
+ description: prop.description !== undefined ? {
1674
+ equals: prop.description
1675
+ } : undefined,
1676
+ cik: prop.cik !== undefined ? {
1677
+ equals: prop.cik
1678
+ } : undefined,
1679
+ exchange: prop.exchange !== undefined ? {
1680
+ equals: prop.exchange
1681
+ } : undefined,
1682
+ currency: prop.currency !== undefined ? {
1683
+ equals: prop.currency
1684
+ } : undefined,
1685
+ country: prop.country !== undefined ? {
1686
+ equals: prop.country
1687
+ } : undefined,
1688
+ sector: prop.sector !== undefined ? {
1689
+ equals: prop.sector
1690
+ } : undefined,
1691
+ industry: prop.industry !== undefined ? {
1692
+ equals: prop.industry
1693
+ } : undefined,
1694
+ address: prop.address !== undefined ? {
1695
+ equals: prop.address
1696
+ } : undefined,
1697
+ officialSite: prop.officialSite !== undefined ? {
1698
+ equals: prop.officialSite
1699
+ } : undefined,
1700
+ fiscalYearEnd: prop.fiscalYearEnd !== undefined ? {
1701
+ equals: prop.fiscalYearEnd
1702
+ } : undefined,
1703
+ latestQuarter: prop.latestQuarter !== undefined ? {
1704
+ equals: prop.latestQuarter
1705
+ } : undefined,
1706
+ marketCapitalization: prop.marketCapitalization !== undefined ? {
1707
+ equals: prop.marketCapitalization
1708
+ } : undefined,
1709
+ ebitda: prop.ebitda !== undefined ? {
1710
+ equals: prop.ebitda
1711
+ } : undefined,
1712
+ peRatio: prop.peRatio !== undefined ? {
1713
+ equals: prop.peRatio
1714
+ } : undefined,
1715
+ pegRatio: prop.pegRatio !== undefined ? {
1716
+ equals: prop.pegRatio
1717
+ } : undefined,
1718
+ bookValue: prop.bookValue !== undefined ? {
1719
+ equals: prop.bookValue
1720
+ } : undefined,
1721
+ dividendPerShare: prop.dividendPerShare !== undefined ? {
1722
+ equals: prop.dividendPerShare
1723
+ } : undefined,
1724
+ dividendYield: prop.dividendYield !== undefined ? {
1725
+ equals: prop.dividendYield
1726
+ } : undefined,
1727
+ eps: prop.eps !== undefined ? {
1728
+ equals: prop.eps
1729
+ } : undefined,
1730
+ revenuePerShareTTM: prop.revenuePerShareTTM !== undefined ? {
1731
+ equals: prop.revenuePerShareTTM
1732
+ } : undefined,
1733
+ profitMargin: prop.profitMargin !== undefined ? {
1734
+ equals: prop.profitMargin
1735
+ } : undefined,
1736
+ operatingMarginTTM: prop.operatingMarginTTM !== undefined ? {
1737
+ equals: prop.operatingMarginTTM
1738
+ } : undefined,
1739
+ returnOnAssetsTTM: prop.returnOnAssetsTTM !== undefined ? {
1740
+ equals: prop.returnOnAssetsTTM
1741
+ } : undefined,
1742
+ returnOnEquityTTM: prop.returnOnEquityTTM !== undefined ? {
1743
+ equals: prop.returnOnEquityTTM
1744
+ } : undefined,
1745
+ revenueTTM: prop.revenueTTM !== undefined ? {
1746
+ equals: prop.revenueTTM
1747
+ } : undefined,
1748
+ grossProfitTTM: prop.grossProfitTTM !== undefined ? {
1749
+ equals: prop.grossProfitTTM
1750
+ } : undefined,
1751
+ dilutedEPSTTM: prop.dilutedEPSTTM !== undefined ? {
1752
+ equals: prop.dilutedEPSTTM
1753
+ } : undefined,
1754
+ quarterlyEarningsGrowthYOY: prop.quarterlyEarningsGrowthYOY !== undefined ? {
1755
+ equals: prop.quarterlyEarningsGrowthYOY
1756
+ } : undefined,
1757
+ quarterlyRevenueGrowthYOY: prop.quarterlyRevenueGrowthYOY !== undefined ? {
1758
+ equals: prop.quarterlyRevenueGrowthYOY
1759
+ } : undefined,
1760
+ analystTargetPrice: prop.analystTargetPrice !== undefined ? {
1761
+ equals: prop.analystTargetPrice
1762
+ } : undefined,
1763
+ analystRatingStrongBuy: prop.analystRatingStrongBuy !== undefined ? {
1764
+ equals: prop.analystRatingStrongBuy
1765
+ } : undefined,
1766
+ analystRatingBuy: prop.analystRatingBuy !== undefined ? {
1767
+ equals: prop.analystRatingBuy
1768
+ } : undefined,
1769
+ analystRatingHold: prop.analystRatingHold !== undefined ? {
1770
+ equals: prop.analystRatingHold
1771
+ } : undefined,
1772
+ analystRatingSell: prop.analystRatingSell !== undefined ? {
1773
+ equals: prop.analystRatingSell
1774
+ } : undefined,
1775
+ analystRatingStrongSell: prop.analystRatingStrongSell !== undefined ? {
1776
+ equals: prop.analystRatingStrongSell
1777
+ } : undefined,
1778
+ trailingPE: prop.trailingPE !== undefined ? {
1779
+ equals: prop.trailingPE
1780
+ } : undefined,
1781
+ forwardPE: prop.forwardPE !== undefined ? {
1782
+ equals: prop.forwardPE
1783
+ } : undefined,
1784
+ priceToSalesRatioTTM: prop.priceToSalesRatioTTM !== undefined ? {
1785
+ equals: prop.priceToSalesRatioTTM
1786
+ } : undefined,
1787
+ priceToBookRatio: prop.priceToBookRatio !== undefined ? {
1788
+ equals: prop.priceToBookRatio
1789
+ } : undefined,
1790
+ evToRevenue: prop.evToRevenue !== undefined ? {
1791
+ equals: prop.evToRevenue
1792
+ } : undefined,
1793
+ evToEbitda: prop.evToEbitda !== undefined ? {
1794
+ equals: prop.evToEbitda
1795
+ } : undefined,
1796
+ beta: prop.beta !== undefined ? {
1797
+ equals: prop.beta
1798
+ } : undefined,
1799
+ week52High: prop.week52High !== undefined ? {
1800
+ equals: prop.week52High
1801
+ } : undefined,
1802
+ week52Low: prop.week52Low !== undefined ? {
1803
+ equals: prop.week52Low
1804
+ } : undefined,
1805
+ day50MovingAverage: prop.day50MovingAverage !== undefined ? {
1806
+ equals: prop.day50MovingAverage
1807
+ } : undefined,
1808
+ day200MovingAverage: prop.day200MovingAverage !== undefined ? {
1809
+ equals: prop.day200MovingAverage
1810
+ } : undefined,
1811
+ sharesOutstanding: prop.sharesOutstanding !== undefined ? {
1812
+ equals: prop.sharesOutstanding
1813
+ } : undefined,
1814
+ dividendDate: prop.dividendDate !== undefined ? {
1815
+ equals: prop.dividendDate
1816
+ } : undefined,
1817
+ exDividendDate: prop.exDividendDate !== undefined ? {
1818
+ equals: prop.exDividendDate
1819
+ } : undefined,
1820
+ createdAt: prop.createdAt !== undefined ? {
1821
+ equals: prop.createdAt
1822
+ } : undefined,
1823
+ updatedAt: prop.updatedAt !== undefined ? {
1824
+ equals: prop.updatedAt
1825
+ } : undefined,
1826
+ },
1827
+ data: {
1828
+ id: prop.id !== undefined ? {
1829
+ set: prop.id
1830
+ } : undefined,
1831
+ symbol: prop.symbol !== undefined ? {
1832
+ set: prop.symbol
1833
+ } : undefined,
1834
+ name: prop.name !== undefined ? {
1835
+ set: prop.name
1836
+ } : undefined,
1837
+ type: prop.type !== undefined ? {
1838
+ set: prop.type
1839
+ } : undefined,
1840
+ logoUrl: prop.logoUrl !== undefined ? {
1841
+ set: prop.logoUrl
1842
+ } : undefined,
1843
+ description: prop.description !== undefined ? {
1844
+ set: prop.description
1845
+ } : undefined,
1846
+ cik: prop.cik !== undefined ? {
1847
+ set: prop.cik
1848
+ } : undefined,
1849
+ exchange: prop.exchange !== undefined ? {
1850
+ set: prop.exchange
1851
+ } : undefined,
1852
+ currency: prop.currency !== undefined ? {
1853
+ set: prop.currency
1854
+ } : undefined,
1855
+ country: prop.country !== undefined ? {
1856
+ set: prop.country
1857
+ } : undefined,
1858
+ sector: prop.sector !== undefined ? {
1859
+ set: prop.sector
1860
+ } : undefined,
1861
+ industry: prop.industry !== undefined ? {
1862
+ set: prop.industry
1863
+ } : undefined,
1864
+ address: prop.address !== undefined ? {
1865
+ set: prop.address
1866
+ } : undefined,
1867
+ officialSite: prop.officialSite !== undefined ? {
1868
+ set: prop.officialSite
1869
+ } : undefined,
1870
+ fiscalYearEnd: prop.fiscalYearEnd !== undefined ? {
1871
+ set: prop.fiscalYearEnd
1872
+ } : undefined,
1873
+ latestQuarter: prop.latestQuarter !== undefined ? {
1874
+ set: prop.latestQuarter
1875
+ } : undefined,
1876
+ marketCapitalization: prop.marketCapitalization !== undefined ? {
1877
+ set: prop.marketCapitalization
1878
+ } : undefined,
1879
+ ebitda: prop.ebitda !== undefined ? {
1880
+ set: prop.ebitda
1881
+ } : undefined,
1882
+ peRatio: prop.peRatio !== undefined ? {
1883
+ set: prop.peRatio
1884
+ } : undefined,
1885
+ pegRatio: prop.pegRatio !== undefined ? {
1886
+ set: prop.pegRatio
1887
+ } : undefined,
1888
+ bookValue: prop.bookValue !== undefined ? {
1889
+ set: prop.bookValue
1890
+ } : undefined,
1891
+ dividendPerShare: prop.dividendPerShare !== undefined ? {
1892
+ set: prop.dividendPerShare
1893
+ } : undefined,
1894
+ dividendYield: prop.dividendYield !== undefined ? {
1895
+ set: prop.dividendYield
1896
+ } : undefined,
1897
+ eps: prop.eps !== undefined ? {
1898
+ set: prop.eps
1899
+ } : undefined,
1900
+ revenuePerShareTTM: prop.revenuePerShareTTM !== undefined ? {
1901
+ set: prop.revenuePerShareTTM
1902
+ } : undefined,
1903
+ profitMargin: prop.profitMargin !== undefined ? {
1904
+ set: prop.profitMargin
1905
+ } : undefined,
1906
+ operatingMarginTTM: prop.operatingMarginTTM !== undefined ? {
1907
+ set: prop.operatingMarginTTM
1908
+ } : undefined,
1909
+ returnOnAssetsTTM: prop.returnOnAssetsTTM !== undefined ? {
1910
+ set: prop.returnOnAssetsTTM
1911
+ } : undefined,
1912
+ returnOnEquityTTM: prop.returnOnEquityTTM !== undefined ? {
1913
+ set: prop.returnOnEquityTTM
1914
+ } : undefined,
1915
+ revenueTTM: prop.revenueTTM !== undefined ? {
1916
+ set: prop.revenueTTM
1917
+ } : undefined,
1918
+ grossProfitTTM: prop.grossProfitTTM !== undefined ? {
1919
+ set: prop.grossProfitTTM
1920
+ } : undefined,
1921
+ dilutedEPSTTM: prop.dilutedEPSTTM !== undefined ? {
1922
+ set: prop.dilutedEPSTTM
1923
+ } : undefined,
1924
+ quarterlyEarningsGrowthYOY: prop.quarterlyEarningsGrowthYOY !== undefined ? {
1925
+ set: prop.quarterlyEarningsGrowthYOY
1926
+ } : undefined,
1927
+ quarterlyRevenueGrowthYOY: prop.quarterlyRevenueGrowthYOY !== undefined ? {
1928
+ set: prop.quarterlyRevenueGrowthYOY
1929
+ } : undefined,
1930
+ analystTargetPrice: prop.analystTargetPrice !== undefined ? {
1931
+ set: prop.analystTargetPrice
1932
+ } : undefined,
1933
+ analystRatingStrongBuy: prop.analystRatingStrongBuy !== undefined ? {
1934
+ set: prop.analystRatingStrongBuy
1935
+ } : undefined,
1936
+ analystRatingBuy: prop.analystRatingBuy !== undefined ? {
1937
+ set: prop.analystRatingBuy
1938
+ } : undefined,
1939
+ analystRatingHold: prop.analystRatingHold !== undefined ? {
1940
+ set: prop.analystRatingHold
1941
+ } : undefined,
1942
+ analystRatingSell: prop.analystRatingSell !== undefined ? {
1943
+ set: prop.analystRatingSell
1944
+ } : undefined,
1945
+ analystRatingStrongSell: prop.analystRatingStrongSell !== undefined ? {
1946
+ set: prop.analystRatingStrongSell
1947
+ } : undefined,
1948
+ trailingPE: prop.trailingPE !== undefined ? {
1949
+ set: prop.trailingPE
1950
+ } : undefined,
1951
+ forwardPE: prop.forwardPE !== undefined ? {
1952
+ set: prop.forwardPE
1953
+ } : undefined,
1954
+ priceToSalesRatioTTM: prop.priceToSalesRatioTTM !== undefined ? {
1955
+ set: prop.priceToSalesRatioTTM
1956
+ } : undefined,
1957
+ priceToBookRatio: prop.priceToBookRatio !== undefined ? {
1958
+ set: prop.priceToBookRatio
1959
+ } : undefined,
1960
+ evToRevenue: prop.evToRevenue !== undefined ? {
1961
+ set: prop.evToRevenue
1962
+ } : undefined,
1963
+ evToEbitda: prop.evToEbitda !== undefined ? {
1964
+ set: prop.evToEbitda
1965
+ } : undefined,
1966
+ beta: prop.beta !== undefined ? {
1967
+ set: prop.beta
1968
+ } : undefined,
1969
+ week52High: prop.week52High !== undefined ? {
1970
+ set: prop.week52High
1971
+ } : undefined,
1972
+ week52Low: prop.week52Low !== undefined ? {
1973
+ set: prop.week52Low
1974
+ } : undefined,
1975
+ day50MovingAverage: prop.day50MovingAverage !== undefined ? {
1976
+ set: prop.day50MovingAverage
1977
+ } : undefined,
1978
+ day200MovingAverage: prop.day200MovingAverage !== undefined ? {
1979
+ set: prop.day200MovingAverage
1980
+ } : undefined,
1981
+ sharesOutstanding: prop.sharesOutstanding !== undefined ? {
1982
+ set: prop.sharesOutstanding
1983
+ } : undefined,
1984
+ dividendDate: prop.dividendDate !== undefined ? {
1985
+ set: prop.dividendDate
1986
+ } : undefined,
1987
+ exDividendDate: prop.exDividendDate !== undefined ? {
1988
+ set: prop.exDividendDate
1989
+ } : undefined,
1990
+ askPrice: prop.askPrice !== undefined ? {
1991
+ set: prop.askPrice
1992
+ } : undefined,
1993
+ bidPrice: prop.bidPrice !== undefined ? {
1994
+ set: prop.bidPrice
1995
+ } : undefined,
1996
+ createdAt: prop.createdAt !== undefined ? {
1997
+ set: prop.createdAt
1998
+ } : undefined,
1999
+ updatedAt: prop.updatedAt !== undefined ? {
2000
+ set: prop.updatedAt
2001
+ } : undefined,
2002
+ newsMentions: prop.newsMentions ?
2003
+ Array.isArray(prop.newsMentions) && prop.newsMentions.length > 0 && prop.newsMentions.every((item) => typeof item === 'object' && ('id' in item || 'symbol' in item) && Object.keys(item).length === 1) ? {
2004
+ connect: prop.newsMentions.map((item) => ({
2005
+ id: item.id
2006
+ }))
2007
+ } : { upsert: prop.newsMentions.map((item) => ({
2008
+ where: {
2009
+ id: item.id !== undefined ? item.id : undefined,
2010
+ url: item.url !== undefined ? item.url : undefined,
2011
+ assetId: item.assetId !== undefined ? {
2012
+ equals: item.assetId
678
2013
  } : undefined,
679
- },
680
- }))
681
- } : undefined,
682
- },
683
- };
684
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
685
- try {
686
- const response = await client.mutate({ mutation: UPDATE_ONE_ASSET, variables: filteredVariables });
687
- if (response.errors && response.errors.length > 0)
688
- throw new Error(response.errors[0].message);
689
- if (response && response.data && response.data.updateOneAsset) {
690
- return response.data.updateOneAsset;
691
- }
692
- else {
693
- return null;
694
- }
695
- }
696
- catch (error) {
697
- console.error('Error in updateOneAsset:', error);
698
- throw error;
699
- }
700
- },
701
- /**
702
- * Upsert a single Asset record.
703
- * @param props - Properties to update.
704
- * @param globalClient - Apollo Client instance.
705
- * @returns The updated Asset or null.
706
- */
707
- async upsert(props, globalClient) {
708
- const [modules, client] = await Promise.all([
709
- (0, client_1.getApolloModules)(),
710
- globalClient
711
- ? Promise.resolve(globalClient)
712
- : client_1.client
713
- ]);
714
- const { gql, ApolloError } = modules;
715
- const UPSERT_ONE_ASSET = gql `
716
- mutation upsertOneAsset($where: AssetWhereUniqueInput!, $create: AssetCreateInput!, $update: AssetUpdateInput!) {
717
- upsertOneAsset(where: $where, create: $create, update: $update) {
718
- ${selectionSet}
719
- }
720
- }`;
721
- const variables = {
722
- where: {
723
- id: props.id !== undefined ? props.id : undefined,
724
- symbol: props.symbol !== undefined ? props.symbol : undefined,
725
- name: props.name !== undefined ? props.name : undefined,
726
- },
727
- create: {
728
- symbol: props.symbol !== undefined ? props.symbol : undefined,
729
- name: props.name !== undefined ? props.name : undefined,
730
- type: props.type !== undefined ? props.type : undefined,
731
- logoUrl: props.logoUrl !== undefined ? props.logoUrl : undefined,
732
- description: props.description !== undefined ? props.description : undefined,
733
- cik: props.cik !== undefined ? props.cik : undefined,
734
- exchange: props.exchange !== undefined ? props.exchange : undefined,
735
- currency: props.currency !== undefined ? props.currency : undefined,
736
- country: props.country !== undefined ? props.country : undefined,
737
- sector: props.sector !== undefined ? props.sector : undefined,
738
- industry: props.industry !== undefined ? props.industry : undefined,
739
- address: props.address !== undefined ? props.address : undefined,
740
- officialSite: props.officialSite !== undefined ? props.officialSite : undefined,
741
- fiscalYearEnd: props.fiscalYearEnd !== undefined ? props.fiscalYearEnd : undefined,
742
- latestQuarter: props.latestQuarter !== undefined ? props.latestQuarter : undefined,
743
- marketCapitalization: props.marketCapitalization !== undefined ? props.marketCapitalization : undefined,
744
- ebitda: props.ebitda !== undefined ? props.ebitda : undefined,
745
- peRatio: props.peRatio !== undefined ? props.peRatio : undefined,
746
- pegRatio: props.pegRatio !== undefined ? props.pegRatio : undefined,
747
- bookValue: props.bookValue !== undefined ? props.bookValue : undefined,
748
- dividendPerShare: props.dividendPerShare !== undefined ? props.dividendPerShare : undefined,
749
- dividendYield: props.dividendYield !== undefined ? props.dividendYield : undefined,
750
- eps: props.eps !== undefined ? props.eps : undefined,
751
- revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? props.revenuePerShareTTM : undefined,
752
- profitMargin: props.profitMargin !== undefined ? props.profitMargin : undefined,
753
- operatingMarginTTM: props.operatingMarginTTM !== undefined ? props.operatingMarginTTM : undefined,
754
- returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? props.returnOnAssetsTTM : undefined,
755
- returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? props.returnOnEquityTTM : undefined,
756
- revenueTTM: props.revenueTTM !== undefined ? props.revenueTTM : undefined,
757
- grossProfitTTM: props.grossProfitTTM !== undefined ? props.grossProfitTTM : undefined,
758
- dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? props.dilutedEPSTTM : undefined,
759
- quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? props.quarterlyEarningsGrowthYOY : undefined,
760
- quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? props.quarterlyRevenueGrowthYOY : undefined,
761
- analystTargetPrice: props.analystTargetPrice !== undefined ? props.analystTargetPrice : undefined,
762
- analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? props.analystRatingStrongBuy : undefined,
763
- analystRatingBuy: props.analystRatingBuy !== undefined ? props.analystRatingBuy : undefined,
764
- analystRatingHold: props.analystRatingHold !== undefined ? props.analystRatingHold : undefined,
765
- analystRatingSell: props.analystRatingSell !== undefined ? props.analystRatingSell : undefined,
766
- analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? props.analystRatingStrongSell : undefined,
767
- trailingPE: props.trailingPE !== undefined ? props.trailingPE : undefined,
768
- forwardPE: props.forwardPE !== undefined ? props.forwardPE : undefined,
769
- priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? props.priceToSalesRatioTTM : undefined,
770
- priceToBookRatio: props.priceToBookRatio !== undefined ? props.priceToBookRatio : undefined,
771
- evToRevenue: props.evToRevenue !== undefined ? props.evToRevenue : undefined,
772
- evToEbitda: props.evToEbitda !== undefined ? props.evToEbitda : undefined,
773
- beta: props.beta !== undefined ? props.beta : undefined,
774
- week52High: props.week52High !== undefined ? props.week52High : undefined,
775
- week52Low: props.week52Low !== undefined ? props.week52Low : undefined,
776
- day50MovingAverage: props.day50MovingAverage !== undefined ? props.day50MovingAverage : undefined,
777
- day200MovingAverage: props.day200MovingAverage !== undefined ? props.day200MovingAverage : undefined,
778
- sharesOutstanding: props.sharesOutstanding !== undefined ? props.sharesOutstanding : undefined,
779
- dividendDate: props.dividendDate !== undefined ? props.dividendDate : undefined,
780
- exDividendDate: props.exDividendDate !== undefined ? props.exDividendDate : undefined,
781
- askPrice: props.askPrice !== undefined ? props.askPrice : undefined,
782
- bidPrice: props.bidPrice !== undefined ? props.bidPrice : undefined,
783
- newsMentions: props.newsMentions ?
784
- Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && 'id' in item && Object.keys(item).length === 1) ? {
785
- connect: props.newsMentions.map((item) => ({
786
- id: item.id
787
- }))
788
- }
789
- : { connectOrCreate: props.newsMentions.map((item) => ({
790
- where: {
791
- id: item.id !== undefined ? item.id : undefined,
792
- url: item.url !== undefined ? item.url : undefined,
793
- newsArticleId: item.newsArticleId !== undefined ? {
794
- equals: item.newsArticleId
795
- } : undefined,
796
- },
797
- create: {
798
- url: item.url !== undefined ? item.url : undefined,
799
- relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
800
- sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
801
- sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
802
- news: item.news ?
803
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
804
- ? { connect: {
805
- id: item.news.id
806
- }
807
- }
808
- : { connectOrCreate: {
2014
+ newsArticleId: item.newsArticleId !== undefined ? {
2015
+ equals: item.newsArticleId
2016
+ } : undefined,
2017
+ },
2018
+ update: {
2019
+ id: item.id !== undefined ? {
2020
+ set: item.id
2021
+ } : undefined,
2022
+ url: item.url !== undefined ? {
2023
+ set: item.url
2024
+ } : undefined,
2025
+ relevancyScore: item.relevancyScore !== undefined ? {
2026
+ set: item.relevancyScore
2027
+ } : undefined,
2028
+ sentimentScore: item.sentimentScore !== undefined ? {
2029
+ set: item.sentimentScore
2030
+ } : undefined,
2031
+ sentimentLabel: item.sentimentLabel !== undefined ? {
2032
+ set: item.sentimentLabel
2033
+ } : undefined,
2034
+ news: item.news ?
2035
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
2036
+ ? {
2037
+ connect: {
2038
+ id: item.news.id
2039
+ }
2040
+ } : { upsert: {
809
2041
  where: {
810
- id: item.news.id !== undefined ? item.news.id : undefined,
811
- url: item.news.url !== undefined ? item.news.url : undefined,
2042
+ id: item.news.id !== undefined ? {
2043
+ equals: item.news.id
2044
+ } : undefined,
812
2045
  title: item.news.title !== undefined ? {
813
2046
  equals: item.news.title
814
2047
  } : undefined,
2048
+ url: item.news.url !== undefined ? {
2049
+ equals: item.news.url
2050
+ } : undefined,
2051
+ },
2052
+ update: {
2053
+ id: item.news.id !== undefined ? {
2054
+ set: item.news.id
2055
+ } : undefined,
2056
+ title: item.news.title !== undefined ? {
2057
+ set: item.news.title
2058
+ } : undefined,
2059
+ content: item.news.content !== undefined ? {
2060
+ set: item.news.content
2061
+ } : undefined,
2062
+ source: item.news.source !== undefined ? {
2063
+ set: item.news.source
2064
+ } : undefined,
2065
+ sourceDomain: item.news.sourceDomain !== undefined ? {
2066
+ set: item.news.sourceDomain
2067
+ } : undefined,
2068
+ url: item.news.url !== undefined ? {
2069
+ set: item.news.url
2070
+ } : undefined,
2071
+ sentiment: item.news.sentiment !== undefined ? {
2072
+ set: item.news.sentiment
2073
+ } : undefined,
2074
+ authors: item.news.authors !== undefined ? {
2075
+ set: item.news.authors
2076
+ } : undefined,
2077
+ summary: item.news.summary !== undefined ? {
2078
+ set: item.news.summary
2079
+ } : undefined,
2080
+ bannerImage: item.news.bannerImage !== undefined ? {
2081
+ set: item.news.bannerImage
2082
+ } : undefined,
2083
+ timePublished: item.news.timePublished !== undefined ? {
2084
+ set: item.news.timePublished
2085
+ } : undefined,
2086
+ category: item.news.category !== undefined ? {
2087
+ set: item.news.category
2088
+ } : undefined,
2089
+ topics: item.news.topics !== undefined ? {
2090
+ set: item.news.topics
2091
+ } : undefined,
2092
+ logo: item.news.logo !== undefined ? {
2093
+ set: item.news.logo
2094
+ } : undefined,
815
2095
  },
816
2096
  create: {
817
2097
  title: item.news.title !== undefined ? item.news.title : undefined,
@@ -834,910 +2114,697 @@ exports.Asset = {
834
2114
  },
835
2115
  }
836
2116
  } : undefined,
837
- },
838
- }))
839
- } : undefined,
840
- },
841
- update: {
842
- symbol: props.symbol !== undefined ? {
843
- set: props.symbol
844
- } : undefined,
845
- name: props.name !== undefined ? {
846
- set: props.name
847
- } : undefined,
848
- type: props.type !== undefined ? {
849
- set: props.type
850
- } : undefined,
851
- logoUrl: props.logoUrl !== undefined ? {
852
- set: props.logoUrl
853
- } : undefined,
854
- description: props.description !== undefined ? {
855
- set: props.description
856
- } : undefined,
857
- cik: props.cik !== undefined ? {
858
- set: props.cik
859
- } : undefined,
860
- exchange: props.exchange !== undefined ? {
861
- set: props.exchange
862
- } : undefined,
863
- currency: props.currency !== undefined ? {
864
- set: props.currency
865
- } : undefined,
866
- country: props.country !== undefined ? {
867
- set: props.country
868
- } : undefined,
869
- sector: props.sector !== undefined ? {
870
- set: props.sector
871
- } : undefined,
872
- industry: props.industry !== undefined ? {
873
- set: props.industry
874
- } : undefined,
875
- address: props.address !== undefined ? {
876
- set: props.address
877
- } : undefined,
878
- officialSite: props.officialSite !== undefined ? {
879
- set: props.officialSite
880
- } : undefined,
881
- fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
882
- set: props.fiscalYearEnd
883
- } : undefined,
884
- latestQuarter: props.latestQuarter !== undefined ? {
885
- set: props.latestQuarter
886
- } : undefined,
887
- marketCapitalization: props.marketCapitalization !== undefined ? {
888
- set: props.marketCapitalization
889
- } : undefined,
890
- ebitda: props.ebitda !== undefined ? {
891
- set: props.ebitda
892
- } : undefined,
893
- peRatio: props.peRatio !== undefined ? {
894
- set: props.peRatio
895
- } : undefined,
896
- pegRatio: props.pegRatio !== undefined ? {
897
- set: props.pegRatio
898
- } : undefined,
899
- bookValue: props.bookValue !== undefined ? {
900
- set: props.bookValue
901
- } : undefined,
902
- dividendPerShare: props.dividendPerShare !== undefined ? {
903
- set: props.dividendPerShare
904
- } : undefined,
905
- dividendYield: props.dividendYield !== undefined ? {
906
- set: props.dividendYield
907
- } : undefined,
908
- eps: props.eps !== undefined ? {
909
- set: props.eps
910
- } : undefined,
911
- revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
912
- set: props.revenuePerShareTTM
913
- } : undefined,
914
- profitMargin: props.profitMargin !== undefined ? {
915
- set: props.profitMargin
916
- } : undefined,
917
- operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
918
- set: props.operatingMarginTTM
919
- } : undefined,
920
- returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
921
- set: props.returnOnAssetsTTM
922
- } : undefined,
923
- returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
924
- set: props.returnOnEquityTTM
925
- } : undefined,
926
- revenueTTM: props.revenueTTM !== undefined ? {
927
- set: props.revenueTTM
928
- } : undefined,
929
- grossProfitTTM: props.grossProfitTTM !== undefined ? {
930
- set: props.grossProfitTTM
931
- } : undefined,
932
- dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
933
- set: props.dilutedEPSTTM
934
- } : undefined,
935
- quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
936
- set: props.quarterlyEarningsGrowthYOY
937
- } : undefined,
938
- quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
939
- set: props.quarterlyRevenueGrowthYOY
940
- } : undefined,
941
- analystTargetPrice: props.analystTargetPrice !== undefined ? {
942
- set: props.analystTargetPrice
943
- } : undefined,
944
- analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
945
- set: props.analystRatingStrongBuy
946
- } : undefined,
947
- analystRatingBuy: props.analystRatingBuy !== undefined ? {
948
- set: props.analystRatingBuy
949
- } : undefined,
950
- analystRatingHold: props.analystRatingHold !== undefined ? {
951
- set: props.analystRatingHold
952
- } : undefined,
953
- analystRatingSell: props.analystRatingSell !== undefined ? {
954
- set: props.analystRatingSell
955
- } : undefined,
956
- analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
957
- set: props.analystRatingStrongSell
958
- } : undefined,
959
- trailingPE: props.trailingPE !== undefined ? {
960
- set: props.trailingPE
961
- } : undefined,
962
- forwardPE: props.forwardPE !== undefined ? {
963
- set: props.forwardPE
964
- } : undefined,
965
- priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
966
- set: props.priceToSalesRatioTTM
967
- } : undefined,
968
- priceToBookRatio: props.priceToBookRatio !== undefined ? {
969
- set: props.priceToBookRatio
970
- } : undefined,
971
- evToRevenue: props.evToRevenue !== undefined ? {
972
- set: props.evToRevenue
973
- } : undefined,
974
- evToEbitda: props.evToEbitda !== undefined ? {
975
- set: props.evToEbitda
976
- } : undefined,
977
- beta: props.beta !== undefined ? {
978
- set: props.beta
979
- } : undefined,
980
- week52High: props.week52High !== undefined ? {
981
- set: props.week52High
982
- } : undefined,
983
- week52Low: props.week52Low !== undefined ? {
984
- set: props.week52Low
985
- } : undefined,
986
- day50MovingAverage: props.day50MovingAverage !== undefined ? {
987
- set: props.day50MovingAverage
988
- } : undefined,
989
- day200MovingAverage: props.day200MovingAverage !== undefined ? {
990
- set: props.day200MovingAverage
991
- } : undefined,
992
- sharesOutstanding: props.sharesOutstanding !== undefined ? {
993
- set: props.sharesOutstanding
994
- } : undefined,
995
- dividendDate: props.dividendDate !== undefined ? {
996
- set: props.dividendDate
997
- } : undefined,
998
- exDividendDate: props.exDividendDate !== undefined ? {
999
- set: props.exDividendDate
1000
- } : undefined,
1001
- askPrice: props.askPrice !== undefined ? {
1002
- set: props.askPrice
1003
- } : undefined,
1004
- bidPrice: props.bidPrice !== undefined ? {
1005
- set: props.bidPrice
1006
- } : undefined,
1007
- newsMentions: props.newsMentions ?
1008
- Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && ('id' in item || 'symbol' in item) && Object.keys(item).length === 1) ? {
1009
- connect: props.newsMentions.map((item) => ({
1010
- id: item.id
1011
- }))
1012
- } : { upsert: props.newsMentions.map((item) => ({
1013
- where: {
1014
- id: item.id !== undefined ? item.id : undefined,
1015
- url: item.url !== undefined ? item.url : undefined,
1016
- assetId: item.assetId !== undefined ? {
1017
- equals: item.assetId
1018
- } : undefined,
1019
- newsArticleId: item.newsArticleId !== undefined ? {
1020
- equals: item.newsArticleId
1021
- } : undefined,
1022
- },
1023
- update: {
1024
- id: item.id !== undefined ? {
1025
- set: item.id
1026
- } : undefined,
1027
- url: item.url !== undefined ? {
1028
- set: item.url
1029
- } : undefined,
1030
- relevancyScore: item.relevancyScore !== undefined ? {
1031
- set: item.relevancyScore
1032
- } : undefined,
1033
- sentimentScore: item.sentimentScore !== undefined ? {
1034
- set: item.sentimentScore
1035
- } : undefined,
1036
- sentimentLabel: item.sentimentLabel !== undefined ? {
1037
- set: item.sentimentLabel
1038
- } : undefined,
1039
- news: item.news ?
1040
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
1041
- ? {
1042
- connect: {
1043
- id: item.news.id
1044
- }
1045
- } : { upsert: {
1046
- where: {
1047
- id: item.news.id !== undefined ? {
1048
- equals: item.news.id
1049
- } : undefined,
1050
- title: item.news.title !== undefined ? {
1051
- equals: item.news.title
1052
- } : undefined,
1053
- url: item.news.url !== undefined ? {
1054
- equals: item.news.url
1055
- } : undefined,
1056
- },
1057
- update: {
1058
- id: item.news.id !== undefined ? {
1059
- set: item.news.id
1060
- } : undefined,
1061
- title: item.news.title !== undefined ? {
1062
- set: item.news.title
1063
- } : undefined,
1064
- content: item.news.content !== undefined ? {
1065
- set: item.news.content
1066
- } : undefined,
1067
- source: item.news.source !== undefined ? {
1068
- set: item.news.source
1069
- } : undefined,
1070
- sourceDomain: item.news.sourceDomain !== undefined ? {
1071
- set: item.news.sourceDomain
1072
- } : undefined,
1073
- url: item.news.url !== undefined ? {
1074
- set: item.news.url
1075
- } : undefined,
1076
- sentiment: item.news.sentiment !== undefined ? {
1077
- set: item.news.sentiment
1078
- } : undefined,
1079
- authors: item.news.authors !== undefined ? {
1080
- set: item.news.authors
1081
- } : undefined,
1082
- summary: item.news.summary !== undefined ? {
1083
- set: item.news.summary
1084
- } : undefined,
1085
- bannerImage: item.news.bannerImage !== undefined ? {
1086
- set: item.news.bannerImage
1087
- } : undefined,
1088
- timePublished: item.news.timePublished !== undefined ? {
1089
- set: item.news.timePublished
1090
- } : undefined,
1091
- category: item.news.category !== undefined ? {
1092
- set: item.news.category
1093
- } : undefined,
1094
- topics: item.news.topics !== undefined ? {
1095
- set: item.news.topics
1096
- } : undefined,
1097
- logo: item.news.logo !== undefined ? {
1098
- set: item.news.logo
1099
- } : undefined,
1100
- },
1101
- create: {
1102
- title: item.news.title !== undefined ? item.news.title : undefined,
1103
- content: item.news.content !== undefined ? item.news.content : undefined,
1104
- source: item.news.source !== undefined ? item.news.source : undefined,
1105
- sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1106
- url: item.news.url !== undefined ? item.news.url : undefined,
1107
- sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1108
- authors: item.news.authors !== undefined ? {
1109
- set: item.news.authors
1110
- } : undefined,
1111
- summary: item.news.summary !== undefined ? item.news.summary : undefined,
1112
- bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1113
- timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1114
- category: item.news.category !== undefined ? item.news.category : undefined,
1115
- topics: item.news.topics !== undefined ? {
1116
- set: item.news.topics
1117
- } : undefined,
1118
- logo: item.news.logo !== undefined ? item.news.logo : undefined,
1119
- },
1120
- }
1121
- } : undefined,
1122
- },
1123
- create: {
1124
- url: item.url !== undefined ? item.url : undefined,
1125
- relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
1126
- sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
1127
- sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
1128
- news: item.news ?
1129
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
1130
- ? { connect: {
1131
- id: item.news.id
1132
- }
1133
- }
1134
- : { connectOrCreate: {
1135
- where: {
1136
- id: item.news.id !== undefined ? item.news.id : undefined,
1137
- url: item.news.url !== undefined ? item.news.url : undefined,
1138
- title: item.news.title !== undefined ? {
1139
- equals: item.news.title
1140
- } : undefined,
1141
- },
1142
- create: {
1143
- title: item.news.title !== undefined ? item.news.title : undefined,
1144
- content: item.news.content !== undefined ? item.news.content : undefined,
1145
- source: item.news.source !== undefined ? item.news.source : undefined,
1146
- sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1147
- url: item.news.url !== undefined ? item.news.url : undefined,
1148
- sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1149
- authors: item.news.authors !== undefined ? {
1150
- set: item.news.authors
1151
- } : undefined,
1152
- summary: item.news.summary !== undefined ? item.news.summary : undefined,
1153
- bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1154
- timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1155
- category: item.news.category !== undefined ? item.news.category : undefined,
1156
- topics: item.news.topics !== undefined ? {
1157
- set: item.news.topics
1158
- } : undefined,
1159
- logo: item.news.logo !== undefined ? item.news.logo : undefined,
1160
- },
1161
- }
1162
- } : undefined,
1163
- },
1164
- }))
1165
- } : undefined,
1166
- },
1167
- };
1168
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1169
- try {
1170
- const response = await client.mutate({ mutation: UPSERT_ONE_ASSET, variables: filteredVariables });
1171
- if (response.errors && response.errors.length > 0)
1172
- throw new Error(response.errors[0].message);
1173
- if (response && response.data && response.data.upsertOneAsset) {
1174
- return response.data.upsertOneAsset;
1175
- }
1176
- else {
1177
- return null;
1178
- }
1179
- }
1180
- catch (error) {
1181
- console.error('Error in upsertOneAsset:', error);
1182
- throw error;
1183
- }
1184
- },
1185
- /**
1186
- * Update multiple Asset records.
1187
- * @param props - Array of Asset objects for the updated records.
1188
- * @param globalClient - Apollo Client instance.
1189
- * @returns The count of created records or null.
1190
- */
1191
- async updateMany(props, globalClient) {
1192
- const [modules, client] = await Promise.all([
1193
- (0, client_1.getApolloModules)(),
1194
- globalClient
1195
- ? Promise.resolve(globalClient)
1196
- : client_1.client
1197
- ]);
1198
- const { gql, ApolloError } = modules;
1199
- const UPDATE_MANY_ASSET = gql `
1200
- mutation updateManyAsset($data: [AssetCreateManyInput!]!) {
1201
- updateManyAsset(data: $data) {
1202
- count
1203
- }
1204
- }`;
1205
- const variables = props.map(prop => ({
1206
- where: {
1207
- id: prop.id !== undefined ? prop.id : undefined,
1208
- symbol: prop.symbol !== undefined ? prop.symbol : undefined,
1209
- name: prop.name !== undefined ? prop.name : undefined,
1210
- },
1211
- data: {
1212
- id: prop.id !== undefined ? {
1213
- set: prop.id
1214
- } : undefined,
1215
- symbol: prop.symbol !== undefined ? {
1216
- set: prop.symbol
1217
- } : undefined,
1218
- name: prop.name !== undefined ? {
1219
- set: prop.name
1220
- } : undefined,
1221
- type: prop.type !== undefined ? {
1222
- set: prop.type
1223
- } : undefined,
1224
- logoUrl: prop.logoUrl !== undefined ? {
1225
- set: prop.logoUrl
1226
- } : undefined,
1227
- description: prop.description !== undefined ? {
1228
- set: prop.description
1229
- } : undefined,
1230
- cik: prop.cik !== undefined ? {
1231
- set: prop.cik
1232
- } : undefined,
1233
- exchange: prop.exchange !== undefined ? {
1234
- set: prop.exchange
1235
- } : undefined,
1236
- currency: prop.currency !== undefined ? {
1237
- set: prop.currency
1238
- } : undefined,
1239
- country: prop.country !== undefined ? {
1240
- set: prop.country
1241
- } : undefined,
1242
- sector: prop.sector !== undefined ? {
1243
- set: prop.sector
1244
- } : undefined,
1245
- industry: prop.industry !== undefined ? {
1246
- set: prop.industry
1247
- } : undefined,
1248
- address: prop.address !== undefined ? {
1249
- set: prop.address
1250
- } : undefined,
1251
- officialSite: prop.officialSite !== undefined ? {
1252
- set: prop.officialSite
1253
- } : undefined,
1254
- fiscalYearEnd: prop.fiscalYearEnd !== undefined ? {
1255
- set: prop.fiscalYearEnd
1256
- } : undefined,
1257
- latestQuarter: prop.latestQuarter !== undefined ? {
1258
- set: prop.latestQuarter
1259
- } : undefined,
1260
- marketCapitalization: prop.marketCapitalization !== undefined ? {
1261
- set: prop.marketCapitalization
1262
- } : undefined,
1263
- ebitda: prop.ebitda !== undefined ? {
1264
- set: prop.ebitda
1265
- } : undefined,
1266
- peRatio: prop.peRatio !== undefined ? {
1267
- set: prop.peRatio
1268
- } : undefined,
1269
- pegRatio: prop.pegRatio !== undefined ? {
1270
- set: prop.pegRatio
1271
- } : undefined,
1272
- bookValue: prop.bookValue !== undefined ? {
1273
- set: prop.bookValue
1274
- } : undefined,
1275
- dividendPerShare: prop.dividendPerShare !== undefined ? {
1276
- set: prop.dividendPerShare
1277
- } : undefined,
1278
- dividendYield: prop.dividendYield !== undefined ? {
1279
- set: prop.dividendYield
1280
- } : undefined,
1281
- eps: prop.eps !== undefined ? {
1282
- set: prop.eps
1283
- } : undefined,
1284
- revenuePerShareTTM: prop.revenuePerShareTTM !== undefined ? {
1285
- set: prop.revenuePerShareTTM
1286
- } : undefined,
1287
- profitMargin: prop.profitMargin !== undefined ? {
1288
- set: prop.profitMargin
1289
- } : undefined,
1290
- operatingMarginTTM: prop.operatingMarginTTM !== undefined ? {
1291
- set: prop.operatingMarginTTM
1292
- } : undefined,
1293
- returnOnAssetsTTM: prop.returnOnAssetsTTM !== undefined ? {
1294
- set: prop.returnOnAssetsTTM
1295
- } : undefined,
1296
- returnOnEquityTTM: prop.returnOnEquityTTM !== undefined ? {
1297
- set: prop.returnOnEquityTTM
1298
- } : undefined,
1299
- revenueTTM: prop.revenueTTM !== undefined ? {
1300
- set: prop.revenueTTM
1301
- } : undefined,
1302
- grossProfitTTM: prop.grossProfitTTM !== undefined ? {
1303
- set: prop.grossProfitTTM
1304
- } : undefined,
1305
- dilutedEPSTTM: prop.dilutedEPSTTM !== undefined ? {
1306
- set: prop.dilutedEPSTTM
1307
- } : undefined,
1308
- quarterlyEarningsGrowthYOY: prop.quarterlyEarningsGrowthYOY !== undefined ? {
1309
- set: prop.quarterlyEarningsGrowthYOY
1310
- } : undefined,
1311
- quarterlyRevenueGrowthYOY: prop.quarterlyRevenueGrowthYOY !== undefined ? {
1312
- set: prop.quarterlyRevenueGrowthYOY
1313
- } : undefined,
1314
- analystTargetPrice: prop.analystTargetPrice !== undefined ? {
1315
- set: prop.analystTargetPrice
1316
- } : undefined,
1317
- analystRatingStrongBuy: prop.analystRatingStrongBuy !== undefined ? {
1318
- set: prop.analystRatingStrongBuy
1319
- } : undefined,
1320
- analystRatingBuy: prop.analystRatingBuy !== undefined ? {
1321
- set: prop.analystRatingBuy
1322
- } : undefined,
1323
- analystRatingHold: prop.analystRatingHold !== undefined ? {
1324
- set: prop.analystRatingHold
1325
- } : undefined,
1326
- analystRatingSell: prop.analystRatingSell !== undefined ? {
1327
- set: prop.analystRatingSell
1328
- } : undefined,
1329
- analystRatingStrongSell: prop.analystRatingStrongSell !== undefined ? {
1330
- set: prop.analystRatingStrongSell
1331
- } : undefined,
1332
- trailingPE: prop.trailingPE !== undefined ? {
1333
- set: prop.trailingPE
1334
- } : undefined,
1335
- forwardPE: prop.forwardPE !== undefined ? {
1336
- set: prop.forwardPE
1337
- } : undefined,
1338
- priceToSalesRatioTTM: prop.priceToSalesRatioTTM !== undefined ? {
1339
- set: prop.priceToSalesRatioTTM
1340
- } : undefined,
1341
- priceToBookRatio: prop.priceToBookRatio !== undefined ? {
1342
- set: prop.priceToBookRatio
1343
- } : undefined,
1344
- evToRevenue: prop.evToRevenue !== undefined ? {
1345
- set: prop.evToRevenue
1346
- } : undefined,
1347
- evToEbitda: prop.evToEbitda !== undefined ? {
1348
- set: prop.evToEbitda
1349
- } : undefined,
1350
- beta: prop.beta !== undefined ? {
1351
- set: prop.beta
1352
- } : undefined,
1353
- week52High: prop.week52High !== undefined ? {
1354
- set: prop.week52High
1355
- } : undefined,
1356
- week52Low: prop.week52Low !== undefined ? {
1357
- set: prop.week52Low
1358
- } : undefined,
1359
- day50MovingAverage: prop.day50MovingAverage !== undefined ? {
1360
- set: prop.day50MovingAverage
1361
- } : undefined,
1362
- day200MovingAverage: prop.day200MovingAverage !== undefined ? {
1363
- set: prop.day200MovingAverage
1364
- } : undefined,
1365
- sharesOutstanding: prop.sharesOutstanding !== undefined ? {
1366
- set: prop.sharesOutstanding
1367
- } : undefined,
1368
- dividendDate: prop.dividendDate !== undefined ? {
1369
- set: prop.dividendDate
1370
- } : undefined,
1371
- exDividendDate: prop.exDividendDate !== undefined ? {
1372
- set: prop.exDividendDate
1373
- } : undefined,
1374
- askPrice: prop.askPrice !== undefined ? {
1375
- set: prop.askPrice
1376
- } : undefined,
1377
- bidPrice: prop.bidPrice !== undefined ? {
1378
- set: prop.bidPrice
1379
- } : undefined,
1380
- createdAt: prop.createdAt !== undefined ? {
1381
- set: prop.createdAt
1382
- } : undefined,
1383
- updatedAt: prop.updatedAt !== undefined ? {
1384
- set: prop.updatedAt
1385
- } : undefined,
1386
- newsMentions: prop.newsMentions ?
1387
- Array.isArray(prop.newsMentions) && prop.newsMentions.length > 0 && prop.newsMentions.every((item) => typeof item === 'object' && ('id' in item || 'symbol' in item) && Object.keys(item).length === 1) ? {
1388
- connect: prop.newsMentions.map((item) => ({
1389
- id: item.id
1390
- }))
1391
- } : { upsert: prop.newsMentions.map((item) => ({
1392
- where: {
1393
- id: item.id !== undefined ? item.id : undefined,
1394
- url: item.url !== undefined ? item.url : undefined,
1395
- assetId: item.assetId !== undefined ? {
1396
- equals: item.assetId
1397
- } : undefined,
1398
- newsArticleId: item.newsArticleId !== undefined ? {
1399
- equals: item.newsArticleId
1400
- } : undefined,
1401
- },
1402
- update: {
1403
- id: item.id !== undefined ? {
1404
- set: item.id
1405
- } : undefined,
1406
- url: item.url !== undefined ? {
1407
- set: item.url
1408
- } : undefined,
1409
- relevancyScore: item.relevancyScore !== undefined ? {
1410
- set: item.relevancyScore
1411
- } : undefined,
1412
- sentimentScore: item.sentimentScore !== undefined ? {
1413
- set: item.sentimentScore
1414
- } : undefined,
1415
- sentimentLabel: item.sentimentLabel !== undefined ? {
1416
- set: item.sentimentLabel
1417
- } : undefined,
1418
- news: item.news ?
1419
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
1420
- ? {
1421
- connect: {
1422
- id: item.news.id
1423
- }
1424
- } : { upsert: {
1425
- where: {
1426
- id: item.news.id !== undefined ? {
1427
- equals: item.news.id
1428
- } : undefined,
1429
- title: item.news.title !== undefined ? {
1430
- equals: item.news.title
1431
- } : undefined,
1432
- url: item.news.url !== undefined ? {
1433
- equals: item.news.url
1434
- } : undefined,
1435
- },
1436
- update: {
1437
- id: item.news.id !== undefined ? {
1438
- set: item.news.id
1439
- } : undefined,
1440
- title: item.news.title !== undefined ? {
1441
- set: item.news.title
1442
- } : undefined,
1443
- content: item.news.content !== undefined ? {
1444
- set: item.news.content
1445
- } : undefined,
1446
- source: item.news.source !== undefined ? {
1447
- set: item.news.source
1448
- } : undefined,
1449
- sourceDomain: item.news.sourceDomain !== undefined ? {
1450
- set: item.news.sourceDomain
1451
- } : undefined,
1452
- url: item.news.url !== undefined ? {
1453
- set: item.news.url
1454
- } : undefined,
1455
- sentiment: item.news.sentiment !== undefined ? {
1456
- set: item.news.sentiment
1457
- } : undefined,
1458
- authors: item.news.authors !== undefined ? {
1459
- set: item.news.authors
1460
- } : undefined,
1461
- summary: item.news.summary !== undefined ? {
1462
- set: item.news.summary
1463
- } : undefined,
1464
- bannerImage: item.news.bannerImage !== undefined ? {
1465
- set: item.news.bannerImage
1466
- } : undefined,
1467
- timePublished: item.news.timePublished !== undefined ? {
1468
- set: item.news.timePublished
1469
- } : undefined,
1470
- category: item.news.category !== undefined ? {
1471
- set: item.news.category
1472
- } : undefined,
1473
- topics: item.news.topics !== undefined ? {
1474
- set: item.news.topics
1475
- } : undefined,
1476
- logo: item.news.logo !== undefined ? {
1477
- set: item.news.logo
1478
- } : undefined,
1479
- },
1480
- create: {
1481
- title: item.news.title !== undefined ? item.news.title : undefined,
1482
- content: item.news.content !== undefined ? item.news.content : undefined,
1483
- source: item.news.source !== undefined ? item.news.source : undefined,
1484
- sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1485
- url: item.news.url !== undefined ? item.news.url : undefined,
1486
- sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1487
- authors: item.news.authors !== undefined ? {
1488
- set: item.news.authors
1489
- } : undefined,
1490
- summary: item.news.summary !== undefined ? item.news.summary : undefined,
1491
- bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1492
- timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1493
- category: item.news.category !== undefined ? item.news.category : undefined,
1494
- topics: item.news.topics !== undefined ? {
1495
- set: item.news.topics
2117
+ },
2118
+ create: {
2119
+ url: item.url !== undefined ? item.url : undefined,
2120
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
2121
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
2122
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
2123
+ news: item.news ?
2124
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
2125
+ ? { connect: {
2126
+ id: item.news.id
2127
+ }
2128
+ }
2129
+ : { connectOrCreate: {
2130
+ where: {
2131
+ id: item.news.id !== undefined ? item.news.id : undefined,
2132
+ url: item.news.url !== undefined ? item.news.url : undefined,
2133
+ title: item.news.title !== undefined ? {
2134
+ equals: item.news.title
2135
+ } : undefined,
2136
+ },
2137
+ create: {
2138
+ title: item.news.title !== undefined ? item.news.title : undefined,
2139
+ content: item.news.content !== undefined ? item.news.content : undefined,
2140
+ source: item.news.source !== undefined ? item.news.source : undefined,
2141
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
2142
+ url: item.news.url !== undefined ? item.news.url : undefined,
2143
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
2144
+ authors: item.news.authors !== undefined ? {
2145
+ set: item.news.authors
2146
+ } : undefined,
2147
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
2148
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
2149
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
2150
+ category: item.news.category !== undefined ? item.news.category : undefined,
2151
+ topics: item.news.topics !== undefined ? {
2152
+ set: item.news.topics
2153
+ } : undefined,
2154
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
2155
+ },
2156
+ }
1496
2157
  } : undefined,
1497
- logo: item.news.logo !== undefined ? item.news.logo : undefined,
1498
- },
1499
- }
1500
- } : undefined,
1501
- },
1502
- create: {
1503
- url: item.url !== undefined ? item.url : undefined,
1504
- relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
1505
- sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
1506
- sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
1507
- news: item.news ?
1508
- typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
1509
- ? { connect: {
1510
- id: item.news.id
1511
- }
1512
- }
1513
- : { connectOrCreate: {
1514
- where: {
1515
- id: item.news.id !== undefined ? item.news.id : undefined,
1516
- url: item.news.url !== undefined ? item.news.url : undefined,
1517
- title: item.news.title !== undefined ? {
1518
- equals: item.news.title
1519
- } : undefined,
1520
- },
1521
- create: {
1522
- title: item.news.title !== undefined ? item.news.title : undefined,
1523
- content: item.news.content !== undefined ? item.news.content : undefined,
1524
- source: item.news.source !== undefined ? item.news.source : undefined,
1525
- sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1526
- url: item.news.url !== undefined ? item.news.url : undefined,
1527
- sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1528
- authors: item.news.authors !== undefined ? {
1529
- set: item.news.authors
1530
- } : undefined,
1531
- summary: item.news.summary !== undefined ? item.news.summary : undefined,
1532
- bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1533
- timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1534
- category: item.news.category !== undefined ? item.news.category : undefined,
1535
- topics: item.news.topics !== undefined ? {
1536
- set: item.news.topics
1537
- } : undefined,
1538
- logo: item.news.logo !== undefined ? item.news.logo : undefined,
1539
- },
1540
- }
1541
- } : undefined,
1542
- },
1543
- }))
1544
- } : undefined,
1545
- },
1546
- }));
1547
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1548
- try {
1549
- const response = await client.mutate({ mutation: UPDATE_MANY_ASSET, variables: filteredVariables });
1550
- if (response.errors && response.errors.length > 0)
1551
- throw new Error(response.errors[0].message);
1552
- if (response && response.data && response.data.updateManyAsset) {
1553
- return response.data.updateManyAsset;
2158
+ },
2159
+ }))
2160
+ } : undefined,
2161
+ },
2162
+ }));
2163
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
2164
+ const response = await client.mutate({
2165
+ mutation: UPDATE_MANY_ASSET,
2166
+ variables: filteredVariables,
2167
+ // Don't cache mutations, but ensure we're using the freshest context
2168
+ fetchPolicy: 'no-cache'
2169
+ });
2170
+ if (response.errors && response.errors.length > 0)
2171
+ throw new Error(response.errors[0].message);
2172
+ if (response && response.data && response.data.updateManyAsset) {
2173
+ return response.data.updateManyAsset;
2174
+ }
2175
+ else {
2176
+ return null;
2177
+ }
1554
2178
  }
1555
- else {
1556
- return null;
2179
+ catch (error) {
2180
+ lastError = error;
2181
+ // Check if this is a database connection error that we should retry
2182
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
2183
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
2184
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
2185
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
2186
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
2187
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
2188
+ retryCount++;
2189
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
2190
+ console.warn("Database connection error, retrying...");
2191
+ await new Promise(resolve => setTimeout(resolve, delay));
2192
+ continue;
2193
+ }
2194
+ // Log the error and rethrow
2195
+ console.error("Database error occurred:", error);
2196
+ throw error;
1557
2197
  }
1558
2198
  }
1559
- catch (error) {
1560
- console.error('Error in updateManyAsset:', error);
1561
- throw error;
1562
- }
2199
+ // If we exhausted retries, throw the last error
2200
+ throw lastError;
1563
2201
  },
1564
2202
  /**
1565
2203
  * Delete a single Asset record.
1566
- * @param props - Properties to update.
2204
+ * Enhanced with connection resilience against Prisma connection errors.
2205
+ * @param props - Properties to identify the record to delete.
1567
2206
  * @param globalClient - Apollo Client instance.
1568
2207
  * @returns The deleted Asset or null.
1569
2208
  */
1570
2209
  async delete(props, globalClient) {
1571
- const [modules, client] = await Promise.all([
1572
- (0, client_1.getApolloModules)(),
1573
- globalClient
1574
- ? Promise.resolve(globalClient)
1575
- : client_1.client
1576
- ]);
1577
- const { gql, ApolloError } = modules;
1578
- const DELETE_ONE_ASSET = gql `
1579
- mutation deleteOneAsset($where: AssetWhereUniqueInput!) {
1580
- deleteOneAsset(where: $where) {
1581
- id
1582
- }
1583
- }`;
1584
- const variables = {
1585
- where: {
1586
- id: props.id ? props.id : undefined,
2210
+ var _a, _b, _c, _d, _e;
2211
+ // Maximum number of retries for database connection issues
2212
+ const MAX_RETRIES = 3;
2213
+ let retryCount = 0;
2214
+ let lastError = null;
2215
+ // Retry loop to handle potential database connection issues
2216
+ while (retryCount < MAX_RETRIES) {
2217
+ try {
2218
+ const [modules, client] = await Promise.all([
2219
+ (0, client_1.getApolloModules)(),
2220
+ globalClient
2221
+ ? Promise.resolve(globalClient)
2222
+ : client_1.client
2223
+ ]);
2224
+ const { gql, ApolloError } = modules;
2225
+ const DELETE_ONE_ASSET = gql `
2226
+ mutation deleteOneAsset($where: AssetWhereUniqueInput!) {
2227
+ deleteOneAsset(where: $where) {
2228
+ id
1587
2229
  }
1588
- };
1589
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1590
- try {
1591
- const response = await client.mutate({ mutation: DELETE_ONE_ASSET, variables: filteredVariables });
1592
- if (response.errors && response.errors.length > 0)
1593
- throw new Error(response.errors[0].message);
1594
- if (response && response.data && response.data.deleteOneAsset) {
1595
- return response.data.deleteOneAsset;
2230
+ }`;
2231
+ const variables = {
2232
+ where: {
2233
+ id: props.id ? props.id : undefined,
2234
+ }
2235
+ };
2236
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
2237
+ const response = await client.mutate({
2238
+ mutation: DELETE_ONE_ASSET,
2239
+ variables: filteredVariables,
2240
+ // Don't cache mutations, but ensure we're using the freshest context
2241
+ fetchPolicy: 'no-cache'
2242
+ });
2243
+ if (response.errors && response.errors.length > 0)
2244
+ throw new Error(response.errors[0].message);
2245
+ if (response && response.data && response.data.deleteOneAsset) {
2246
+ return response.data.deleteOneAsset;
2247
+ }
2248
+ else {
2249
+ return null;
2250
+ }
1596
2251
  }
1597
- else {
1598
- return null;
2252
+ catch (error) {
2253
+ lastError = error;
2254
+ // Check if this is a database connection error that we should retry
2255
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
2256
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
2257
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
2258
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
2259
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
2260
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
2261
+ retryCount++;
2262
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
2263
+ console.warn("Database connection error, retrying...");
2264
+ await new Promise(resolve => setTimeout(resolve, delay));
2265
+ continue;
2266
+ }
2267
+ // Log the error and rethrow
2268
+ console.error("Database error occurred:", error);
2269
+ throw error;
1599
2270
  }
1600
2271
  }
1601
- catch (error) {
1602
- console.error('Error in deleteOneAsset:', error);
1603
- throw error;
1604
- }
2272
+ // If we exhausted retries, throw the last error
2273
+ throw lastError;
1605
2274
  },
1606
2275
  /**
1607
2276
  * Retrieve a single Asset record by ID.
1608
- * @param props - Properties to update.
2277
+ * Enhanced with connection resilience against Prisma connection errors.
2278
+ * @param props - Properties to identify the record.
1609
2279
  * @param globalClient - Apollo Client instance.
2280
+ * @param whereInput - Optional custom where input.
1610
2281
  * @returns The retrieved Asset or null.
1611
2282
  */
1612
2283
  async get(props, globalClient, whereInput) {
1613
- var _a, _b;
1614
- const [modules, client] = await Promise.all([
1615
- (0, client_1.getApolloModules)(),
1616
- globalClient
1617
- ? Promise.resolve(globalClient)
1618
- : client_1.client
1619
- ]);
1620
- const { gql, ApolloError } = modules;
1621
- const GET_ASSET = gql `
1622
- query getAsset($where: AssetWhereUniqueInput!) {
1623
- getAsset(where: $where) {
1624
- ${selectionSet}
1625
- }
1626
- }`;
1627
- const variables = {
1628
- where: whereInput ? whereInput : {
1629
- id: props.id !== undefined ? props.id : undefined,
1630
- symbol: props.symbol !== undefined ? props.symbol : undefined,
1631
- name: props.name !== undefined ? props.name : undefined,
1632
- },
1633
- };
1634
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1635
- try {
1636
- const response = await client.query({ query: GET_ASSET, variables: filteredVariables });
1637
- if (response.errors && response.errors.length > 0)
1638
- throw new Error(response.errors[0].message);
1639
- return (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.getAsset) !== null && _b !== void 0 ? _b : null;
1640
- }
1641
- catch (error) {
1642
- if (error instanceof ApolloError && error.message === 'No Asset found') {
1643
- return null;
2284
+ var _a, _b, _c, _d, _e, _f, _g;
2285
+ // Maximum number of retries for database connection issues
2286
+ const MAX_RETRIES = 3;
2287
+ let retryCount = 0;
2288
+ let lastError = null;
2289
+ // Retry loop to handle potential database connection issues
2290
+ while (retryCount < MAX_RETRIES) {
2291
+ try {
2292
+ const [modules, client] = await Promise.all([
2293
+ (0, client_1.getApolloModules)(),
2294
+ globalClient
2295
+ ? Promise.resolve(globalClient)
2296
+ : client_1.client
2297
+ ]);
2298
+ const { gql, ApolloError } = modules;
2299
+ const GET_ASSET = gql `
2300
+ query getAsset($where: AssetWhereUniqueInput!) {
2301
+ getAsset(where: $where) {
2302
+ ${selectionSet}
2303
+ }
2304
+ }`;
2305
+ const variables = {
2306
+ where: whereInput ? whereInput : {
2307
+ id: props.id !== undefined ? props.id : undefined,
2308
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
2309
+ name: props.name !== undefined ? props.name : undefined,
2310
+ type: props.type !== undefined ? {
2311
+ equals: props.type
2312
+ } : undefined,
2313
+ logoUrl: props.logoUrl !== undefined ? {
2314
+ equals: props.logoUrl
2315
+ } : undefined,
2316
+ description: props.description !== undefined ? {
2317
+ equals: props.description
2318
+ } : undefined,
2319
+ cik: props.cik !== undefined ? {
2320
+ equals: props.cik
2321
+ } : undefined,
2322
+ exchange: props.exchange !== undefined ? {
2323
+ equals: props.exchange
2324
+ } : undefined,
2325
+ currency: props.currency !== undefined ? {
2326
+ equals: props.currency
2327
+ } : undefined,
2328
+ country: props.country !== undefined ? {
2329
+ equals: props.country
2330
+ } : undefined,
2331
+ sector: props.sector !== undefined ? {
2332
+ equals: props.sector
2333
+ } : undefined,
2334
+ industry: props.industry !== undefined ? {
2335
+ equals: props.industry
2336
+ } : undefined,
2337
+ address: props.address !== undefined ? {
2338
+ equals: props.address
2339
+ } : undefined,
2340
+ officialSite: props.officialSite !== undefined ? {
2341
+ equals: props.officialSite
2342
+ } : undefined,
2343
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
2344
+ equals: props.fiscalYearEnd
2345
+ } : undefined,
2346
+ latestQuarter: props.latestQuarter !== undefined ? {
2347
+ equals: props.latestQuarter
2348
+ } : undefined,
2349
+ marketCapitalization: props.marketCapitalization !== undefined ? {
2350
+ equals: props.marketCapitalization
2351
+ } : undefined,
2352
+ ebitda: props.ebitda !== undefined ? {
2353
+ equals: props.ebitda
2354
+ } : undefined,
2355
+ peRatio: props.peRatio !== undefined ? {
2356
+ equals: props.peRatio
2357
+ } : undefined,
2358
+ pegRatio: props.pegRatio !== undefined ? {
2359
+ equals: props.pegRatio
2360
+ } : undefined,
2361
+ bookValue: props.bookValue !== undefined ? {
2362
+ equals: props.bookValue
2363
+ } : undefined,
2364
+ dividendPerShare: props.dividendPerShare !== undefined ? {
2365
+ equals: props.dividendPerShare
2366
+ } : undefined,
2367
+ dividendYield: props.dividendYield !== undefined ? {
2368
+ equals: props.dividendYield
2369
+ } : undefined,
2370
+ eps: props.eps !== undefined ? {
2371
+ equals: props.eps
2372
+ } : undefined,
2373
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
2374
+ equals: props.revenuePerShareTTM
2375
+ } : undefined,
2376
+ profitMargin: props.profitMargin !== undefined ? {
2377
+ equals: props.profitMargin
2378
+ } : undefined,
2379
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
2380
+ equals: props.operatingMarginTTM
2381
+ } : undefined,
2382
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
2383
+ equals: props.returnOnAssetsTTM
2384
+ } : undefined,
2385
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
2386
+ equals: props.returnOnEquityTTM
2387
+ } : undefined,
2388
+ revenueTTM: props.revenueTTM !== undefined ? {
2389
+ equals: props.revenueTTM
2390
+ } : undefined,
2391
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
2392
+ equals: props.grossProfitTTM
2393
+ } : undefined,
2394
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
2395
+ equals: props.dilutedEPSTTM
2396
+ } : undefined,
2397
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
2398
+ equals: props.quarterlyEarningsGrowthYOY
2399
+ } : undefined,
2400
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
2401
+ equals: props.quarterlyRevenueGrowthYOY
2402
+ } : undefined,
2403
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
2404
+ equals: props.analystTargetPrice
2405
+ } : undefined,
2406
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
2407
+ equals: props.analystRatingStrongBuy
2408
+ } : undefined,
2409
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
2410
+ equals: props.analystRatingBuy
2411
+ } : undefined,
2412
+ analystRatingHold: props.analystRatingHold !== undefined ? {
2413
+ equals: props.analystRatingHold
2414
+ } : undefined,
2415
+ analystRatingSell: props.analystRatingSell !== undefined ? {
2416
+ equals: props.analystRatingSell
2417
+ } : undefined,
2418
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
2419
+ equals: props.analystRatingStrongSell
2420
+ } : undefined,
2421
+ trailingPE: props.trailingPE !== undefined ? {
2422
+ equals: props.trailingPE
2423
+ } : undefined,
2424
+ forwardPE: props.forwardPE !== undefined ? {
2425
+ equals: props.forwardPE
2426
+ } : undefined,
2427
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
2428
+ equals: props.priceToSalesRatioTTM
2429
+ } : undefined,
2430
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
2431
+ equals: props.priceToBookRatio
2432
+ } : undefined,
2433
+ evToRevenue: props.evToRevenue !== undefined ? {
2434
+ equals: props.evToRevenue
2435
+ } : undefined,
2436
+ evToEbitda: props.evToEbitda !== undefined ? {
2437
+ equals: props.evToEbitda
2438
+ } : undefined,
2439
+ beta: props.beta !== undefined ? {
2440
+ equals: props.beta
2441
+ } : undefined,
2442
+ week52High: props.week52High !== undefined ? {
2443
+ equals: props.week52High
2444
+ } : undefined,
2445
+ week52Low: props.week52Low !== undefined ? {
2446
+ equals: props.week52Low
2447
+ } : undefined,
2448
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
2449
+ equals: props.day50MovingAverage
2450
+ } : undefined,
2451
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
2452
+ equals: props.day200MovingAverage
2453
+ } : undefined,
2454
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
2455
+ equals: props.sharesOutstanding
2456
+ } : undefined,
2457
+ dividendDate: props.dividendDate !== undefined ? {
2458
+ equals: props.dividendDate
2459
+ } : undefined,
2460
+ exDividendDate: props.exDividendDate !== undefined ? {
2461
+ equals: props.exDividendDate
2462
+ } : undefined,
2463
+ createdAt: props.createdAt !== undefined ? {
2464
+ equals: props.createdAt
2465
+ } : undefined,
2466
+ updatedAt: props.updatedAt !== undefined ? {
2467
+ equals: props.updatedAt
2468
+ } : undefined,
2469
+ },
2470
+ };
2471
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
2472
+ const response = await client.query({
2473
+ query: GET_ASSET,
2474
+ variables: filteredVariables,
2475
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
2476
+ });
2477
+ if (response.errors && response.errors.length > 0)
2478
+ throw new Error(response.errors[0].message);
2479
+ return (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.getAsset) !== null && _b !== void 0 ? _b : null;
1644
2480
  }
1645
- else {
1646
- console.error('Error in getAsset:', error);
2481
+ catch (error) {
2482
+ lastError = error;
2483
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
2484
+ if (error.message === 'No Asset found') {
2485
+ return null;
2486
+ }
2487
+ // Check if this is a database connection error that we should retry
2488
+ const isConnectionError = ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Server has closed the connection')) ||
2489
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Cannot reach database server')) ||
2490
+ ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('Connection timed out')) ||
2491
+ ((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('Accelerate')) || // Prisma Accelerate proxy errors
2492
+ (error.networkError && ((_g = error.networkError.message) === null || _g === void 0 ? void 0 : _g.includes('Failed to fetch')));
2493
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
2494
+ retryCount++;
2495
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
2496
+ console.warn("Database connection error, retrying...");
2497
+ await new Promise(resolve => setTimeout(resolve, delay));
2498
+ continue;
2499
+ }
2500
+ // Log the error and rethrow
2501
+ console.error("Database error occurred:", error);
1647
2502
  throw error;
1648
2503
  }
1649
2504
  }
2505
+ // If we exhausted retries, throw the last error
2506
+ throw lastError;
1650
2507
  },
1651
2508
  /**
1652
2509
  * Retrieve all Assets records.
2510
+ * Enhanced with connection resilience against Prisma connection errors.
1653
2511
  * @param globalClient - Apollo Client instance.
1654
2512
  * @returns An array of Asset records or null.
1655
2513
  */
1656
2514
  async getAll(globalClient) {
1657
- var _a, _b;
1658
- const [modules, client] = await Promise.all([
1659
- (0, client_1.getApolloModules)(),
1660
- globalClient
1661
- ? Promise.resolve(globalClient)
1662
- : client_1.client
1663
- ]);
1664
- const { gql, ApolloError } = modules;
1665
- const GET_ALL_ASSET = gql `
1666
- query getAllAsset {
1667
- assets {
1668
- ${selectionSet}
1669
- }
1670
- }`;
1671
- try {
1672
- const response = await client.query({ query: GET_ALL_ASSET });
1673
- if (response.errors && response.errors.length > 0)
1674
- throw new Error(response.errors[0].message);
1675
- return (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.assets) !== null && _b !== void 0 ? _b : null;
1676
- }
1677
- catch (error) {
1678
- if (error instanceof ApolloError && error.message === 'No Asset found') {
1679
- return null;
2515
+ var _a, _b, _c, _d, _e, _f, _g;
2516
+ // Maximum number of retries for database connection issues
2517
+ const MAX_RETRIES = 3;
2518
+ let retryCount = 0;
2519
+ let lastError = null;
2520
+ // Retry loop to handle potential database connection issues
2521
+ while (retryCount < MAX_RETRIES) {
2522
+ try {
2523
+ const [modules, client] = await Promise.all([
2524
+ (0, client_1.getApolloModules)(),
2525
+ globalClient
2526
+ ? Promise.resolve(globalClient)
2527
+ : client_1.client
2528
+ ]);
2529
+ const { gql, ApolloError } = modules;
2530
+ const GET_ALL_ASSET = gql `
2531
+ query getAllAsset {
2532
+ assets {
2533
+ ${selectionSet}
2534
+ }
2535
+ }`;
2536
+ const response = await client.query({
2537
+ query: GET_ALL_ASSET,
2538
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
2539
+ });
2540
+ if (response.errors && response.errors.length > 0)
2541
+ throw new Error(response.errors[0].message);
2542
+ return (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.assets) !== null && _b !== void 0 ? _b : null;
1680
2543
  }
1681
- else {
1682
- console.error('Error in getAsset:', error);
2544
+ catch (error) {
2545
+ lastError = error;
2546
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
2547
+ if (error.message === 'No Asset found') {
2548
+ return null;
2549
+ }
2550
+ // Check if this is a database connection error that we should retry
2551
+ const isConnectionError = ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Server has closed the connection')) ||
2552
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Cannot reach database server')) ||
2553
+ ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('Connection timed out')) ||
2554
+ ((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('Accelerate')) || // Prisma Accelerate proxy errors
2555
+ (error.networkError && ((_g = error.networkError.message) === null || _g === void 0 ? void 0 : _g.includes('Failed to fetch')));
2556
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
2557
+ retryCount++;
2558
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
2559
+ console.warn("Database connection error, retrying...");
2560
+ await new Promise(resolve => setTimeout(resolve, delay));
2561
+ continue;
2562
+ }
2563
+ // Log the error and rethrow
2564
+ console.error("Database error occurred:", error);
1683
2565
  throw error;
1684
2566
  }
1685
2567
  }
2568
+ // If we exhausted retries, throw the last error
2569
+ throw lastError;
1686
2570
  },
1687
2571
  /**
1688
2572
  * Find multiple Asset records based on conditions.
2573
+ * Enhanced with connection resilience against Prisma connection errors.
1689
2574
  * @param props - Conditions to find records.
1690
2575
  * @param globalClient - Apollo Client instance.
2576
+ * @param whereInput - Optional custom where input.
1691
2577
  * @returns An array of found Asset records or null.
1692
2578
  */
1693
2579
  async findMany(props, globalClient, whereInput) {
1694
- const [modules, client] = await Promise.all([
1695
- (0, client_1.getApolloModules)(),
1696
- globalClient
1697
- ? Promise.resolve(globalClient)
1698
- : client_1.client
1699
- ]);
1700
- const { gql, ApolloError } = modules;
1701
- const FIND_MANY_ASSET = gql `
1702
- query findManyAsset($where: AssetWhereInput!) {
1703
- assets(where: $where) {
1704
- ${selectionSet}
1705
- }
1706
- }`;
1707
- const variables = {
1708
- where: whereInput ? whereInput : {
1709
- id: props.id !== undefined ? {
1710
- equals: props.id
1711
- } : undefined,
1712
- symbol: props.symbol !== undefined ? {
1713
- equals: props.symbol
1714
- } : undefined,
1715
- name: props.name !== undefined ? {
1716
- equals: props.name
1717
- } : undefined,
1718
- },
1719
- };
1720
- const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1721
- try {
1722
- const response = await client.query({ query: FIND_MANY_ASSET, variables: filteredVariables });
1723
- if (response.errors && response.errors.length > 0)
1724
- throw new Error(response.errors[0].message);
1725
- if (response && response.data && response.data.assets) {
1726
- return response.data.assets;
1727
- }
1728
- else {
1729
- return [];
2580
+ var _a, _b, _c, _d, _e;
2581
+ // Maximum number of retries for database connection issues
2582
+ const MAX_RETRIES = 3;
2583
+ let retryCount = 0;
2584
+ let lastError = null;
2585
+ // Retry loop to handle potential database connection issues
2586
+ while (retryCount < MAX_RETRIES) {
2587
+ try {
2588
+ const [modules, client] = await Promise.all([
2589
+ (0, client_1.getApolloModules)(),
2590
+ globalClient
2591
+ ? Promise.resolve(globalClient)
2592
+ : client_1.client
2593
+ ]);
2594
+ const { gql, ApolloError } = modules;
2595
+ const FIND_MANY_ASSET = gql `
2596
+ query findManyAsset($where: AssetWhereInput!) {
2597
+ assets(where: $where) {
2598
+ ${selectionSet}
1730
2599
  }
1731
- }
1732
- catch (error) {
1733
- if (error instanceof ApolloError && error.message === 'No Asset found') {
1734
- return null;
2600
+ }`;
2601
+ const variables = {
2602
+ where: whereInput ? whereInput : {
2603
+ id: props.id !== undefined ? props.id : undefined,
2604
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
2605
+ name: props.name !== undefined ? props.name : undefined,
2606
+ type: props.type !== undefined ? {
2607
+ equals: props.type
2608
+ } : undefined,
2609
+ logoUrl: props.logoUrl !== undefined ? {
2610
+ equals: props.logoUrl
2611
+ } : undefined,
2612
+ description: props.description !== undefined ? {
2613
+ equals: props.description
2614
+ } : undefined,
2615
+ cik: props.cik !== undefined ? {
2616
+ equals: props.cik
2617
+ } : undefined,
2618
+ exchange: props.exchange !== undefined ? {
2619
+ equals: props.exchange
2620
+ } : undefined,
2621
+ currency: props.currency !== undefined ? {
2622
+ equals: props.currency
2623
+ } : undefined,
2624
+ country: props.country !== undefined ? {
2625
+ equals: props.country
2626
+ } : undefined,
2627
+ sector: props.sector !== undefined ? {
2628
+ equals: props.sector
2629
+ } : undefined,
2630
+ industry: props.industry !== undefined ? {
2631
+ equals: props.industry
2632
+ } : undefined,
2633
+ address: props.address !== undefined ? {
2634
+ equals: props.address
2635
+ } : undefined,
2636
+ officialSite: props.officialSite !== undefined ? {
2637
+ equals: props.officialSite
2638
+ } : undefined,
2639
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
2640
+ equals: props.fiscalYearEnd
2641
+ } : undefined,
2642
+ latestQuarter: props.latestQuarter !== undefined ? {
2643
+ equals: props.latestQuarter
2644
+ } : undefined,
2645
+ marketCapitalization: props.marketCapitalization !== undefined ? {
2646
+ equals: props.marketCapitalization
2647
+ } : undefined,
2648
+ ebitda: props.ebitda !== undefined ? {
2649
+ equals: props.ebitda
2650
+ } : undefined,
2651
+ peRatio: props.peRatio !== undefined ? {
2652
+ equals: props.peRatio
2653
+ } : undefined,
2654
+ pegRatio: props.pegRatio !== undefined ? {
2655
+ equals: props.pegRatio
2656
+ } : undefined,
2657
+ bookValue: props.bookValue !== undefined ? {
2658
+ equals: props.bookValue
2659
+ } : undefined,
2660
+ dividendPerShare: props.dividendPerShare !== undefined ? {
2661
+ equals: props.dividendPerShare
2662
+ } : undefined,
2663
+ dividendYield: props.dividendYield !== undefined ? {
2664
+ equals: props.dividendYield
2665
+ } : undefined,
2666
+ eps: props.eps !== undefined ? {
2667
+ equals: props.eps
2668
+ } : undefined,
2669
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
2670
+ equals: props.revenuePerShareTTM
2671
+ } : undefined,
2672
+ profitMargin: props.profitMargin !== undefined ? {
2673
+ equals: props.profitMargin
2674
+ } : undefined,
2675
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
2676
+ equals: props.operatingMarginTTM
2677
+ } : undefined,
2678
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
2679
+ equals: props.returnOnAssetsTTM
2680
+ } : undefined,
2681
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
2682
+ equals: props.returnOnEquityTTM
2683
+ } : undefined,
2684
+ revenueTTM: props.revenueTTM !== undefined ? {
2685
+ equals: props.revenueTTM
2686
+ } : undefined,
2687
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
2688
+ equals: props.grossProfitTTM
2689
+ } : undefined,
2690
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
2691
+ equals: props.dilutedEPSTTM
2692
+ } : undefined,
2693
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
2694
+ equals: props.quarterlyEarningsGrowthYOY
2695
+ } : undefined,
2696
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
2697
+ equals: props.quarterlyRevenueGrowthYOY
2698
+ } : undefined,
2699
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
2700
+ equals: props.analystTargetPrice
2701
+ } : undefined,
2702
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
2703
+ equals: props.analystRatingStrongBuy
2704
+ } : undefined,
2705
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
2706
+ equals: props.analystRatingBuy
2707
+ } : undefined,
2708
+ analystRatingHold: props.analystRatingHold !== undefined ? {
2709
+ equals: props.analystRatingHold
2710
+ } : undefined,
2711
+ analystRatingSell: props.analystRatingSell !== undefined ? {
2712
+ equals: props.analystRatingSell
2713
+ } : undefined,
2714
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
2715
+ equals: props.analystRatingStrongSell
2716
+ } : undefined,
2717
+ trailingPE: props.trailingPE !== undefined ? {
2718
+ equals: props.trailingPE
2719
+ } : undefined,
2720
+ forwardPE: props.forwardPE !== undefined ? {
2721
+ equals: props.forwardPE
2722
+ } : undefined,
2723
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
2724
+ equals: props.priceToSalesRatioTTM
2725
+ } : undefined,
2726
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
2727
+ equals: props.priceToBookRatio
2728
+ } : undefined,
2729
+ evToRevenue: props.evToRevenue !== undefined ? {
2730
+ equals: props.evToRevenue
2731
+ } : undefined,
2732
+ evToEbitda: props.evToEbitda !== undefined ? {
2733
+ equals: props.evToEbitda
2734
+ } : undefined,
2735
+ beta: props.beta !== undefined ? {
2736
+ equals: props.beta
2737
+ } : undefined,
2738
+ week52High: props.week52High !== undefined ? {
2739
+ equals: props.week52High
2740
+ } : undefined,
2741
+ week52Low: props.week52Low !== undefined ? {
2742
+ equals: props.week52Low
2743
+ } : undefined,
2744
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
2745
+ equals: props.day50MovingAverage
2746
+ } : undefined,
2747
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
2748
+ equals: props.day200MovingAverage
2749
+ } : undefined,
2750
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
2751
+ equals: props.sharesOutstanding
2752
+ } : undefined,
2753
+ dividendDate: props.dividendDate !== undefined ? {
2754
+ equals: props.dividendDate
2755
+ } : undefined,
2756
+ exDividendDate: props.exDividendDate !== undefined ? {
2757
+ equals: props.exDividendDate
2758
+ } : undefined,
2759
+ createdAt: props.createdAt !== undefined ? {
2760
+ equals: props.createdAt
2761
+ } : undefined,
2762
+ updatedAt: props.updatedAt !== undefined ? {
2763
+ equals: props.updatedAt
2764
+ } : undefined,
2765
+ },
2766
+ };
2767
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
2768
+ const response = await client.query({
2769
+ query: FIND_MANY_ASSET,
2770
+ variables: filteredVariables,
2771
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
2772
+ });
2773
+ if (response.errors && response.errors.length > 0)
2774
+ throw new Error(response.errors[0].message);
2775
+ if (response && response.data && response.data.assets) {
2776
+ return response.data.assets;
2777
+ }
2778
+ else {
2779
+ return [];
2780
+ }
1735
2781
  }
1736
- else {
1737
- console.error('Error in getAsset:', error);
2782
+ catch (error) {
2783
+ lastError = error;
2784
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
2785
+ if (error.message === 'No Asset found') {
2786
+ return null;
2787
+ }
2788
+ // Check if this is a database connection error that we should retry
2789
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
2790
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
2791
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
2792
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
2793
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
2794
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
2795
+ retryCount++;
2796
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
2797
+ console.warn("Database connection error, retrying...");
2798
+ await new Promise(resolve => setTimeout(resolve, delay));
2799
+ continue;
2800
+ }
2801
+ // Log the error and rethrow
2802
+ console.error("Database error occurred:", error);
1738
2803
  throw error;
1739
2804
  }
1740
2805
  }
2806
+ // If we exhausted retries, throw the last error
2807
+ throw lastError;
1741
2808
  }
1742
2809
  };
1743
2810
  //# sourceMappingURL=Asset.js.map