adaptic-backend 1.0.340 → 1.0.341

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 (110) hide show
  1. package/Account.cjs +2543 -2265
  2. package/Account.d.ts +19 -2
  3. package/Action.cjs +1116 -838
  4. package/Action.d.ts +19 -2
  5. package/Alert.cjs +2626 -2348
  6. package/Alert.d.ts +19 -2
  7. package/Allocation.cjs +2578 -2300
  8. package/Allocation.d.ts +19 -2
  9. package/AlpacaAccount.cjs +2383 -2105
  10. package/AlpacaAccount.d.ts +19 -2
  11. package/Asset.cjs +1813 -1535
  12. package/Asset.d.ts +19 -2
  13. package/Authenticator.cjs +2568 -2290
  14. package/Authenticator.d.ts +19 -2
  15. package/Customer.cjs +2495 -2217
  16. package/Customer.d.ts +19 -2
  17. package/EconomicEvent.cjs +645 -367
  18. package/EconomicEvent.d.ts +19 -2
  19. package/MarketSentiment.cjs +618 -340
  20. package/MarketSentiment.d.ts +19 -2
  21. package/NewsArticle.cjs +1933 -1655
  22. package/NewsArticle.d.ts +19 -2
  23. package/NewsArticleAssetSentiment.cjs +1842 -1564
  24. package/NewsArticleAssetSentiment.d.ts +19 -2
  25. package/ScheduledOptionOrder.cjs +594 -316
  26. package/ScheduledOptionOrder.d.ts +19 -2
  27. package/Session.cjs +2570 -2292
  28. package/Session.d.ts +19 -2
  29. package/Trade.cjs +1073 -795
  30. package/Trade.d.ts +19 -2
  31. package/User.cjs +2288 -2010
  32. package/User.d.ts +19 -2
  33. package/VerificationToken.cjs +606 -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 +2534 -2263
  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 +1107 -836
  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 +2617 -2346
  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 +2569 -2298
  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 +2374 -2103
  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 +1804 -1533
  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 +2559 -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 +2486 -2215
  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 +636 -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 +609 -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 +1924 -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 +1833 -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 +585 -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 +2561 -2290
  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 +1064 -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 +2279 -2008
  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 +597 -326
  103. package/esm/prismaClient.d.ts +4 -5
  104. package/esm/prismaClient.d.ts.map +1 -1
  105. package/esm/prismaClient.js.map +1 -1
  106. package/esm/prismaClient.mjs +13 -11
  107. package/package.json +1 -1
  108. package/prismaClient.cjs +13 -11
  109. package/prismaClient.d.ts +4 -5
  110. package/server.cjs +37 -5
