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