adaptic-backend 1.0.340 → 1.0.342

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