package/Asset.cjs CHANGED
@@ -75,110 +75,621 @@ 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
+ },
425
+ data: {
426
+ id: props.id !== undefined ? {
427
+ set: props.id
428
+ } : undefined,
429
+ symbol: props.symbol !== undefined ? {
430
+ set: props.symbol
431
+ } : undefined,
432
+ name: props.name !== undefined ? {
433
+ set: props.name
434
+ } : undefined,
435
+ type: props.type !== undefined ? {
436
+ set: props.type
437
+ } : undefined,
438
+ logoUrl: props.logoUrl !== undefined ? {
439
+ set: props.logoUrl
440
+ } : undefined,
441
+ description: props.description !== undefined ? {
442
+ set: props.description
443
+ } : undefined,
444
+ cik: props.cik !== undefined ? {
445
+ set: props.cik
446
+ } : undefined,
447
+ exchange: props.exchange !== undefined ? {
448
+ set: props.exchange
449
+ } : undefined,
450
+ currency: props.currency !== undefined ? {
451
+ set: props.currency
452
+ } : undefined,
453
+ country: props.country !== undefined ? {
454
+ set: props.country
455
+ } : undefined,
456
+ sector: props.sector !== undefined ? {
457
+ set: props.sector
458
+ } : undefined,
459
+ industry: props.industry !== undefined ? {
460
+ set: props.industry
461
+ } : undefined,
462
+ address: props.address !== undefined ? {
463
+ set: props.address
464
+ } : undefined,
465
+ officialSite: props.officialSite !== undefined ? {
466
+ set: props.officialSite
467
+ } : undefined,
468
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
469
+ set: props.fiscalYearEnd
470
+ } : undefined,
471
+ latestQuarter: props.latestQuarter !== undefined ? {
472
+ set: props.latestQuarter
473
+ } : undefined,
474
+ marketCapitalization: props.marketCapitalization !== undefined ? {
475
+ set: props.marketCapitalization
476
+ } : undefined,
477
+ ebitda: props.ebitda !== undefined ? {
478
+ set: props.ebitda
479
+ } : undefined,
480
+ peRatio: props.peRatio !== undefined ? {
481
+ set: props.peRatio
482
+ } : undefined,
483
+ pegRatio: props.pegRatio !== undefined ? {
484
+ set: props.pegRatio
485
+ } : undefined,
486
+ bookValue: props.bookValue !== undefined ? {
487
+ set: props.bookValue
488
+ } : undefined,
489
+ dividendPerShare: props.dividendPerShare !== undefined ? {
490
+ set: props.dividendPerShare
491
+ } : undefined,
492
+ dividendYield: props.dividendYield !== undefined ? {
493
+ set: props.dividendYield
494
+ } : undefined,
495
+ eps: props.eps !== undefined ? {
496
+ set: props.eps
497
+ } : undefined,
498
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
499
+ set: props.revenuePerShareTTM
500
+ } : undefined,
501
+ profitMargin: props.profitMargin !== undefined ? {
502
+ set: props.profitMargin
503
+ } : undefined,
504
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
505
+ set: props.operatingMarginTTM
506
+ } : undefined,
507
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
508
+ set: props.returnOnAssetsTTM
509
+ } : undefined,
510
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
511
+ set: props.returnOnEquityTTM
512
+ } : undefined,
513
+ revenueTTM: props.revenueTTM !== undefined ? {
514
+ set: props.revenueTTM
515
+ } : undefined,
516
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
517
+ set: props.grossProfitTTM
518
+ } : undefined,
519
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
520
+ set: props.dilutedEPSTTM
521
+ } : undefined,
522
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
523
+ set: props.quarterlyEarningsGrowthYOY
524
+ } : undefined,
525
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
526
+ set: props.quarterlyRevenueGrowthYOY
527
+ } : undefined,
528
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
529
+ set: props.analystTargetPrice
530
+ } : undefined,
531
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
532
+ set: props.analystRatingStrongBuy
533
+ } : undefined,
534
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
535
+ set: props.analystRatingBuy
536
+ } : undefined,
537
+ analystRatingHold: props.analystRatingHold !== undefined ? {
538
+ set: props.analystRatingHold
539
+ } : undefined,
540
+ analystRatingSell: props.analystRatingSell !== undefined ? {
541
+ set: props.analystRatingSell
542
+ } : undefined,
543
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
544
+ set: props.analystRatingStrongSell
545
+ } : undefined,
546
+ trailingPE: props.trailingPE !== undefined ? {
547
+ set: props.trailingPE
548
+ } : undefined,
549
+ forwardPE: props.forwardPE !== undefined ? {
550
+ set: props.forwardPE
551
+ } : undefined,
552
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
553
+ set: props.priceToSalesRatioTTM
554
+ } : undefined,
555
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
556
+ set: props.priceToBookRatio
557
+ } : undefined,
558
+ evToRevenue: props.evToRevenue !== undefined ? {
559
+ set: props.evToRevenue
560
+ } : undefined,
561
+ evToEbitda: props.evToEbitda !== undefined ? {
562
+ set: props.evToEbitda
563
+ } : undefined,
564
+ beta: props.beta !== undefined ? {
565
+ set: props.beta
566
+ } : undefined,
567
+ week52High: props.week52High !== undefined ? {
568
+ set: props.week52High
569
+ } : undefined,
570
+ week52Low: props.week52Low !== undefined ? {
571
+ set: props.week52Low
572
+ } : undefined,
573
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
574
+ set: props.day50MovingAverage
575
+ } : undefined,
576
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
577
+ set: props.day200MovingAverage
578
+ } : undefined,
579
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
580
+ set: props.sharesOutstanding
581
+ } : undefined,
582
+ dividendDate: props.dividendDate !== undefined ? {
583
+ set: props.dividendDate
584
+ } : undefined,
585
+ exDividendDate: props.exDividendDate !== undefined ? {
586
+ set: props.exDividendDate
587
+ } : undefined,
588
+ askPrice: props.askPrice !== undefined ? {
589
+ set: props.askPrice
590
+ } : undefined,
591
+ bidPrice: props.bidPrice !== undefined ? {
592
+ set: props.bidPrice
593
+ } : undefined,
594
+ createdAt: props.createdAt !== undefined ? {
595
+ set: props.createdAt
596
+ } : undefined,
597
+ updatedAt: props.updatedAt !== undefined ? {
598
+ set: props.updatedAt
599
+ } : undefined,
600
+ newsMentions: props.newsMentions ?
601
+ 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) ? {
602
+ connect: props.newsMentions.map((item) => ({
603
+ id: item.id
604
+ }))
605
+ } : { upsert: props.newsMentions.map((item) => ({
606
+ where: {
607
+ id: item.id !== undefined ? item.id : undefined,
608
+ url: item.url !== undefined ? item.url : undefined,
609
+ assetId: item.assetId !== undefined ? {
610
+ equals: item.assetId
611
+ } : undefined,
612
+ newsArticleId: item.newsArticleId !== undefined ? {
613
+ equals: item.newsArticleId
614
+ } : undefined,
615
+ },
616
+ update: {
617
+ id: item.id !== undefined ? {
618
+ set: item.id
619
+ } : undefined,
620
+ url: item.url !== undefined ? {
621
+ set: item.url
622
+ } : undefined,
623
+ relevancyScore: item.relevancyScore !== undefined ? {
624
+ set: item.relevancyScore
625
+ } : undefined,
626
+ sentimentScore: item.sentimentScore !== undefined ? {
627
+ set: item.sentimentScore
628
+ } : undefined,
629
+ sentimentLabel: item.sentimentLabel !== undefined ? {
630
+ set: item.sentimentLabel
631
+ } : undefined,
632
+ news: item.news ?
633
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
634
+ ? {
635
+ connect: {
636
+ id: item.news.id
637
+ }
638
+ } : { upsert: {
176
639
  where: {
177
- id: item.news.id !== undefined ? item.news.id : undefined,
178
- url: item.news.url !== undefined ? item.news.url : undefined,
640
+ id: item.news.id !== undefined ? {
641
+ equals: item.news.id
642
+ } : undefined,
179
643
  title: item.news.title !== undefined ? {
180
644
  equals: item.news.title
181
645
  } : undefined,
646
+ url: item.news.url !== undefined ? {
647
+ equals: item.news.url
648
+ } : undefined,
649
+ },
650
+ update: {
651
+ id: item.news.id !== undefined ? {
652
+ set: item.news.id
653
+ } : undefined,
654
+ title: item.news.title !== undefined ? {
655
+ set: item.news.title
656
+ } : undefined,
657
+ content: item.news.content !== undefined ? {
658
+ set: item.news.content
659
+ } : undefined,
660
+ source: item.news.source !== undefined ? {
661
+ set: item.news.source
662
+ } : undefined,
663
+ sourceDomain: item.news.sourceDomain !== undefined ? {
664
+ set: item.news.sourceDomain
665
+ } : undefined,
666
+ url: item.news.url !== undefined ? {
667
+ set: item.news.url
668
+ } : undefined,
669
+ sentiment: item.news.sentiment !== undefined ? {
670
+ set: item.news.sentiment
671
+ } : undefined,
672
+ authors: item.news.authors !== undefined ? {
673
+ set: item.news.authors
674
+ } : undefined,
675
+ summary: item.news.summary !== undefined ? {
676
+ set: item.news.summary
677
+ } : undefined,
678
+ bannerImage: item.news.bannerImage !== undefined ? {
679
+ set: item.news.bannerImage
680
+ } : undefined,
681
+ timePublished: item.news.timePublished !== undefined ? {
682
+ set: item.news.timePublished
683
+ } : undefined,
684
+ category: item.news.category !== undefined ? {
685
+ set: item.news.category
686
+ } : undefined,
687
+ topics: item.news.topics !== undefined ? {
688
+ set: item.news.topics
689
+ } : undefined,
690
+ logo: item.news.logo !== undefined ? {
691
+ set: item.news.logo
692
+ } : undefined,
182
693
  },
183
694
  create: {
184
695
  title: item.news.title !== undefined ? item.news.title : undefined,
@@ -201,617 +712,499 @@ exports.Asset = {
201
712
  },
202
713
  }
203
714
  } : 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;
216
- }
217
- else {
218
- return null;
219
- }
220
- }
221
- catch (error) {
222
- console.error('Error in createOneAsset:', error);
223
- throw error;
224
- }
225
- },
226
- /**
227
- * Create multiple Asset records.
228
- * @param props - Array of Asset objects for the new records.
229
- * @param globalClient - Apollo Client instance.
230
- * @returns The count of created records or null.
231
- */
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;
312
- }
313
- else {
314
- return null;
315
- }
316
- }
317
- catch (error) {
318
- console.error('Error in createManyAsset:', error);
319
- throw error;
320
- }
321
- },
322
- /**
323
- * Update a single Asset record.
324
- * @param props - Properties to update.
325
- * @param globalClient - Apollo Client instance.
326
- * @returns The updated Asset or null.
327
- */
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
715
+ },
716
+ create: {
717
+ url: item.url !== undefined ? item.url : undefined,
718
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
719
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
720
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
721
+ news: item.news ?
722
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
723
+ ? { connect: {
724
+ id: item.news.id
725
+ }
726
+ }
727
+ : { connectOrCreate: {
728
+ where: {
729
+ id: item.news.id !== undefined ? item.news.id : undefined,
730
+ url: item.news.url !== undefined ? item.news.url : undefined,
731
+ title: item.news.title !== undefined ? {
732
+ equals: item.news.title
733
+ } : undefined,
734
+ },
735
+ create: {
736
+ title: item.news.title !== undefined ? item.news.title : undefined,
737
+ content: item.news.content !== undefined ? item.news.content : undefined,
738
+ source: item.news.source !== undefined ? item.news.source : undefined,
739
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
740
+ url: item.news.url !== undefined ? item.news.url : undefined,
741
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
742
+ authors: item.news.authors !== undefined ? {
743
+ set: item.news.authors
744
+ } : undefined,
745
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
746
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
747
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
748
+ category: item.news.category !== undefined ? item.news.category : undefined,
749
+ topics: item.news.topics !== undefined ? {
750
+ set: item.news.topics
751
+ } : undefined,
752
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
753
+ },
754
+ }
633
755
  } : 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
- }
678
- } : 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;
756
+ },
757
+ }))
758
+ } : undefined,
759
+ },
760
+ };
761
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
762
+ const response = await client.mutate({
763
+ mutation: UPDATE_ONE_ASSET,
764
+ variables: filteredVariables,
765
+ // Don't cache mutations, but ensure we're using the freshest context
766
+ fetchPolicy: 'no-cache'
767
+ });
768
+ if (response.errors && response.errors.length > 0)
769
+ throw new Error(response.errors[0].message);
770
+ if (response && response.data && response.data.updateOneAsset) {
771
+ return response.data.updateOneAsset;
772
+ }
773
+ else {
774
+ return null;
775
+ }
691
776
  }
692
- else {
693
- return null;
777
+ catch (error) {
778
+ lastError = error;
779
+ // Check if this is a database connection error that we should retry
780
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
781
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
782
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
783
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
784
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
785
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
786
+ retryCount++;
787
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
788
+ console.warn("Database connection error, retrying...");
789
+ await new Promise(resolve => setTimeout(resolve, delay));
790
+ continue;
791
+ }
792
+ // Log the error and rethrow
793
+ console.error("Database error occurred:", error);
794
+ throw error;
694
795
  }
695
796
  }
696
- catch (error) {
697
- console.error('Error in updateOneAsset:', error);
698
- throw error;
699
- }
797
+ // If we exhausted retries, throw the last error
798
+ throw lastError;
700
799
  },
701
800
  /**
702
801
  * Upsert a single Asset record.
802
+ * Enhanced with connection resilience against Prisma connection errors.
703
803
  * @param props - Properties to update.
704
804
  * @param globalClient - Apollo Client instance.
705
805
  * @returns The updated Asset or null.
706
806
  */
707
807
  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: {
808
+ var _a, _b, _c, _d, _e;
809
+ // Maximum number of retries for database connection issues
810
+ const MAX_RETRIES = 3;
811
+ let retryCount = 0;
812
+ let lastError = null;
813
+ // Retry loop to handle potential database connection issues
814
+ while (retryCount < MAX_RETRIES) {
815
+ try {
816
+ const [modules, client] = await Promise.all([
817
+ (0, client_1.getApolloModules)(),
818
+ globalClient
819
+ ? Promise.resolve(globalClient)
820
+ : client_1.client
821
+ ]);
822
+ const { gql, ApolloError } = modules;
823
+ const UPSERT_ONE_ASSET = gql `
824
+ mutation upsertOneAsset($where: AssetWhereUniqueInput!, $create: AssetCreateInput!, $update: AssetUpdateInput!) {
825
+ upsertOneAsset(where: $where, create: $create, update: $update) {
826
+ ${selectionSet}
827
+ }
828
+ }`;
829
+ const variables = {
830
+ where: {
831
+ id: props.id !== undefined ? props.id : undefined,
832
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
833
+ name: props.name !== undefined ? props.name : undefined,
834
+ },
835
+ create: {
836
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
837
+ name: props.name !== undefined ? props.name : undefined,
838
+ type: props.type !== undefined ? props.type : undefined,
839
+ logoUrl: props.logoUrl !== undefined ? props.logoUrl : undefined,
840
+ description: props.description !== undefined ? props.description : undefined,
841
+ cik: props.cik !== undefined ? props.cik : undefined,
842
+ exchange: props.exchange !== undefined ? props.exchange : undefined,
843
+ currency: props.currency !== undefined ? props.currency : undefined,
844
+ country: props.country !== undefined ? props.country : undefined,
845
+ sector: props.sector !== undefined ? props.sector : undefined,
846
+ industry: props.industry !== undefined ? props.industry : undefined,
847
+ address: props.address !== undefined ? props.address : undefined,
848
+ officialSite: props.officialSite !== undefined ? props.officialSite : undefined,
849
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? props.fiscalYearEnd : undefined,
850
+ latestQuarter: props.latestQuarter !== undefined ? props.latestQuarter : undefined,
851
+ marketCapitalization: props.marketCapitalization !== undefined ? props.marketCapitalization : undefined,
852
+ ebitda: props.ebitda !== undefined ? props.ebitda : undefined,
853
+ peRatio: props.peRatio !== undefined ? props.peRatio : undefined,
854
+ pegRatio: props.pegRatio !== undefined ? props.pegRatio : undefined,
855
+ bookValue: props.bookValue !== undefined ? props.bookValue : undefined,
856
+ dividendPerShare: props.dividendPerShare !== undefined ? props.dividendPerShare : undefined,
857
+ dividendYield: props.dividendYield !== undefined ? props.dividendYield : undefined,
858
+ eps: props.eps !== undefined ? props.eps : undefined,
859
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? props.revenuePerShareTTM : undefined,
860
+ profitMargin: props.profitMargin !== undefined ? props.profitMargin : undefined,
861
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? props.operatingMarginTTM : undefined,
862
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? props.returnOnAssetsTTM : undefined,
863
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? props.returnOnEquityTTM : undefined,
864
+ revenueTTM: props.revenueTTM !== undefined ? props.revenueTTM : undefined,
865
+ grossProfitTTM: props.grossProfitTTM !== undefined ? props.grossProfitTTM : undefined,
866
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? props.dilutedEPSTTM : undefined,
867
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? props.quarterlyEarningsGrowthYOY : undefined,
868
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? props.quarterlyRevenueGrowthYOY : undefined,
869
+ analystTargetPrice: props.analystTargetPrice !== undefined ? props.analystTargetPrice : undefined,
870
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? props.analystRatingStrongBuy : undefined,
871
+ analystRatingBuy: props.analystRatingBuy !== undefined ? props.analystRatingBuy : undefined,
872
+ analystRatingHold: props.analystRatingHold !== undefined ? props.analystRatingHold : undefined,
873
+ analystRatingSell: props.analystRatingSell !== undefined ? props.analystRatingSell : undefined,
874
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? props.analystRatingStrongSell : undefined,
875
+ trailingPE: props.trailingPE !== undefined ? props.trailingPE : undefined,
876
+ forwardPE: props.forwardPE !== undefined ? props.forwardPE : undefined,
877
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? props.priceToSalesRatioTTM : undefined,
878
+ priceToBookRatio: props.priceToBookRatio !== undefined ? props.priceToBookRatio : undefined,
879
+ evToRevenue: props.evToRevenue !== undefined ? props.evToRevenue : undefined,
880
+ evToEbitda: props.evToEbitda !== undefined ? props.evToEbitda : undefined,
881
+ beta: props.beta !== undefined ? props.beta : undefined,
882
+ week52High: props.week52High !== undefined ? props.week52High : undefined,
883
+ week52Low: props.week52Low !== undefined ? props.week52Low : undefined,
884
+ day50MovingAverage: props.day50MovingAverage !== undefined ? props.day50MovingAverage : undefined,
885
+ day200MovingAverage: props.day200MovingAverage !== undefined ? props.day200MovingAverage : undefined,
886
+ sharesOutstanding: props.sharesOutstanding !== undefined ? props.sharesOutstanding : undefined,
887
+ dividendDate: props.dividendDate !== undefined ? props.dividendDate : undefined,
888
+ exDividendDate: props.exDividendDate !== undefined ? props.exDividendDate : undefined,
889
+ askPrice: props.askPrice !== undefined ? props.askPrice : undefined,
890
+ bidPrice: props.bidPrice !== undefined ? props.bidPrice : undefined,
891
+ newsMentions: props.newsMentions ?
892
+ Array.isArray(props.newsMentions) && props.newsMentions.length > 0 && props.newsMentions.every((item) => typeof item === 'object' && 'id' in item && Object.keys(item).length === 1) ? {
893
+ connect: props.newsMentions.map((item) => ({
894
+ id: item.id
895
+ }))
896
+ }
897
+ : { connectOrCreate: props.newsMentions.map((item) => ({
898
+ where: {
899
+ id: item.id !== undefined ? item.id : undefined,
900
+ url: item.url !== undefined ? item.url : undefined,
901
+ newsArticleId: item.newsArticleId !== undefined ? {
902
+ equals: item.newsArticleId
903
+ } : undefined,
904
+ },
905
+ create: {
906
+ url: item.url !== undefined ? item.url : undefined,
907
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
908
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
909
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
910
+ news: item.news ?
911
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
912
+ ? { connect: {
913
+ id: item.news.id
914
+ }
915
+ }
916
+ : { connectOrCreate: {
917
+ where: {
918
+ id: item.news.id !== undefined ? item.news.id : undefined,
919
+ url: item.news.url !== undefined ? item.news.url : undefined,
920
+ title: item.news.title !== undefined ? {
921
+ equals: item.news.title
922
+ } : undefined,
923
+ },
924
+ create: {
925
+ title: item.news.title !== undefined ? item.news.title : undefined,
926
+ content: item.news.content !== undefined ? item.news.content : undefined,
927
+ source: item.news.source !== undefined ? item.news.source : undefined,
928
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
929
+ url: item.news.url !== undefined ? item.news.url : undefined,
930
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
931
+ authors: item.news.authors !== undefined ? {
932
+ set: item.news.authors
933
+ } : undefined,
934
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
935
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
936
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
937
+ category: item.news.category !== undefined ? item.news.category : undefined,
938
+ topics: item.news.topics !== undefined ? {
939
+ set: item.news.topics
940
+ } : undefined,
941
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
942
+ },
943
+ }
944
+ } : undefined,
945
+ },
946
+ }))
947
+ } : undefined,
948
+ },
949
+ update: {
950
+ symbol: props.symbol !== undefined ? {
951
+ set: props.symbol
952
+ } : undefined,
953
+ name: props.name !== undefined ? {
954
+ set: props.name
955
+ } : undefined,
956
+ type: props.type !== undefined ? {
957
+ set: props.type
958
+ } : undefined,
959
+ logoUrl: props.logoUrl !== undefined ? {
960
+ set: props.logoUrl
961
+ } : undefined,
962
+ description: props.description !== undefined ? {
963
+ set: props.description
964
+ } : undefined,
965
+ cik: props.cik !== undefined ? {
966
+ set: props.cik
967
+ } : undefined,
968
+ exchange: props.exchange !== undefined ? {
969
+ set: props.exchange
970
+ } : undefined,
971
+ currency: props.currency !== undefined ? {
972
+ set: props.currency
973
+ } : undefined,
974
+ country: props.country !== undefined ? {
975
+ set: props.country
976
+ } : undefined,
977
+ sector: props.sector !== undefined ? {
978
+ set: props.sector
979
+ } : undefined,
980
+ industry: props.industry !== undefined ? {
981
+ set: props.industry
982
+ } : undefined,
983
+ address: props.address !== undefined ? {
984
+ set: props.address
985
+ } : undefined,
986
+ officialSite: props.officialSite !== undefined ? {
987
+ set: props.officialSite
988
+ } : undefined,
989
+ fiscalYearEnd: props.fiscalYearEnd !== undefined ? {
990
+ set: props.fiscalYearEnd
991
+ } : undefined,
992
+ latestQuarter: props.latestQuarter !== undefined ? {
993
+ set: props.latestQuarter
994
+ } : undefined,
995
+ marketCapitalization: props.marketCapitalization !== undefined ? {
996
+ set: props.marketCapitalization
997
+ } : undefined,
998
+ ebitda: props.ebitda !== undefined ? {
999
+ set: props.ebitda
1000
+ } : undefined,
1001
+ peRatio: props.peRatio !== undefined ? {
1002
+ set: props.peRatio
1003
+ } : undefined,
1004
+ pegRatio: props.pegRatio !== undefined ? {
1005
+ set: props.pegRatio
1006
+ } : undefined,
1007
+ bookValue: props.bookValue !== undefined ? {
1008
+ set: props.bookValue
1009
+ } : undefined,
1010
+ dividendPerShare: props.dividendPerShare !== undefined ? {
1011
+ set: props.dividendPerShare
1012
+ } : undefined,
1013
+ dividendYield: props.dividendYield !== undefined ? {
1014
+ set: props.dividendYield
1015
+ } : undefined,
1016
+ eps: props.eps !== undefined ? {
1017
+ set: props.eps
1018
+ } : undefined,
1019
+ revenuePerShareTTM: props.revenuePerShareTTM !== undefined ? {
1020
+ set: props.revenuePerShareTTM
1021
+ } : undefined,
1022
+ profitMargin: props.profitMargin !== undefined ? {
1023
+ set: props.profitMargin
1024
+ } : undefined,
1025
+ operatingMarginTTM: props.operatingMarginTTM !== undefined ? {
1026
+ set: props.operatingMarginTTM
1027
+ } : undefined,
1028
+ returnOnAssetsTTM: props.returnOnAssetsTTM !== undefined ? {
1029
+ set: props.returnOnAssetsTTM
1030
+ } : undefined,
1031
+ returnOnEquityTTM: props.returnOnEquityTTM !== undefined ? {
1032
+ set: props.returnOnEquityTTM
1033
+ } : undefined,
1034
+ revenueTTM: props.revenueTTM !== undefined ? {
1035
+ set: props.revenueTTM
1036
+ } : undefined,
1037
+ grossProfitTTM: props.grossProfitTTM !== undefined ? {
1038
+ set: props.grossProfitTTM
1039
+ } : undefined,
1040
+ dilutedEPSTTM: props.dilutedEPSTTM !== undefined ? {
1041
+ set: props.dilutedEPSTTM
1042
+ } : undefined,
1043
+ quarterlyEarningsGrowthYOY: props.quarterlyEarningsGrowthYOY !== undefined ? {
1044
+ set: props.quarterlyEarningsGrowthYOY
1045
+ } : undefined,
1046
+ quarterlyRevenueGrowthYOY: props.quarterlyRevenueGrowthYOY !== undefined ? {
1047
+ set: props.quarterlyRevenueGrowthYOY
1048
+ } : undefined,
1049
+ analystTargetPrice: props.analystTargetPrice !== undefined ? {
1050
+ set: props.analystTargetPrice
1051
+ } : undefined,
1052
+ analystRatingStrongBuy: props.analystRatingStrongBuy !== undefined ? {
1053
+ set: props.analystRatingStrongBuy
1054
+ } : undefined,
1055
+ analystRatingBuy: props.analystRatingBuy !== undefined ? {
1056
+ set: props.analystRatingBuy
1057
+ } : undefined,
1058
+ analystRatingHold: props.analystRatingHold !== undefined ? {
1059
+ set: props.analystRatingHold
1060
+ } : undefined,
1061
+ analystRatingSell: props.analystRatingSell !== undefined ? {
1062
+ set: props.analystRatingSell
1063
+ } : undefined,
1064
+ analystRatingStrongSell: props.analystRatingStrongSell !== undefined ? {
1065
+ set: props.analystRatingStrongSell
1066
+ } : undefined,
1067
+ trailingPE: props.trailingPE !== undefined ? {
1068
+ set: props.trailingPE
1069
+ } : undefined,
1070
+ forwardPE: props.forwardPE !== undefined ? {
1071
+ set: props.forwardPE
1072
+ } : undefined,
1073
+ priceToSalesRatioTTM: props.priceToSalesRatioTTM !== undefined ? {
1074
+ set: props.priceToSalesRatioTTM
1075
+ } : undefined,
1076
+ priceToBookRatio: props.priceToBookRatio !== undefined ? {
1077
+ set: props.priceToBookRatio
1078
+ } : undefined,
1079
+ evToRevenue: props.evToRevenue !== undefined ? {
1080
+ set: props.evToRevenue
1081
+ } : undefined,
1082
+ evToEbitda: props.evToEbitda !== undefined ? {
1083
+ set: props.evToEbitda
1084
+ } : undefined,
1085
+ beta: props.beta !== undefined ? {
1086
+ set: props.beta
1087
+ } : undefined,
1088
+ week52High: props.week52High !== undefined ? {
1089
+ set: props.week52High
1090
+ } : undefined,
1091
+ week52Low: props.week52Low !== undefined ? {
1092
+ set: props.week52Low
1093
+ } : undefined,
1094
+ day50MovingAverage: props.day50MovingAverage !== undefined ? {
1095
+ set: props.day50MovingAverage
1096
+ } : undefined,
1097
+ day200MovingAverage: props.day200MovingAverage !== undefined ? {
1098
+ set: props.day200MovingAverage
1099
+ } : undefined,
1100
+ sharesOutstanding: props.sharesOutstanding !== undefined ? {
1101
+ set: props.sharesOutstanding
1102
+ } : undefined,
1103
+ dividendDate: props.dividendDate !== undefined ? {
1104
+ set: props.dividendDate
1105
+ } : undefined,
1106
+ exDividendDate: props.exDividendDate !== undefined ? {
1107
+ set: props.exDividendDate
1108
+ } : undefined,
1109
+ askPrice: props.askPrice !== undefined ? {
1110
+ set: props.askPrice
1111
+ } : undefined,
1112
+ bidPrice: props.bidPrice !== undefined ? {
1113
+ set: props.bidPrice
1114
+ } : undefined,
1115
+ newsMentions: props.newsMentions ?
1116
+ 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) ? {
1117
+ connect: props.newsMentions.map((item) => ({
1118
+ id: item.id
1119
+ }))
1120
+ } : { upsert: props.newsMentions.map((item) => ({
1121
+ where: {
1122
+ id: item.id !== undefined ? item.id : undefined,
1123
+ url: item.url !== undefined ? item.url : undefined,
1124
+ assetId: item.assetId !== undefined ? {
1125
+ equals: item.assetId
1126
+ } : undefined,
1127
+ newsArticleId: item.newsArticleId !== undefined ? {
1128
+ equals: item.newsArticleId
1129
+ } : undefined,
1130
+ },
1131
+ update: {
1132
+ id: item.id !== undefined ? {
1133
+ set: item.id
1134
+ } : undefined,
1135
+ url: item.url !== undefined ? {
1136
+ set: item.url
1137
+ } : undefined,
1138
+ relevancyScore: item.relevancyScore !== undefined ? {
1139
+ set: item.relevancyScore
1140
+ } : undefined,
1141
+ sentimentScore: item.sentimentScore !== undefined ? {
1142
+ set: item.sentimentScore
1143
+ } : undefined,
1144
+ sentimentLabel: item.sentimentLabel !== undefined ? {
1145
+ set: item.sentimentLabel
1146
+ } : undefined,
1147
+ news: item.news ?
1148
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
1149
+ ? {
1150
+ connect: {
1151
+ id: item.news.id
1152
+ }
1153
+ } : { upsert: {
809
1154
  where: {
810
- id: item.news.id !== undefined ? item.news.id : undefined,
811
- url: item.news.url !== undefined ? item.news.url : undefined,
1155
+ id: item.news.id !== undefined ? {
1156
+ equals: item.news.id
1157
+ } : undefined,
812
1158
  title: item.news.title !== undefined ? {
813
1159
  equals: item.news.title
814
1160
  } : undefined,
1161
+ url: item.news.url !== undefined ? {
1162
+ equals: item.news.url
1163
+ } : undefined,
1164
+ },
1165
+ update: {
1166
+ id: item.news.id !== undefined ? {
1167
+ set: item.news.id
1168
+ } : undefined,
1169
+ title: item.news.title !== undefined ? {
1170
+ set: item.news.title
1171
+ } : undefined,
1172
+ content: item.news.content !== undefined ? {
1173
+ set: item.news.content
1174
+ } : undefined,
1175
+ source: item.news.source !== undefined ? {
1176
+ set: item.news.source
1177
+ } : undefined,
1178
+ sourceDomain: item.news.sourceDomain !== undefined ? {
1179
+ set: item.news.sourceDomain
1180
+ } : undefined,
1181
+ url: item.news.url !== undefined ? {
1182
+ set: item.news.url
1183
+ } : undefined,
1184
+ sentiment: item.news.sentiment !== undefined ? {
1185
+ set: item.news.sentiment
1186
+ } : undefined,
1187
+ authors: item.news.authors !== undefined ? {
1188
+ set: item.news.authors
1189
+ } : undefined,
1190
+ summary: item.news.summary !== undefined ? {
1191
+ set: item.news.summary
1192
+ } : undefined,
1193
+ bannerImage: item.news.bannerImage !== undefined ? {
1194
+ set: item.news.bannerImage
1195
+ } : undefined,
1196
+ timePublished: item.news.timePublished !== undefined ? {
1197
+ set: item.news.timePublished
1198
+ } : undefined,
1199
+ category: item.news.category !== undefined ? {
1200
+ set: item.news.category
1201
+ } : undefined,
1202
+ topics: item.news.topics !== undefined ? {
1203
+ set: item.news.topics
1204
+ } : undefined,
1205
+ logo: item.news.logo !== undefined ? {
1206
+ set: item.news.logo
1207
+ } : undefined,
815
1208
  },
816
1209
  create: {
817
1210
  title: item.news.title !== undefined ? item.news.title : undefined,
@@ -834,910 +1227,795 @@ exports.Asset = {
834
1227
  },
835
1228
  }
836
1229
  } : 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
1230
+ },
1231
+ create: {
1232
+ url: item.url !== undefined ? item.url : undefined,
1233
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
1234
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
1235
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
1236
+ news: item.news ?
1237
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
1238
+ ? { connect: {
1239
+ id: item.news.id
1240
+ }
1241
+ }
1242
+ : { connectOrCreate: {
1243
+ where: {
1244
+ id: item.news.id !== undefined ? item.news.id : undefined,
1245
+ url: item.news.url !== undefined ? item.news.url : undefined,
1246
+ title: item.news.title !== undefined ? {
1247
+ equals: item.news.title
1248
+ } : undefined,
1249
+ },
1250
+ create: {
1251
+ title: item.news.title !== undefined ? item.news.title : undefined,
1252
+ content: item.news.content !== undefined ? item.news.content : undefined,
1253
+ source: item.news.source !== undefined ? item.news.source : undefined,
1254
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1255
+ url: item.news.url !== undefined ? item.news.url : undefined,
1256
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1257
+ authors: item.news.authors !== undefined ? {
1258
+ set: item.news.authors
1259
+ } : undefined,
1260
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
1261
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1262
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1263
+ category: item.news.category !== undefined ? item.news.category : undefined,
1264
+ topics: item.news.topics !== undefined ? {
1265
+ set: item.news.topics
1266
+ } : undefined,
1267
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
1268
+ },
1269
+ }
1117
1270
  } : 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;
1271
+ },
1272
+ }))
1273
+ } : undefined,
1274
+ },
1275
+ };
1276
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1277
+ const response = await client.mutate({
1278
+ mutation: UPSERT_ONE_ASSET,
1279
+ variables: filteredVariables,
1280
+ // Don't cache mutations, but ensure we're using the freshest context
1281
+ fetchPolicy: 'no-cache'
1282
+ });
1283
+ if (response.errors && response.errors.length > 0)
1284
+ throw new Error(response.errors[0].message);
1285
+ if (response && response.data && response.data.upsertOneAsset) {
1286
+ return response.data.upsertOneAsset;
1287
+ }
1288
+ else {
1289
+ return null;
1290
+ }
1175
1291
  }
1176
- else {
1177
- return null;
1292
+ catch (error) {
1293
+ lastError = error;
1294
+ // Check if this is a database connection error that we should retry
1295
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
1296
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
1297
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
1298
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
1299
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
1300
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1301
+ retryCount++;
1302
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1303
+ console.warn("Database connection error, retrying...");
1304
+ await new Promise(resolve => setTimeout(resolve, delay));
1305
+ continue;
1306
+ }
1307
+ // Log the error and rethrow
1308
+ console.error("Database error occurred:", error);
1309
+ throw error;
1178
1310
  }
1179
1311
  }
1180
- catch (error) {
1181
- console.error('Error in upsertOneAsset:', error);
1182
- throw error;
1183
- }
1312
+ // If we exhausted retries, throw the last error
1313
+ throw lastError;
1184
1314
  },
1185
1315
  /**
1186
1316
  * Update multiple Asset records.
1317
+ * Enhanced with connection resilience against Prisma connection errors.
1187
1318
  * @param props - Array of Asset objects for the updated records.
1188
1319
  * @param globalClient - Apollo Client instance.
1189
1320
  * @returns The count of created records or null.
1190
1321
  */
1191
1322
  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
1496
- } : 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
- }
1323
+ var _a, _b, _c, _d, _e;
1324
+ // Maximum number of retries for database connection issues
1325
+ const MAX_RETRIES = 3;
1326
+ let retryCount = 0;
1327
+ let lastError = null;
1328
+ // Retry loop to handle potential database connection issues
1329
+ while (retryCount < MAX_RETRIES) {
1330
+ try {
1331
+ const [modules, client] = await Promise.all([
1332
+ (0, client_1.getApolloModules)(),
1333
+ globalClient
1334
+ ? Promise.resolve(globalClient)
1335
+ : client_1.client
1336
+ ]);
1337
+ const { gql, ApolloError } = modules;
1338
+ const UPDATE_MANY_ASSET = gql `
1339
+ mutation updateManyAsset($data: [AssetCreateManyInput!]!) {
1340
+ updateManyAsset(data: $data) {
1341
+ count
1342
+ }
1343
+ }`;
1344
+ const variables = props.map(prop => ({
1345
+ where: {
1346
+ id: prop.id !== undefined ? prop.id : undefined,
1347
+ symbol: prop.symbol !== undefined ? prop.symbol : undefined,
1348
+ name: prop.name !== undefined ? prop.name : undefined,
1349
+ },
1350
+ data: {
1351
+ id: prop.id !== undefined ? {
1352
+ set: prop.id
1353
+ } : undefined,
1354
+ symbol: prop.symbol !== undefined ? {
1355
+ set: prop.symbol
1356
+ } : undefined,
1357
+ name: prop.name !== undefined ? {
1358
+ set: prop.name
1359
+ } : undefined,
1360
+ type: prop.type !== undefined ? {
1361
+ set: prop.type
1362
+ } : undefined,
1363
+ logoUrl: prop.logoUrl !== undefined ? {
1364
+ set: prop.logoUrl
1365
+ } : undefined,
1366
+ description: prop.description !== undefined ? {
1367
+ set: prop.description
1368
+ } : undefined,
1369
+ cik: prop.cik !== undefined ? {
1370
+ set: prop.cik
1371
+ } : undefined,
1372
+ exchange: prop.exchange !== undefined ? {
1373
+ set: prop.exchange
1374
+ } : undefined,
1375
+ currency: prop.currency !== undefined ? {
1376
+ set: prop.currency
1377
+ } : undefined,
1378
+ country: prop.country !== undefined ? {
1379
+ set: prop.country
1380
+ } : undefined,
1381
+ sector: prop.sector !== undefined ? {
1382
+ set: prop.sector
1383
+ } : undefined,
1384
+ industry: prop.industry !== undefined ? {
1385
+ set: prop.industry
1386
+ } : undefined,
1387
+ address: prop.address !== undefined ? {
1388
+ set: prop.address
1389
+ } : undefined,
1390
+ officialSite: prop.officialSite !== undefined ? {
1391
+ set: prop.officialSite
1392
+ } : undefined,
1393
+ fiscalYearEnd: prop.fiscalYearEnd !== undefined ? {
1394
+ set: prop.fiscalYearEnd
1395
+ } : undefined,
1396
+ latestQuarter: prop.latestQuarter !== undefined ? {
1397
+ set: prop.latestQuarter
1398
+ } : undefined,
1399
+ marketCapitalization: prop.marketCapitalization !== undefined ? {
1400
+ set: prop.marketCapitalization
1401
+ } : undefined,
1402
+ ebitda: prop.ebitda !== undefined ? {
1403
+ set: prop.ebitda
1404
+ } : undefined,
1405
+ peRatio: prop.peRatio !== undefined ? {
1406
+ set: prop.peRatio
1407
+ } : undefined,
1408
+ pegRatio: prop.pegRatio !== undefined ? {
1409
+ set: prop.pegRatio
1410
+ } : undefined,
1411
+ bookValue: prop.bookValue !== undefined ? {
1412
+ set: prop.bookValue
1413
+ } : undefined,
1414
+ dividendPerShare: prop.dividendPerShare !== undefined ? {
1415
+ set: prop.dividendPerShare
1416
+ } : undefined,
1417
+ dividendYield: prop.dividendYield !== undefined ? {
1418
+ set: prop.dividendYield
1419
+ } : undefined,
1420
+ eps: prop.eps !== undefined ? {
1421
+ set: prop.eps
1422
+ } : undefined,
1423
+ revenuePerShareTTM: prop.revenuePerShareTTM !== undefined ? {
1424
+ set: prop.revenuePerShareTTM
1425
+ } : undefined,
1426
+ profitMargin: prop.profitMargin !== undefined ? {
1427
+ set: prop.profitMargin
1428
+ } : undefined,
1429
+ operatingMarginTTM: prop.operatingMarginTTM !== undefined ? {
1430
+ set: prop.operatingMarginTTM
1431
+ } : undefined,
1432
+ returnOnAssetsTTM: prop.returnOnAssetsTTM !== undefined ? {
1433
+ set: prop.returnOnAssetsTTM
1434
+ } : undefined,
1435
+ returnOnEquityTTM: prop.returnOnEquityTTM !== undefined ? {
1436
+ set: prop.returnOnEquityTTM
1437
+ } : undefined,
1438
+ revenueTTM: prop.revenueTTM !== undefined ? {
1439
+ set: prop.revenueTTM
1440
+ } : undefined,
1441
+ grossProfitTTM: prop.grossProfitTTM !== undefined ? {
1442
+ set: prop.grossProfitTTM
1443
+ } : undefined,
1444
+ dilutedEPSTTM: prop.dilutedEPSTTM !== undefined ? {
1445
+ set: prop.dilutedEPSTTM
1446
+ } : undefined,
1447
+ quarterlyEarningsGrowthYOY: prop.quarterlyEarningsGrowthYOY !== undefined ? {
1448
+ set: prop.quarterlyEarningsGrowthYOY
1449
+ } : undefined,
1450
+ quarterlyRevenueGrowthYOY: prop.quarterlyRevenueGrowthYOY !== undefined ? {
1451
+ set: prop.quarterlyRevenueGrowthYOY
1452
+ } : undefined,
1453
+ analystTargetPrice: prop.analystTargetPrice !== undefined ? {
1454
+ set: prop.analystTargetPrice
1455
+ } : undefined,
1456
+ analystRatingStrongBuy: prop.analystRatingStrongBuy !== undefined ? {
1457
+ set: prop.analystRatingStrongBuy
1458
+ } : undefined,
1459
+ analystRatingBuy: prop.analystRatingBuy !== undefined ? {
1460
+ set: prop.analystRatingBuy
1461
+ } : undefined,
1462
+ analystRatingHold: prop.analystRatingHold !== undefined ? {
1463
+ set: prop.analystRatingHold
1464
+ } : undefined,
1465
+ analystRatingSell: prop.analystRatingSell !== undefined ? {
1466
+ set: prop.analystRatingSell
1467
+ } : undefined,
1468
+ analystRatingStrongSell: prop.analystRatingStrongSell !== undefined ? {
1469
+ set: prop.analystRatingStrongSell
1470
+ } : undefined,
1471
+ trailingPE: prop.trailingPE !== undefined ? {
1472
+ set: prop.trailingPE
1473
+ } : undefined,
1474
+ forwardPE: prop.forwardPE !== undefined ? {
1475
+ set: prop.forwardPE
1476
+ } : undefined,
1477
+ priceToSalesRatioTTM: prop.priceToSalesRatioTTM !== undefined ? {
1478
+ set: prop.priceToSalesRatioTTM
1479
+ } : undefined,
1480
+ priceToBookRatio: prop.priceToBookRatio !== undefined ? {
1481
+ set: prop.priceToBookRatio
1482
+ } : undefined,
1483
+ evToRevenue: prop.evToRevenue !== undefined ? {
1484
+ set: prop.evToRevenue
1485
+ } : undefined,
1486
+ evToEbitda: prop.evToEbitda !== undefined ? {
1487
+ set: prop.evToEbitda
1488
+ } : undefined,
1489
+ beta: prop.beta !== undefined ? {
1490
+ set: prop.beta
1491
+ } : undefined,
1492
+ week52High: prop.week52High !== undefined ? {
1493
+ set: prop.week52High
1494
+ } : undefined,
1495
+ week52Low: prop.week52Low !== undefined ? {
1496
+ set: prop.week52Low
1497
+ } : undefined,
1498
+ day50MovingAverage: prop.day50MovingAverage !== undefined ? {
1499
+ set: prop.day50MovingAverage
1500
+ } : undefined,
1501
+ day200MovingAverage: prop.day200MovingAverage !== undefined ? {
1502
+ set: prop.day200MovingAverage
1503
+ } : undefined,
1504
+ sharesOutstanding: prop.sharesOutstanding !== undefined ? {
1505
+ set: prop.sharesOutstanding
1506
+ } : undefined,
1507
+ dividendDate: prop.dividendDate !== undefined ? {
1508
+ set: prop.dividendDate
1509
+ } : undefined,
1510
+ exDividendDate: prop.exDividendDate !== undefined ? {
1511
+ set: prop.exDividendDate
1512
+ } : undefined,
1513
+ askPrice: prop.askPrice !== undefined ? {
1514
+ set: prop.askPrice
1515
+ } : undefined,
1516
+ bidPrice: prop.bidPrice !== undefined ? {
1517
+ set: prop.bidPrice
1518
+ } : undefined,
1519
+ createdAt: prop.createdAt !== undefined ? {
1520
+ set: prop.createdAt
1521
+ } : undefined,
1522
+ updatedAt: prop.updatedAt !== undefined ? {
1523
+ set: prop.updatedAt
1524
+ } : undefined,
1525
+ newsMentions: prop.newsMentions ?
1526
+ 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) ? {
1527
+ connect: prop.newsMentions.map((item) => ({
1528
+ id: item.id
1529
+ }))
1530
+ } : { upsert: prop.newsMentions.map((item) => ({
1531
+ where: {
1532
+ id: item.id !== undefined ? item.id : undefined,
1533
+ url: item.url !== undefined ? item.url : undefined,
1534
+ assetId: item.assetId !== undefined ? {
1535
+ equals: item.assetId
1536
+ } : undefined,
1537
+ newsArticleId: item.newsArticleId !== undefined ? {
1538
+ equals: item.newsArticleId
1539
+ } : undefined,
1540
+ },
1541
+ update: {
1542
+ id: item.id !== undefined ? {
1543
+ set: item.id
1544
+ } : undefined,
1545
+ url: item.url !== undefined ? {
1546
+ set: item.url
1547
+ } : undefined,
1548
+ relevancyScore: item.relevancyScore !== undefined ? {
1549
+ set: item.relevancyScore
1541
1550
  } : 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;
1551
+ sentimentScore: item.sentimentScore !== undefined ? {
1552
+ set: item.sentimentScore
1553
+ } : undefined,
1554
+ sentimentLabel: item.sentimentLabel !== undefined ? {
1555
+ set: item.sentimentLabel
1556
+ } : undefined,
1557
+ news: item.news ?
1558
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && (Object.keys(item.news)[0] === 'id' || Object.keys(item.news)[0] === 'symbol')
1559
+ ? {
1560
+ connect: {
1561
+ id: item.news.id
1562
+ }
1563
+ } : { upsert: {
1564
+ where: {
1565
+ id: item.news.id !== undefined ? {
1566
+ equals: item.news.id
1567
+ } : undefined,
1568
+ title: item.news.title !== undefined ? {
1569
+ equals: item.news.title
1570
+ } : undefined,
1571
+ url: item.news.url !== undefined ? {
1572
+ equals: item.news.url
1573
+ } : undefined,
1574
+ },
1575
+ update: {
1576
+ id: item.news.id !== undefined ? {
1577
+ set: item.news.id
1578
+ } : undefined,
1579
+ title: item.news.title !== undefined ? {
1580
+ set: item.news.title
1581
+ } : undefined,
1582
+ content: item.news.content !== undefined ? {
1583
+ set: item.news.content
1584
+ } : undefined,
1585
+ source: item.news.source !== undefined ? {
1586
+ set: item.news.source
1587
+ } : undefined,
1588
+ sourceDomain: item.news.sourceDomain !== undefined ? {
1589
+ set: item.news.sourceDomain
1590
+ } : undefined,
1591
+ url: item.news.url !== undefined ? {
1592
+ set: item.news.url
1593
+ } : undefined,
1594
+ sentiment: item.news.sentiment !== undefined ? {
1595
+ set: item.news.sentiment
1596
+ } : undefined,
1597
+ authors: item.news.authors !== undefined ? {
1598
+ set: item.news.authors
1599
+ } : undefined,
1600
+ summary: item.news.summary !== undefined ? {
1601
+ set: item.news.summary
1602
+ } : undefined,
1603
+ bannerImage: item.news.bannerImage !== undefined ? {
1604
+ set: item.news.bannerImage
1605
+ } : undefined,
1606
+ timePublished: item.news.timePublished !== undefined ? {
1607
+ set: item.news.timePublished
1608
+ } : undefined,
1609
+ category: item.news.category !== undefined ? {
1610
+ set: item.news.category
1611
+ } : undefined,
1612
+ topics: item.news.topics !== undefined ? {
1613
+ set: item.news.topics
1614
+ } : undefined,
1615
+ logo: item.news.logo !== undefined ? {
1616
+ set: item.news.logo
1617
+ } : undefined,
1618
+ },
1619
+ create: {
1620
+ title: item.news.title !== undefined ? item.news.title : undefined,
1621
+ content: item.news.content !== undefined ? item.news.content : undefined,
1622
+ source: item.news.source !== undefined ? item.news.source : undefined,
1623
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1624
+ url: item.news.url !== undefined ? item.news.url : undefined,
1625
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1626
+ authors: item.news.authors !== undefined ? {
1627
+ set: item.news.authors
1628
+ } : undefined,
1629
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
1630
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1631
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1632
+ category: item.news.category !== undefined ? item.news.category : undefined,
1633
+ topics: item.news.topics !== undefined ? {
1634
+ set: item.news.topics
1635
+ } : undefined,
1636
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
1637
+ },
1638
+ }
1639
+ } : undefined,
1640
+ },
1641
+ create: {
1642
+ url: item.url !== undefined ? item.url : undefined,
1643
+ relevancyScore: item.relevancyScore !== undefined ? item.relevancyScore : undefined,
1644
+ sentimentScore: item.sentimentScore !== undefined ? item.sentimentScore : undefined,
1645
+ sentimentLabel: item.sentimentLabel !== undefined ? item.sentimentLabel : undefined,
1646
+ news: item.news ?
1647
+ typeof item.news === 'object' && Object.keys(item.news).length === 1 && Object.keys(item.news)[0] === 'id'
1648
+ ? { connect: {
1649
+ id: item.news.id
1650
+ }
1651
+ }
1652
+ : { connectOrCreate: {
1653
+ where: {
1654
+ id: item.news.id !== undefined ? item.news.id : undefined,
1655
+ url: item.news.url !== undefined ? item.news.url : undefined,
1656
+ title: item.news.title !== undefined ? {
1657
+ equals: item.news.title
1658
+ } : undefined,
1659
+ },
1660
+ create: {
1661
+ title: item.news.title !== undefined ? item.news.title : undefined,
1662
+ content: item.news.content !== undefined ? item.news.content : undefined,
1663
+ source: item.news.source !== undefined ? item.news.source : undefined,
1664
+ sourceDomain: item.news.sourceDomain !== undefined ? item.news.sourceDomain : undefined,
1665
+ url: item.news.url !== undefined ? item.news.url : undefined,
1666
+ sentiment: item.news.sentiment !== undefined ? item.news.sentiment : undefined,
1667
+ authors: item.news.authors !== undefined ? {
1668
+ set: item.news.authors
1669
+ } : undefined,
1670
+ summary: item.news.summary !== undefined ? item.news.summary : undefined,
1671
+ bannerImage: item.news.bannerImage !== undefined ? item.news.bannerImage : undefined,
1672
+ timePublished: item.news.timePublished !== undefined ? item.news.timePublished : undefined,
1673
+ category: item.news.category !== undefined ? item.news.category : undefined,
1674
+ topics: item.news.topics !== undefined ? {
1675
+ set: item.news.topics
1676
+ } : undefined,
1677
+ logo: item.news.logo !== undefined ? item.news.logo : undefined,
1678
+ },
1679
+ }
1680
+ } : undefined,
1681
+ },
1682
+ }))
1683
+ } : undefined,
1684
+ },
1685
+ }));
1686
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1687
+ const response = await client.mutate({
1688
+ mutation: UPDATE_MANY_ASSET,
1689
+ variables: filteredVariables,
1690
+ // Don't cache mutations, but ensure we're using the freshest context
1691
+ fetchPolicy: 'no-cache'
1692
+ });
1693
+ if (response.errors && response.errors.length > 0)
1694
+ throw new Error(response.errors[0].message);
1695
+ if (response && response.data && response.data.updateManyAsset) {
1696
+ return response.data.updateManyAsset;
1697
+ }
1698
+ else {
1699
+ return null;
1700
+ }
1554
1701
  }
1555
- else {
1556
- return null;
1702
+ catch (error) {
1703
+ lastError = error;
1704
+ // Check if this is a database connection error that we should retry
1705
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
1706
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
1707
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
1708
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
1709
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
1710
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1711
+ retryCount++;
1712
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1713
+ console.warn("Database connection error, retrying...");
1714
+ await new Promise(resolve => setTimeout(resolve, delay));
1715
+ continue;
1716
+ }
1717
+ // Log the error and rethrow
1718
+ console.error("Database error occurred:", error);
1719
+ throw error;
1557
1720
  }
1558
1721
  }
1559
- catch (error) {
1560
- console.error('Error in updateManyAsset:', error);
1561
- throw error;
1562
- }
1722
+ // If we exhausted retries, throw the last error
1723
+ throw lastError;
1563
1724
  },
1564
1725
  /**
1565
1726
  * Delete a single Asset record.
1566
- * @param props - Properties to update.
1727
+ * Enhanced with connection resilience against Prisma connection errors.
1728
+ * @param props - Properties to identify the record to delete.
1567
1729
  * @param globalClient - Apollo Client instance.
1568
1730
  * @returns The deleted Asset or null.
1569
1731
  */
1570
1732
  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,
1733
+ var _a, _b, _c, _d, _e;
1734
+ // Maximum number of retries for database connection issues
1735
+ const MAX_RETRIES = 3;
1736
+ let retryCount = 0;
1737
+ let lastError = null;
1738
+ // Retry loop to handle potential database connection issues
1739
+ while (retryCount < MAX_RETRIES) {
1740
+ try {
1741
+ const [modules, client] = await Promise.all([
1742
+ (0, client_1.getApolloModules)(),
1743
+ globalClient
1744
+ ? Promise.resolve(globalClient)
1745
+ : client_1.client
1746
+ ]);
1747
+ const { gql, ApolloError } = modules;
1748
+ const DELETE_ONE_ASSET = gql `
1749
+ mutation deleteOneAsset($where: AssetWhereUniqueInput!) {
1750
+ deleteOneAsset(where: $where) {
1751
+ id
1587
1752
  }
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;
1753
+ }`;
1754
+ const variables = {
1755
+ where: {
1756
+ id: props.id ? props.id : undefined,
1757
+ }
1758
+ };
1759
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1760
+ const response = await client.mutate({
1761
+ mutation: DELETE_ONE_ASSET,
1762
+ variables: filteredVariables,
1763
+ // Don't cache mutations, but ensure we're using the freshest context
1764
+ fetchPolicy: 'no-cache'
1765
+ });
1766
+ if (response.errors && response.errors.length > 0)
1767
+ throw new Error(response.errors[0].message);
1768
+ if (response && response.data && response.data.deleteOneAsset) {
1769
+ return response.data.deleteOneAsset;
1770
+ }
1771
+ else {
1772
+ return null;
1773
+ }
1596
1774
  }
1597
- else {
1598
- return null;
1775
+ catch (error) {
1776
+ lastError = error;
1777
+ // Check if this is a database connection error that we should retry
1778
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
1779
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
1780
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
1781
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
1782
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
1783
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1784
+ retryCount++;
1785
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1786
+ console.warn("Database connection error, retrying...");
1787
+ await new Promise(resolve => setTimeout(resolve, delay));
1788
+ continue;
1789
+ }
1790
+ // Log the error and rethrow
1791
+ console.error("Database error occurred:", error);
1792
+ throw error;
1599
1793
  }
1600
1794
  }
1601
- catch (error) {
1602
- console.error('Error in deleteOneAsset:', error);
1603
- throw error;
1604
- }
1795
+ // If we exhausted retries, throw the last error
1796
+ throw lastError;
1605
1797
  },
1606
1798
  /**
1607
1799
  * Retrieve a single Asset record by ID.
1608
- * @param props - Properties to update.
1800
+ * Enhanced with connection resilience against Prisma connection errors.
1801
+ * @param props - Properties to identify the record.
1609
1802
  * @param globalClient - Apollo Client instance.
1803
+ * @param whereInput - Optional custom where input.
1610
1804
  * @returns The retrieved Asset or null.
1611
1805
  */
1612
1806
  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;
1807
+ var _a, _b, _c, _d, _e, _f, _g;
1808
+ // Maximum number of retries for database connection issues
1809
+ const MAX_RETRIES = 3;
1810
+ let retryCount = 0;
1811
+ let lastError = null;
1812
+ // Retry loop to handle potential database connection issues
1813
+ while (retryCount < MAX_RETRIES) {
1814
+ try {
1815
+ const [modules, client] = await Promise.all([
1816
+ (0, client_1.getApolloModules)(),
1817
+ globalClient
1818
+ ? Promise.resolve(globalClient)
1819
+ : client_1.client
1820
+ ]);
1821
+ const { gql, ApolloError } = modules;
1822
+ const GET_ASSET = gql `
1823
+ query getAsset($where: AssetWhereUniqueInput!) {
1824
+ getAsset(where: $where) {
1825
+ ${selectionSet}
1644
1826
  }
1645
- else {
1646
- console.error('Error in getAsset:', error);
1827
+ }`;
1828
+ const variables = {
1829
+ where: whereInput ? whereInput : {
1830
+ id: props.id !== undefined ? props.id : undefined,
1831
+ symbol: props.symbol !== undefined ? props.symbol : undefined,
1832
+ name: props.name !== undefined ? props.name : undefined,
1833
+ },
1834
+ };
1835
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1836
+ const response = await client.query({
1837
+ query: GET_ASSET,
1838
+ variables: filteredVariables,
1839
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
1840
+ });
1841
+ if (response.errors && response.errors.length > 0)
1842
+ throw new Error(response.errors[0].message);
1843
+ return (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.getAsset) !== null && _b !== void 0 ? _b : null;
1844
+ }
1845
+ catch (error) {
1846
+ lastError = error;
1847
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
1848
+ if (error.message === 'No Asset found') {
1849
+ return null;
1850
+ }
1851
+ // Check if this is a database connection error that we should retry
1852
+ const isConnectionError = ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Server has closed the connection')) ||
1853
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Cannot reach database server')) ||
1854
+ ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('Connection timed out')) ||
1855
+ ((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('Accelerate')) || // Prisma Accelerate proxy errors
1856
+ (error.networkError && ((_g = error.networkError.message) === null || _g === void 0 ? void 0 : _g.includes('Failed to fetch')));
1857
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1858
+ retryCount++;
1859
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1860
+ console.warn("Database connection error, retrying...");
1861
+ await new Promise(resolve => setTimeout(resolve, delay));
1862
+ continue;
1863
+ }
1864
+ // Log the error and rethrow
1865
+ console.error("Database error occurred:", error);
1647
1866
  throw error;
1648
1867
  }
1649
1868
  }
1869
+ // If we exhausted retries, throw the last error
1870
+ throw lastError;
1650
1871
  },
1651
1872
  /**
1652
1873
  * Retrieve all Assets records.
1874
+ * Enhanced with connection resilience against Prisma connection errors.
1653
1875
  * @param globalClient - Apollo Client instance.
1654
1876
  * @returns An array of Asset records or null.
1655
1877
  */
1656
1878
  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;
1879
+ var _a, _b, _c, _d, _e, _f, _g;
1880
+ // Maximum number of retries for database connection issues
1881
+ const MAX_RETRIES = 3;
1882
+ let retryCount = 0;
1883
+ let lastError = null;
1884
+ // Retry loop to handle potential database connection issues
1885
+ while (retryCount < MAX_RETRIES) {
1886
+ try {
1887
+ const [modules, client] = await Promise.all([
1888
+ (0, client_1.getApolloModules)(),
1889
+ globalClient
1890
+ ? Promise.resolve(globalClient)
1891
+ : client_1.client
1892
+ ]);
1893
+ const { gql, ApolloError } = modules;
1894
+ const GET_ALL_ASSET = gql `
1895
+ query getAllAsset {
1896
+ assets {
1897
+ ${selectionSet}
1680
1898
  }
1681
- else {
1682
- console.error('Error in getAsset:', error);
1899
+ }`;
1900
+ const response = await client.query({
1901
+ query: GET_ALL_ASSET,
1902
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
1903
+ });
1904
+ if (response.errors && response.errors.length > 0)
1905
+ throw new Error(response.errors[0].message);
1906
+ return (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.assets) !== null && _b !== void 0 ? _b : null;
1907
+ }
1908
+ catch (error) {
1909
+ lastError = error;
1910
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
1911
+ if (error.message === 'No Asset found') {
1912
+ return null;
1913
+ }
1914
+ // Check if this is a database connection error that we should retry
1915
+ const isConnectionError = ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Server has closed the connection')) ||
1916
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Cannot reach database server')) ||
1917
+ ((_e = error.message) === null || _e === void 0 ? void 0 : _e.includes('Connection timed out')) ||
1918
+ ((_f = error.message) === null || _f === void 0 ? void 0 : _f.includes('Accelerate')) || // Prisma Accelerate proxy errors
1919
+ (error.networkError && ((_g = error.networkError.message) === null || _g === void 0 ? void 0 : _g.includes('Failed to fetch')));
1920
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1921
+ retryCount++;
1922
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1923
+ console.warn("Database connection error, retrying...");
1924
+ await new Promise(resolve => setTimeout(resolve, delay));
1925
+ continue;
1926
+ }
1927
+ // Log the error and rethrow
1928
+ console.error("Database error occurred:", error);
1683
1929
  throw error;
1684
1930
  }
1685
1931
  }
1932
+ // If we exhausted retries, throw the last error
1933
+ throw lastError;
1686
1934
  },
1687
1935
  /**
1688
1936
  * Find multiple Asset records based on conditions.
1937
+ * Enhanced with connection resilience against Prisma connection errors.
1689
1938
  * @param props - Conditions to find records.
1690
1939
  * @param globalClient - Apollo Client instance.
1940
+ * @param whereInput - Optional custom where input.
1691
1941
  * @returns An array of found Asset records or null.
1692
1942
  */
1693
1943
  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;
1944
+ var _a, _b, _c, _d, _e;
1945
+ // Maximum number of retries for database connection issues
1946
+ const MAX_RETRIES = 3;
1947
+ let retryCount = 0;
1948
+ let lastError = null;
1949
+ // Retry loop to handle potential database connection issues
1950
+ while (retryCount < MAX_RETRIES) {
1951
+ try {
1952
+ const [modules, client] = await Promise.all([
1953
+ (0, client_1.getApolloModules)(),
1954
+ globalClient
1955
+ ? Promise.resolve(globalClient)
1956
+ : client_1.client
1957
+ ]);
1958
+ const { gql, ApolloError } = modules;
1959
+ const FIND_MANY_ASSET = gql `
1960
+ query findManyAsset($where: AssetWhereInput!) {
1961
+ assets(where: $where) {
1962
+ ${selectionSet}
1727
1963
  }
1728
- else {
1729
- return [];
1730
- }
1731
- }
1732
- catch (error) {
1733
- if (error instanceof ApolloError && error.message === 'No Asset found') {
1734
- return null;
1964
+ }`;
1965
+ const variables = {
1966
+ where: whereInput ? whereInput : {
1967
+ id: props.id !== undefined ? {
1968
+ equals: props.id
1969
+ } : undefined,
1970
+ symbol: props.symbol !== undefined ? {
1971
+ equals: props.symbol
1972
+ } : undefined,
1973
+ name: props.name !== undefined ? {
1974
+ equals: props.name
1975
+ } : undefined,
1976
+ },
1977
+ };
1978
+ const filteredVariables = (0, utils_1.removeUndefinedProps)(variables);
1979
+ const response = await client.query({
1980
+ query: FIND_MANY_ASSET,
1981
+ variables: filteredVariables,
1982
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
1983
+ });
1984
+ if (response.errors && response.errors.length > 0)
1985
+ throw new Error(response.errors[0].message);
1986
+ if (response && response.data && response.data.assets) {
1987
+ return response.data.assets;
1988
+ }
1989
+ else {
1990
+ return [];
1991
+ }
1735
1992
  }
1736
- else {
1737
- console.error('Error in getAsset:', error);
1993
+ catch (error) {
1994
+ lastError = error;
1995
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
1996
+ if (error.message === 'No Asset found') {
1997
+ return null;
1998
+ }
1999
+ // Check if this is a database connection error that we should retry
2000
+ const isConnectionError = ((_a = error.message) === null || _a === void 0 ? void 0 : _a.includes('Server has closed the connection')) ||
2001
+ ((_b = error.message) === null || _b === void 0 ? void 0 : _b.includes('Cannot reach database server')) ||
2002
+ ((_c = error.message) === null || _c === void 0 ? void 0 : _c.includes('Connection timed out')) ||
2003
+ ((_d = error.message) === null || _d === void 0 ? void 0 : _d.includes('Accelerate')) || // Prisma Accelerate proxy errors
2004
+ (error.networkError && ((_e = error.networkError.message) === null || _e === void 0 ? void 0 : _e.includes('Failed to fetch')));
2005
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
2006
+ retryCount++;
2007
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
2008
+ console.warn("Database connection error, retrying...");
2009
+ await new Promise(resolve => setTimeout(resolve, delay));
2010
+ continue;
2011
+ }
2012
+ // Log the error and rethrow
2013
+ console.error("Database error occurred:", error);
1738
2014
  throw error;
1739
2015
  }
1740
2016
  }
2017
+ // If we exhausted retries, throw the last error
2018
+ throw lastError;
1741
2019
  }
1742
2020
  };
1743
2021
  //# sourceMappingURL=Asset.js.map