adaptic-backend 1.0.339 → 1.0.341

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (352) hide show
  1. package/Account.cjs +2543 -2265
  2. package/Account.d.ts +19 -2
  3. package/Action.cjs +1115 -683
  4. package/Action.d.ts +19 -2
  5. package/Alert.cjs +2626 -2348
  6. package/Alert.d.ts +19 -2
  7. package/Allocation.cjs +2578 -2300
  8. package/Allocation.d.ts +19 -2
  9. package/AlpacaAccount.cjs +2383 -2105
  10. package/AlpacaAccount.d.ts +19 -2
  11. package/Asset.cjs +1813 -1535
  12. package/Asset.d.ts +19 -2
  13. package/Authenticator.cjs +2568 -2290
  14. package/Authenticator.d.ts +19 -2
  15. package/Customer.cjs +2495 -2217
  16. package/Customer.d.ts +19 -2
  17. package/EconomicEvent.cjs +645 -367
  18. package/EconomicEvent.d.ts +19 -2
  19. package/MarketSentiment.cjs +618 -340
  20. package/MarketSentiment.d.ts +19 -2
  21. package/NewsArticle.cjs +1933 -1655
  22. package/NewsArticle.d.ts +19 -2
  23. package/NewsArticleAssetSentiment.cjs +1842 -1564
  24. package/NewsArticleAssetSentiment.d.ts +19 -2
  25. package/ScheduledOptionOrder.cjs +594 -316
  26. package/ScheduledOptionOrder.d.ts +19 -2
  27. package/Session.cjs +2570 -2292
  28. package/Session.d.ts +19 -2
  29. package/Trade.cjs +1087 -666
  30. package/Trade.d.ts +19 -2
  31. package/User.cjs +2288 -2010
  32. package/User.d.ts +19 -2
  33. package/VerificationToken.cjs +606 -328
  34. package/VerificationToken.d.ts +19 -2
  35. package/esm/Account.d.ts +19 -2
  36. package/esm/Account.d.ts.map +1 -1
  37. package/esm/Account.js.map +1 -1
  38. package/esm/Account.mjs +2534 -2263
  39. package/esm/Action.d.ts +19 -2
  40. package/esm/Action.d.ts.map +1 -1
  41. package/esm/Action.js.map +1 -1
  42. package/esm/Action.mjs +1106 -681
  43. package/esm/Alert.d.ts +19 -2
  44. package/esm/Alert.d.ts.map +1 -1
  45. package/esm/Alert.js.map +1 -1
  46. package/esm/Alert.mjs +2617 -2346
  47. package/esm/Allocation.d.ts +19 -2
  48. package/esm/Allocation.d.ts.map +1 -1
  49. package/esm/Allocation.js.map +1 -1
  50. package/esm/Allocation.mjs +2569 -2298
  51. package/esm/AlpacaAccount.d.ts +19 -2
  52. package/esm/AlpacaAccount.d.ts.map +1 -1
  53. package/esm/AlpacaAccount.js.map +1 -1
  54. package/esm/AlpacaAccount.mjs +2374 -2103
  55. package/esm/Asset.d.ts +19 -2
  56. package/esm/Asset.d.ts.map +1 -1
  57. package/esm/Asset.js.map +1 -1
  58. package/esm/Asset.mjs +1804 -1533
  59. package/esm/Authenticator.d.ts +19 -2
  60. package/esm/Authenticator.d.ts.map +1 -1
  61. package/esm/Authenticator.js.map +1 -1
  62. package/esm/Authenticator.mjs +2559 -2288
  63. package/esm/Customer.d.ts +19 -2
  64. package/esm/Customer.d.ts.map +1 -1
  65. package/esm/Customer.js.map +1 -1
  66. package/esm/Customer.mjs +2486 -2215
  67. package/esm/EconomicEvent.d.ts +19 -2
  68. package/esm/EconomicEvent.d.ts.map +1 -1
  69. package/esm/EconomicEvent.js.map +1 -1
  70. package/esm/EconomicEvent.mjs +636 -365
  71. package/esm/MarketSentiment.d.ts +19 -2
  72. package/esm/MarketSentiment.d.ts.map +1 -1
  73. package/esm/MarketSentiment.js.map +1 -1
  74. package/esm/MarketSentiment.mjs +609 -338
  75. package/esm/NewsArticle.d.ts +19 -2
  76. package/esm/NewsArticle.d.ts.map +1 -1
  77. package/esm/NewsArticle.js.map +1 -1
  78. package/esm/NewsArticle.mjs +1924 -1653
  79. package/esm/NewsArticleAssetSentiment.d.ts +19 -2
  80. package/esm/NewsArticleAssetSentiment.d.ts.map +1 -1
  81. package/esm/NewsArticleAssetSentiment.js.map +1 -1
  82. package/esm/NewsArticleAssetSentiment.mjs +1833 -1562
  83. package/esm/ScheduledOptionOrder.d.ts +19 -2
  84. package/esm/ScheduledOptionOrder.d.ts.map +1 -1
  85. package/esm/ScheduledOptionOrder.js.map +1 -1
  86. package/esm/ScheduledOptionOrder.mjs +585 -314
  87. package/esm/Session.d.ts +19 -2
  88. package/esm/Session.d.ts.map +1 -1
  89. package/esm/Session.js.map +1 -1
  90. package/esm/Session.mjs +2561 -2290
  91. package/esm/Trade.d.ts +19 -2
  92. package/esm/Trade.d.ts.map +1 -1
  93. package/esm/Trade.js.map +1 -1
  94. package/esm/Trade.mjs +1078 -664
  95. package/esm/User.d.ts +19 -2
  96. package/esm/User.d.ts.map +1 -1
  97. package/esm/User.js.map +1 -1
  98. package/esm/User.mjs +2279 -2008
  99. package/esm/VerificationToken.d.ts +19 -2
  100. package/esm/VerificationToken.d.ts.map +1 -1
  101. package/esm/VerificationToken.js.map +1 -1
  102. package/esm/VerificationToken.mjs +597 -326
  103. package/esm/generated/selectionSets/Trade.d.ts +1 -1
  104. package/esm/generated/selectionSets/Trade.d.ts.map +1 -1
  105. package/esm/generated/selectionSets/Trade.js.map +1 -1
  106. package/esm/generated/selectionSets/Trade.mjs +14 -3
  107. package/esm/generated/typeStrings/Trade.d.ts +1 -1
  108. package/esm/generated/typeStrings/Trade.d.ts.map +1 -1
  109. package/esm/generated/typeStrings/Trade.js.map +1 -1
  110. package/esm/generated/typeStrings/Trade.mjs +0 -6
  111. package/esm/generated/typeStrings/index.d.ts +1 -1
  112. package/esm/generated/typegraphql-prisma/enhance.js.map +1 -1
  113. package/esm/generated/typegraphql-prisma/enhance.mjs +24 -24
  114. package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts +15 -4
  115. package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts.map +1 -1
  116. package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.js.map +1 -1
  117. package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.mjs +14 -3
  118. package/esm/generated/typegraphql-prisma/models/Trade.d.ts +56 -12
  119. package/esm/generated/typegraphql-prisma/models/Trade.d.ts.map +1 -1
  120. package/esm/generated/typegraphql-prisma/models/Trade.js.map +1 -1
  121. package/esm/generated/typegraphql-prisma/models/Trade.mjs +154 -33
  122. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts +1 -1
  123. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts.map +1 -1
  124. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.js.map +1 -1
  125. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts +1 -1
  126. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts.map +1 -1
  127. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.js.map +1 -1
  128. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts +1 -1
  129. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts.map +1 -1
  130. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.js.map +1 -1
  131. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts +1 -1
  132. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts.map +1 -1
  133. package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.js.map +1 -1
  134. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts +9 -3
  135. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts.map +1 -1
  136. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.js.map +1 -1
  137. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.mjs +49 -7
  138. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts +14 -3
  139. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts.map +1 -1
  140. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.js.map +1 -1
  141. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.mjs +93 -16
  142. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts +14 -3
  143. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts.map +1 -1
  144. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.js.map +1 -1
  145. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.mjs +98 -21
  146. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts +14 -3
  147. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts.map +1 -1
  148. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.js.map +1 -1
  149. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.mjs +98 -21
  150. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts +14 -3
  151. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts.map +1 -1
  152. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.js.map +1 -1
  153. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.mjs +98 -21
  154. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts +14 -3
  155. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts.map +1 -1
  156. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.js.map +1 -1
  157. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.mjs +93 -16
  158. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts +14 -3
  159. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts.map +1 -1
  160. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.js.map +1 -1
  161. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.mjs +93 -16
  162. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts +14 -3
  163. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts.map +1 -1
  164. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.js.map +1 -1
  165. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.mjs +97 -20
  166. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts +14 -3
  167. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts.map +1 -1
  168. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.js.map +1 -1
  169. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.mjs +97 -20
  170. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts +16 -3
  171. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts.map +1 -1
  172. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.js.map +1 -1
  173. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.mjs +100 -21
  174. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts +9 -3
  175. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts.map +1 -1
  176. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.js.map +1 -1
  177. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.mjs +49 -7
  178. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts +16 -3
  179. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts.map +1 -1
  180. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.js.map +1 -1
  181. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.mjs +100 -21
  182. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts +16 -3
  183. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts.map +1 -1
  184. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.js.map +1 -1
  185. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.mjs +100 -21
  186. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts +16 -3
  187. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts.map +1 -1
  188. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.js.map +1 -1
  189. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.mjs +100 -21
  190. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts +16 -3
  191. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts.map +1 -1
  192. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.js.map +1 -1
  193. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.mjs +100 -21
  194. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts +16 -3
  195. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts.map +1 -1
  196. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.js.map +1 -1
  197. package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.mjs +100 -21
  198. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts +14 -3
  199. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts.map +1 -1
  200. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.js.map +1 -1
  201. package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.mjs +98 -21
  202. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts +9 -3
  203. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts.map +1 -1
  204. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.js.map +1 -1
  205. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.mjs +49 -7
  206. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts +14 -3
  207. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts.map +1 -1
  208. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.js.map +1 -1
  209. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.mjs +93 -16
  210. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts +14 -3
  211. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts.map +1 -1
  212. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.js.map +1 -1
  213. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.mjs +98 -21
  214. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts +14 -3
  215. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts.map +1 -1
  216. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.js.map +1 -1
  217. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.mjs +98 -21
  218. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts +14 -3
  219. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts.map +1 -1
  220. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.js.map +1 -1
  221. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.mjs +98 -21
  222. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts +9 -3
  223. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts.map +1 -1
  224. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.js.map +1 -1
  225. package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.mjs +49 -7
  226. package/esm/prismaClient.d.ts +4 -5
  227. package/esm/prismaClient.d.ts.map +1 -1
  228. package/esm/prismaClient.js.map +1 -1
  229. package/esm/prismaClient.mjs +13 -11
  230. package/generated/typeStrings/Trade.cjs +0 -6
  231. package/generated/typeStrings/Trade.d.ts +1 -1
  232. package/generated/typeStrings/Trade.d.ts.map +1 -1
  233. package/generated/typeStrings/Trade.js.map +1 -1
  234. package/generated/typeStrings/index.d.ts +1 -1
  235. package/generated/typegraphql-prisma/enhance.cjs +24 -24
  236. package/generated/typegraphql-prisma/enhance.js.map +1 -1
  237. package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.cjs +14 -3
  238. package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts +15 -4
  239. package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts.map +1 -1
  240. package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.js.map +1 -1
  241. package/generated/typegraphql-prisma/models/Trade.cjs +98 -21
  242. package/generated/typegraphql-prisma/models/Trade.d.ts +56 -12
  243. package/generated/typegraphql-prisma/models/Trade.d.ts.map +1 -1
  244. package/generated/typegraphql-prisma/models/Trade.js.map +1 -1
  245. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts +1 -1
  246. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts.map +1 -1
  247. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.js.map +1 -1
  248. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts +1 -1
  249. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts.map +1 -1
  250. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.js.map +1 -1
  251. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts +1 -1
  252. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts.map +1 -1
  253. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.js.map +1 -1
  254. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts +1 -1
  255. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts.map +1 -1
  256. package/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.js.map +1 -1
  257. package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.cjs +40 -4
  258. package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts +9 -3
  259. package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts.map +1 -1
  260. package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.js.map +1 -1
  261. package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.cjs +79 -13
  262. package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts +14 -3
  263. package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts.map +1 -1
  264. package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.js.map +1 -1
  265. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.cjs +84 -18
  266. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts +14 -3
  267. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts.map +1 -1
  268. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.js.map +1 -1
  269. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.cjs +84 -18
  270. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts +14 -3
  271. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts.map +1 -1
  272. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.js.map +1 -1
  273. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.cjs +84 -18
  274. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts +14 -3
  275. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts.map +1 -1
  276. package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.js.map +1 -1
  277. package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.cjs +79 -13
  278. package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts +14 -3
  279. package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts.map +1 -1
  280. package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.js.map +1 -1
  281. package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.cjs +79 -13
  282. package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts +14 -3
  283. package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts.map +1 -1
  284. package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.js.map +1 -1
  285. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.cjs +83 -17
  286. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts +14 -3
  287. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts.map +1 -1
  288. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.js.map +1 -1
  289. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.cjs +83 -17
  290. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts +14 -3
  291. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts.map +1 -1
  292. package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.js.map +1 -1
  293. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.cjs +86 -18
  294. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts +16 -3
  295. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts.map +1 -1
  296. package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.js.map +1 -1
  297. package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.cjs +40 -4
  298. package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts +9 -3
  299. package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts.map +1 -1
  300. package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.js.map +1 -1
  301. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.cjs +86 -18
  302. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts +16 -3
  303. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts.map +1 -1
  304. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.js.map +1 -1
  305. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.cjs +86 -18
  306. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts +16 -3
  307. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts.map +1 -1
  308. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.js.map +1 -1
  309. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.cjs +86 -18
  310. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts +16 -3
  311. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts.map +1 -1
  312. package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.js.map +1 -1
  313. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.cjs +86 -18
  314. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts +16 -3
  315. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts.map +1 -1
  316. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.js.map +1 -1
  317. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.cjs +86 -18
  318. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts +16 -3
  319. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts.map +1 -1
  320. package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.js.map +1 -1
  321. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.cjs +84 -18
  322. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts +14 -3
  323. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts.map +1 -1
  324. package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.js.map +1 -1
  325. package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.cjs +40 -4
  326. package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts +9 -3
  327. package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts.map +1 -1
  328. package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.js.map +1 -1
  329. package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.cjs +79 -13
  330. package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts +14 -3
  331. package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts.map +1 -1
  332. package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.js.map +1 -1
  333. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.cjs +84 -18
  334. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts +14 -3
  335. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts.map +1 -1
  336. package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.js.map +1 -1
  337. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.cjs +84 -18
  338. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts +14 -3
  339. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts.map +1 -1
  340. package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.js.map +1 -1
  341. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.cjs +84 -18
  342. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts +14 -3
  343. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts.map +1 -1
  344. package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.js.map +1 -1
  345. package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.cjs +40 -4
  346. package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts +9 -3
  347. package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts.map +1 -1
  348. package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.js.map +1 -1
  349. package/package.json +1 -1
  350. package/prismaClient.cjs +13 -11
  351. package/prismaClient.d.ts +4 -5
  352. package/server.cjs +37 -5
package/esm/Action.mjs CHANGED
@@ -24,783 +24,1208 @@ export const Action = {
24
24
  * @param client - Apollo Client instance.
25
25
  * @returns The created Action or null.
26
26
  */
27
+ /**
28
+ * Create a new Action record.
29
+ * Enhanced with connection resilience against Prisma connection errors.
30
+ * @param props - Properties for the new record.
31
+ * @param globalClient - Apollo Client instance.
32
+ * @returns The created Action or null.
33
+ */
27
34
  async create(props, globalClient) {
28
- const [modules, client] = await Promise.all([
29
- getApolloModules(),
30
- globalClient
31
- ? Promise.resolve(globalClient)
32
- : importedClient
33
- ]);
34
- const { gql, ApolloError } = modules;
35
- const CREATE_ONE_ACTION = gql `
36
- mutation createOneAction($data: ActionCreateInput!) {
37
- createOneAction(data: $data) {
38
- ${selectionSet}
39
- }
40
- }
41
- `;
42
- const variables = {
43
- data: {
44
- sequence: props.sequence !== undefined ? props.sequence : undefined,
45
- type: props.type !== undefined ? props.type : undefined,
46
- primary: props.primary !== undefined ? props.primary : undefined,
47
- note: props.note !== undefined ? props.note : undefined,
48
- status: props.status !== undefined ? props.status : undefined,
49
- alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
50
- trade: props.trade ?
51
- typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && Object.keys(props.trade)[0] === 'id'
52
- ? { connect: {
53
- id: props.trade.id
54
- }
55
- }
56
- : { connectOrCreate: {
57
- where: {
58
- id: props.trade.id !== undefined ? props.trade.id : undefined,
59
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
60
- equals: props.trade.alpacaAccountId
61
- } : undefined,
62
- symbol: props.trade.symbol !== undefined ? {
63
- equals: props.trade.symbol
64
- } : undefined,
65
- },
66
- create: {
67
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
68
- qty: props.trade.qty !== undefined ? props.trade.qty : undefined,
69
- price: props.trade.price !== undefined ? props.trade.price : undefined,
70
- total: props.trade.total !== undefined ? props.trade.total : undefined,
71
- signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
72
- strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
73
- analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
74
- summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
75
- confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
76
- timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
77
- status: props.trade.status !== undefined ? props.trade.status : undefined,
78
- symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
79
- },
80
- }
81
- } : undefined,
82
- },
83
- };
84
- const filteredVariables = removeUndefinedProps(variables);
85
- try {
86
- const response = await client.mutate({ mutation: CREATE_ONE_ACTION, variables: filteredVariables });
87
- if (response.errors && response.errors.length > 0)
88
- throw new Error(response.errors[0].message);
89
- if (response && response.data && response.data.createOneAction) {
90
- return response.data.createOneAction;
35
+ // Maximum number of retries for database connection issues
36
+ const MAX_RETRIES = 3;
37
+ let retryCount = 0;
38
+ let lastError = null;
39
+ // Retry loop to handle potential database connection issues
40
+ while (retryCount < MAX_RETRIES) {
41
+ try {
42
+ const [modules, client] = await Promise.all([
43
+ getApolloModules(),
44
+ globalClient
45
+ ? Promise.resolve(globalClient)
46
+ : importedClient
47
+ ]);
48
+ const { gql, ApolloError } = modules;
49
+ const CREATE_ONE_ACTION = gql `
50
+ mutation createOneAction($data: ActionCreateInput!) {
51
+ createOneAction(data: $data) {
52
+ ${selectionSet}
53
+ }
54
+ }
55
+ `;
56
+ const variables = {
57
+ data: {
58
+ sequence: props.sequence !== undefined ? props.sequence : undefined,
59
+ type: props.type !== undefined ? props.type : undefined,
60
+ primary: props.primary !== undefined ? props.primary : undefined,
61
+ note: props.note !== undefined ? props.note : undefined,
62
+ status: props.status !== undefined ? props.status : undefined,
63
+ alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
64
+ trade: props.trade ?
65
+ typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && Object.keys(props.trade)[0] === 'id'
66
+ ? { connect: {
67
+ id: props.trade.id
68
+ }
69
+ }
70
+ : { connectOrCreate: {
71
+ where: {
72
+ id: props.trade.id !== undefined ? props.trade.id : undefined,
73
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
74
+ equals: props.trade.alpacaAccountId
75
+ } : undefined,
76
+ symbol: props.trade.symbol !== undefined ? {
77
+ equals: props.trade.symbol
78
+ } : undefined,
79
+ },
80
+ create: {
81
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
82
+ signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
83
+ strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
84
+ analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
85
+ summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
86
+ confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
87
+ timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
88
+ status: props.trade.status !== undefined ? props.trade.status : undefined,
89
+ symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
90
+ entryPrice: props.trade.entryPrice !== undefined ? props.trade.entryPrice : undefined,
91
+ exitPrice: props.trade.exitPrice !== undefined ? props.trade.exitPrice : undefined,
92
+ entryQty: props.trade.entryQty !== undefined ? props.trade.entryQty : undefined,
93
+ exitQty: props.trade.exitQty !== undefined ? props.trade.exitQty : undefined,
94
+ entryValue: props.trade.entryValue !== undefined ? props.trade.entryValue : undefined,
95
+ exitValue: props.trade.exitValue !== undefined ? props.trade.exitValue : undefined,
96
+ entryTime: props.trade.entryTime !== undefined ? props.trade.entryTime : undefined,
97
+ exitTime: props.trade.exitTime !== undefined ? props.trade.exitTime : undefined,
98
+ pnlAmount: props.trade.pnlAmount !== undefined ? props.trade.pnlAmount : undefined,
99
+ pnlPercent: props.trade.pnlPercent !== undefined ? props.trade.pnlPercent : undefined,
100
+ durationMinutes: props.trade.durationMinutes !== undefined ? props.trade.durationMinutes : undefined,
101
+ marketPhase: props.trade.marketPhase !== undefined ? props.trade.marketPhase : undefined,
102
+ marketVolatility: props.trade.marketVolatility !== undefined ? props.trade.marketVolatility : undefined,
103
+ thresholdsJson: props.trade.thresholdsJson !== undefined ? props.trade.thresholdsJson : undefined,
104
+ },
105
+ }
106
+ } : undefined,
107
+ },
108
+ };
109
+ const filteredVariables = removeUndefinedProps(variables);
110
+ const response = await client.mutate({
111
+ mutation: CREATE_ONE_ACTION,
112
+ variables: filteredVariables,
113
+ // Don't cache mutations, but ensure we're using the freshest context
114
+ fetchPolicy: 'no-cache'
115
+ });
116
+ if (response.errors && response.errors.length > 0)
117
+ throw new Error(response.errors[0].message);
118
+ if (response && response.data && response.data.createOneAction) {
119
+ return response.data.createOneAction;
120
+ }
121
+ else {
122
+ return null;
123
+ }
91
124
  }
92
- else {
93
- return null;
125
+ catch (error) {
126
+ lastError = error;
127
+ // Check if this is a database connection error that we should retry
128
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
129
+ error.message?.includes('Cannot reach database server') ||
130
+ error.message?.includes('Connection timed out') ||
131
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
132
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
133
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
134
+ retryCount++;
135
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
136
+ console.warn("Database connection error, retrying...");
137
+ await new Promise(resolve => setTimeout(resolve, delay));
138
+ continue;
139
+ }
140
+ // Log the error and rethrow
141
+ console.error("Database error occurred:", error);
142
+ throw error;
94
143
  }
95
144
  }
96
- catch (error) {
97
- console.error('Error in createOneAction:', error);
98
- throw error;
99
- }
145
+ // If we exhausted retries, throw the last error
146
+ throw lastError;
100
147
  },
101
148
  /**
102
149
  * Create multiple Action records.
150
+ * Enhanced with connection resilience against Prisma connection errors.
103
151
  * @param props - Array of Action objects for the new records.
104
152
  * @param globalClient - Apollo Client instance.
105
153
  * @returns The count of created records or null.
106
154
  */
107
155
  async createMany(props, globalClient) {
108
- const [modules, client] = await Promise.all([
109
- getApolloModules(),
110
- globalClient
111
- ? Promise.resolve(globalClient)
112
- : importedClient
113
- ]);
114
- const { gql, ApolloError } = modules;
115
- const CREATE_MANY_ACTION = gql `
116
- mutation createManyAction($data: [ActionCreateManyInput!]!) {
117
- createManyAction(data: $data) {
118
- count
119
- }
120
- }`;
121
- const variables = {
122
- data: props.map(prop => ({
123
- sequence: prop.sequence !== undefined ? prop.sequence : undefined,
124
- tradeId: prop.tradeId !== undefined ? prop.tradeId : undefined,
125
- type: prop.type !== undefined ? prop.type : undefined,
126
- primary: prop.primary !== undefined ? prop.primary : undefined,
127
- note: prop.note !== undefined ? prop.note : undefined,
128
- status: prop.status !== undefined ? prop.status : undefined,
129
- alpacaOrderId: prop.alpacaOrderId !== undefined ? prop.alpacaOrderId : undefined,
130
- })),
131
- };
132
- const filteredVariables = removeUndefinedProps(variables);
133
- try {
134
- const response = await client.mutate({ mutation: CREATE_MANY_ACTION, variables: filteredVariables });
135
- if (response.errors && response.errors.length > 0)
136
- throw new Error(response.errors[0].message);
137
- if (response && response.data && response.data.createManyAction) {
138
- return response.data.createManyAction;
156
+ // Maximum number of retries for database connection issues
157
+ const MAX_RETRIES = 3;
158
+ let retryCount = 0;
159
+ let lastError = null;
160
+ // Retry loop to handle potential database connection issues
161
+ while (retryCount < MAX_RETRIES) {
162
+ try {
163
+ const [modules, client] = await Promise.all([
164
+ getApolloModules(),
165
+ globalClient
166
+ ? Promise.resolve(globalClient)
167
+ : importedClient
168
+ ]);
169
+ const { gql, ApolloError } = modules;
170
+ const CREATE_MANY_ACTION = gql `
171
+ mutation createManyAction($data: [ActionCreateManyInput!]!) {
172
+ createManyAction(data: $data) {
173
+ count
139
174
  }
140
- else {
141
- return null;
175
+ }`;
176
+ const variables = {
177
+ data: props.map(prop => ({
178
+ sequence: prop.sequence !== undefined ? prop.sequence : undefined,
179
+ tradeId: prop.tradeId !== undefined ? prop.tradeId : undefined,
180
+ type: prop.type !== undefined ? prop.type : undefined,
181
+ primary: prop.primary !== undefined ? prop.primary : undefined,
182
+ note: prop.note !== undefined ? prop.note : undefined,
183
+ status: prop.status !== undefined ? prop.status : undefined,
184
+ alpacaOrderId: prop.alpacaOrderId !== undefined ? prop.alpacaOrderId : undefined,
185
+ })),
186
+ };
187
+ const filteredVariables = removeUndefinedProps(variables);
188
+ const response = await client.mutate({
189
+ mutation: CREATE_MANY_ACTION,
190
+ variables: filteredVariables,
191
+ // Don't cache mutations, but ensure we're using the freshest context
192
+ fetchPolicy: 'no-cache'
193
+ });
194
+ if (response.errors && response.errors.length > 0)
195
+ throw new Error(response.errors[0].message);
196
+ if (response && response.data && response.data.createManyAction) {
197
+ return response.data.createManyAction;
198
+ }
199
+ else {
200
+ return null;
201
+ }
202
+ }
203
+ catch (error) {
204
+ lastError = error;
205
+ // Check if this is a database connection error that we should retry
206
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
207
+ error.message?.includes('Cannot reach database server') ||
208
+ error.message?.includes('Connection timed out') ||
209
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
210
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
211
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
212
+ retryCount++;
213
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
214
+ console.warn("Database connection error, retrying...");
215
+ await new Promise(resolve => setTimeout(resolve, delay));
216
+ continue;
217
+ }
218
+ // Log the error and rethrow
219
+ console.error("Database error occurred:", error);
220
+ throw error;
142
221
  }
143
222
  }
144
- catch (error) {
145
- console.error('Error in createManyAction:', error);
146
- throw error;
147
- }
223
+ // If we exhausted retries, throw the last error
224
+ throw lastError;
148
225
  },
149
226
  /**
150
227
  * Update a single Action record.
228
+ * Enhanced with connection resilience against Prisma connection errors.
151
229
  * @param props - Properties to update.
152
230
  * @param globalClient - Apollo Client instance.
153
231
  * @returns The updated Action or null.
154
232
  */
155
233
  async update(props, globalClient) {
156
- const [modules, client] = await Promise.all([
157
- getApolloModules(),
158
- globalClient
159
- ? Promise.resolve(globalClient)
160
- : importedClient
161
- ]);
162
- const { gql, ApolloError } = modules;
163
- const UPDATE_ONE_ACTION = gql `
164
- mutation updateOneAction($data: ActionUpdateInput!, $where: ActionWhereUniqueInput!) {
165
- updateOneAction(data: $data, where: $where) {
166
- ${selectionSet}
167
- }
168
- }`;
169
- const variables = {
170
- where: {
171
- id: props.id !== undefined ? props.id : undefined,
172
- alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
173
- tradeId: props.tradeId !== undefined ? {
174
- equals: props.tradeId
175
- } : undefined,
176
- },
177
- data: {
178
- id: props.id !== undefined ? {
179
- set: props.id
180
- } : undefined,
181
- sequence: props.sequence !== undefined ? {
182
- set: props.sequence
183
- } : undefined,
184
- type: props.type !== undefined ? {
185
- set: props.type
186
- } : undefined,
187
- primary: props.primary !== undefined ? {
188
- set: props.primary
189
- } : undefined,
190
- note: props.note !== undefined ? {
191
- set: props.note
192
- } : undefined,
193
- status: props.status !== undefined ? {
194
- set: props.status
195
- } : undefined,
196
- createdAt: props.createdAt !== undefined ? {
197
- set: props.createdAt
198
- } : undefined,
199
- updatedAt: props.updatedAt !== undefined ? {
200
- set: props.updatedAt
201
- } : undefined,
202
- alpacaOrderId: props.alpacaOrderId !== undefined ? {
203
- set: props.alpacaOrderId
204
- } : undefined,
205
- trade: props.trade ?
206
- typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && (Object.keys(props.trade)[0] === 'id' || Object.keys(props.trade)[0] === 'symbol')
207
- ? {
208
- connect: {
209
- id: props.trade.id
210
- }
211
- } : { upsert: {
212
- where: {
213
- id: props.trade.id !== undefined ? {
214
- equals: props.trade.id
215
- } : undefined,
216
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
217
- equals: props.trade.alpacaAccountId
218
- } : undefined,
219
- symbol: props.trade.symbol !== undefined ? {
220
- equals: props.trade.symbol
221
- } : undefined,
222
- },
223
- update: {
224
- id: props.trade.id !== undefined ? {
225
- set: props.trade.id
226
- } : undefined,
227
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
228
- set: props.trade.alpacaAccountId
229
- } : undefined,
230
- qty: props.trade.qty !== undefined ? {
231
- set: props.trade.qty
232
- } : undefined,
233
- price: props.trade.price !== undefined ? {
234
- set: props.trade.price
235
- } : undefined,
236
- total: props.trade.total !== undefined ? {
237
- set: props.trade.total
238
- } : undefined,
239
- signal: props.trade.signal !== undefined ? {
240
- set: props.trade.signal
241
- } : undefined,
242
- strategy: props.trade.strategy !== undefined ? {
243
- set: props.trade.strategy
244
- } : undefined,
245
- analysis: props.trade.analysis !== undefined ? {
246
- set: props.trade.analysis
247
- } : undefined,
248
- summary: props.trade.summary !== undefined ? {
249
- set: props.trade.summary
250
- } : undefined,
251
- confidence: props.trade.confidence !== undefined ? {
252
- set: props.trade.confidence
253
- } : undefined,
254
- timestamp: props.trade.timestamp !== undefined ? {
255
- set: props.trade.timestamp
256
- } : undefined,
257
- status: props.trade.status !== undefined ? {
258
- set: props.trade.status
259
- } : undefined,
260
- symbol: props.trade.symbol !== undefined ? {
261
- set: props.trade.symbol
262
- } : undefined,
263
- },
264
- create: {
265
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
266
- qty: props.trade.qty !== undefined ? props.trade.qty : undefined,
267
- price: props.trade.price !== undefined ? props.trade.price : undefined,
268
- total: props.trade.total !== undefined ? props.trade.total : undefined,
269
- signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
270
- strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
271
- analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
272
- summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
273
- confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
274
- timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
275
- status: props.trade.status !== undefined ? props.trade.status : undefined,
276
- symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
277
- },
278
- }
279
- } : undefined,
280
- },
281
- };
282
- const filteredVariables = removeUndefinedProps(variables);
283
- try {
284
- const response = await client.mutate({ mutation: UPDATE_ONE_ACTION, variables: filteredVariables });
285
- if (response.errors && response.errors.length > 0)
286
- throw new Error(response.errors[0].message);
287
- if (response && response.data && response.data.updateOneAction) {
288
- return response.data.updateOneAction;
234
+ // Maximum number of retries for database connection issues
235
+ const MAX_RETRIES = 3;
236
+ let retryCount = 0;
237
+ let lastError = null;
238
+ // Retry loop to handle potential database connection issues
239
+ while (retryCount < MAX_RETRIES) {
240
+ try {
241
+ const [modules, client] = await Promise.all([
242
+ getApolloModules(),
243
+ globalClient
244
+ ? Promise.resolve(globalClient)
245
+ : importedClient
246
+ ]);
247
+ const { gql, ApolloError } = modules;
248
+ const UPDATE_ONE_ACTION = gql `
249
+ mutation updateOneAction($data: ActionUpdateInput!, $where: ActionWhereUniqueInput!) {
250
+ updateOneAction(data: $data, where: $where) {
251
+ ${selectionSet}
289
252
  }
290
- else {
291
- return null;
253
+ }`;
254
+ const variables = {
255
+ where: {
256
+ id: props.id !== undefined ? props.id : undefined,
257
+ alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
258
+ tradeId: props.tradeId !== undefined ? {
259
+ equals: props.tradeId
260
+ } : undefined,
261
+ },
262
+ data: {
263
+ id: props.id !== undefined ? {
264
+ set: props.id
265
+ } : undefined,
266
+ sequence: props.sequence !== undefined ? {
267
+ set: props.sequence
268
+ } : undefined,
269
+ type: props.type !== undefined ? {
270
+ set: props.type
271
+ } : undefined,
272
+ primary: props.primary !== undefined ? {
273
+ set: props.primary
274
+ } : undefined,
275
+ note: props.note !== undefined ? {
276
+ set: props.note
277
+ } : undefined,
278
+ status: props.status !== undefined ? {
279
+ set: props.status
280
+ } : undefined,
281
+ createdAt: props.createdAt !== undefined ? {
282
+ set: props.createdAt
283
+ } : undefined,
284
+ updatedAt: props.updatedAt !== undefined ? {
285
+ set: props.updatedAt
286
+ } : undefined,
287
+ alpacaOrderId: props.alpacaOrderId !== undefined ? {
288
+ set: props.alpacaOrderId
289
+ } : undefined,
290
+ trade: props.trade ?
291
+ typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && (Object.keys(props.trade)[0] === 'id' || Object.keys(props.trade)[0] === 'symbol')
292
+ ? {
293
+ connect: {
294
+ id: props.trade.id
295
+ }
296
+ } : { upsert: {
297
+ where: {
298
+ id: props.trade.id !== undefined ? {
299
+ equals: props.trade.id
300
+ } : undefined,
301
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
302
+ equals: props.trade.alpacaAccountId
303
+ } : undefined,
304
+ symbol: props.trade.symbol !== undefined ? {
305
+ equals: props.trade.symbol
306
+ } : undefined,
307
+ },
308
+ update: {
309
+ id: props.trade.id !== undefined ? {
310
+ set: props.trade.id
311
+ } : undefined,
312
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
313
+ set: props.trade.alpacaAccountId
314
+ } : undefined,
315
+ signal: props.trade.signal !== undefined ? {
316
+ set: props.trade.signal
317
+ } : undefined,
318
+ strategy: props.trade.strategy !== undefined ? {
319
+ set: props.trade.strategy
320
+ } : undefined,
321
+ analysis: props.trade.analysis !== undefined ? {
322
+ set: props.trade.analysis
323
+ } : undefined,
324
+ summary: props.trade.summary !== undefined ? {
325
+ set: props.trade.summary
326
+ } : undefined,
327
+ confidence: props.trade.confidence !== undefined ? {
328
+ set: props.trade.confidence
329
+ } : undefined,
330
+ timestamp: props.trade.timestamp !== undefined ? {
331
+ set: props.trade.timestamp
332
+ } : undefined,
333
+ status: props.trade.status !== undefined ? {
334
+ set: props.trade.status
335
+ } : undefined,
336
+ symbol: props.trade.symbol !== undefined ? {
337
+ set: props.trade.symbol
338
+ } : undefined,
339
+ entryPrice: props.trade.entryPrice !== undefined ? {
340
+ set: props.trade.entryPrice
341
+ } : undefined,
342
+ exitPrice: props.trade.exitPrice !== undefined ? {
343
+ set: props.trade.exitPrice
344
+ } : undefined,
345
+ entryQty: props.trade.entryQty !== undefined ? {
346
+ set: props.trade.entryQty
347
+ } : undefined,
348
+ exitQty: props.trade.exitQty !== undefined ? {
349
+ set: props.trade.exitQty
350
+ } : undefined,
351
+ entryValue: props.trade.entryValue !== undefined ? {
352
+ set: props.trade.entryValue
353
+ } : undefined,
354
+ exitValue: props.trade.exitValue !== undefined ? {
355
+ set: props.trade.exitValue
356
+ } : undefined,
357
+ entryTime: props.trade.entryTime !== undefined ? {
358
+ set: props.trade.entryTime
359
+ } : undefined,
360
+ exitTime: props.trade.exitTime !== undefined ? {
361
+ set: props.trade.exitTime
362
+ } : undefined,
363
+ pnlAmount: props.trade.pnlAmount !== undefined ? {
364
+ set: props.trade.pnlAmount
365
+ } : undefined,
366
+ pnlPercent: props.trade.pnlPercent !== undefined ? {
367
+ set: props.trade.pnlPercent
368
+ } : undefined,
369
+ durationMinutes: props.trade.durationMinutes !== undefined ? {
370
+ set: props.trade.durationMinutes
371
+ } : undefined,
372
+ marketPhase: props.trade.marketPhase !== undefined ? {
373
+ set: props.trade.marketPhase
374
+ } : undefined,
375
+ marketVolatility: props.trade.marketVolatility !== undefined ? {
376
+ set: props.trade.marketVolatility
377
+ } : undefined,
378
+ thresholdsJson: props.trade.thresholdsJson !== undefined ? {
379
+ set: props.trade.thresholdsJson
380
+ } : undefined,
381
+ },
382
+ create: {
383
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
384
+ signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
385
+ strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
386
+ analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
387
+ summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
388
+ confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
389
+ timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
390
+ status: props.trade.status !== undefined ? props.trade.status : undefined,
391
+ symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
392
+ entryPrice: props.trade.entryPrice !== undefined ? props.trade.entryPrice : undefined,
393
+ exitPrice: props.trade.exitPrice !== undefined ? props.trade.exitPrice : undefined,
394
+ entryQty: props.trade.entryQty !== undefined ? props.trade.entryQty : undefined,
395
+ exitQty: props.trade.exitQty !== undefined ? props.trade.exitQty : undefined,
396
+ entryValue: props.trade.entryValue !== undefined ? props.trade.entryValue : undefined,
397
+ exitValue: props.trade.exitValue !== undefined ? props.trade.exitValue : undefined,
398
+ entryTime: props.trade.entryTime !== undefined ? props.trade.entryTime : undefined,
399
+ exitTime: props.trade.exitTime !== undefined ? props.trade.exitTime : undefined,
400
+ pnlAmount: props.trade.pnlAmount !== undefined ? props.trade.pnlAmount : undefined,
401
+ pnlPercent: props.trade.pnlPercent !== undefined ? props.trade.pnlPercent : undefined,
402
+ durationMinutes: props.trade.durationMinutes !== undefined ? props.trade.durationMinutes : undefined,
403
+ marketPhase: props.trade.marketPhase !== undefined ? props.trade.marketPhase : undefined,
404
+ marketVolatility: props.trade.marketVolatility !== undefined ? props.trade.marketVolatility : undefined,
405
+ thresholdsJson: props.trade.thresholdsJson !== undefined ? props.trade.thresholdsJson : undefined,
406
+ },
407
+ }
408
+ } : undefined,
409
+ },
410
+ };
411
+ const filteredVariables = removeUndefinedProps(variables);
412
+ const response = await client.mutate({
413
+ mutation: UPDATE_ONE_ACTION,
414
+ variables: filteredVariables,
415
+ // Don't cache mutations, but ensure we're using the freshest context
416
+ fetchPolicy: 'no-cache'
417
+ });
418
+ if (response.errors && response.errors.length > 0)
419
+ throw new Error(response.errors[0].message);
420
+ if (response && response.data && response.data.updateOneAction) {
421
+ return response.data.updateOneAction;
422
+ }
423
+ else {
424
+ return null;
425
+ }
426
+ }
427
+ catch (error) {
428
+ lastError = error;
429
+ // Check if this is a database connection error that we should retry
430
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
431
+ error.message?.includes('Cannot reach database server') ||
432
+ error.message?.includes('Connection timed out') ||
433
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
434
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
435
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
436
+ retryCount++;
437
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
438
+ console.warn("Database connection error, retrying...");
439
+ await new Promise(resolve => setTimeout(resolve, delay));
440
+ continue;
441
+ }
442
+ // Log the error and rethrow
443
+ console.error("Database error occurred:", error);
444
+ throw error;
292
445
  }
293
446
  }
294
- catch (error) {
295
- console.error('Error in updateOneAction:', error);
296
- throw error;
297
- }
447
+ // If we exhausted retries, throw the last error
448
+ throw lastError;
298
449
  },
299
450
  /**
300
451
  * Upsert a single Action record.
452
+ * Enhanced with connection resilience against Prisma connection errors.
301
453
  * @param props - Properties to update.
302
454
  * @param globalClient - Apollo Client instance.
303
455
  * @returns The updated Action or null.
304
456
  */
305
457
  async upsert(props, globalClient) {
306
- const [modules, client] = await Promise.all([
307
- getApolloModules(),
308
- globalClient
309
- ? Promise.resolve(globalClient)
310
- : importedClient
311
- ]);
312
- const { gql, ApolloError } = modules;
313
- const UPSERT_ONE_ACTION = gql `
314
- mutation upsertOneAction($where: ActionWhereUniqueInput!, $create: ActionCreateInput!, $update: ActionUpdateInput!) {
315
- upsertOneAction(where: $where, create: $create, update: $update) {
316
- ${selectionSet}
317
- }
318
- }`;
319
- const variables = {
320
- where: {
321
- id: props.id !== undefined ? props.id : undefined,
322
- alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
323
- tradeId: props.tradeId !== undefined ? {
324
- equals: props.tradeId
325
- } : undefined,
326
- },
327
- create: {
328
- sequence: props.sequence !== undefined ? props.sequence : undefined,
329
- type: props.type !== undefined ? props.type : undefined,
330
- primary: props.primary !== undefined ? props.primary : undefined,
331
- note: props.note !== undefined ? props.note : undefined,
332
- status: props.status !== undefined ? props.status : undefined,
333
- alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
334
- trade: props.trade ?
335
- typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && Object.keys(props.trade)[0] === 'id'
336
- ? { connect: {
337
- id: props.trade.id
338
- }
339
- }
340
- : { connectOrCreate: {
341
- where: {
342
- id: props.trade.id !== undefined ? props.trade.id : undefined,
343
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
344
- equals: props.trade.alpacaAccountId
345
- } : undefined,
346
- symbol: props.trade.symbol !== undefined ? {
347
- equals: props.trade.symbol
348
- } : undefined,
349
- },
350
- create: {
351
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
352
- qty: props.trade.qty !== undefined ? props.trade.qty : undefined,
353
- price: props.trade.price !== undefined ? props.trade.price : undefined,
354
- total: props.trade.total !== undefined ? props.trade.total : undefined,
355
- signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
356
- strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
357
- analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
358
- summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
359
- confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
360
- timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
361
- status: props.trade.status !== undefined ? props.trade.status : undefined,
362
- symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
363
- },
364
- }
458
+ // Maximum number of retries for database connection issues
459
+ const MAX_RETRIES = 3;
460
+ let retryCount = 0;
461
+ let lastError = null;
462
+ // Retry loop to handle potential database connection issues
463
+ while (retryCount < MAX_RETRIES) {
464
+ try {
465
+ const [modules, client] = await Promise.all([
466
+ getApolloModules(),
467
+ globalClient
468
+ ? Promise.resolve(globalClient)
469
+ : importedClient
470
+ ]);
471
+ const { gql, ApolloError } = modules;
472
+ const UPSERT_ONE_ACTION = gql `
473
+ mutation upsertOneAction($where: ActionWhereUniqueInput!, $create: ActionCreateInput!, $update: ActionUpdateInput!) {
474
+ upsertOneAction(where: $where, create: $create, update: $update) {
475
+ ${selectionSet}
476
+ }
477
+ }`;
478
+ const variables = {
479
+ where: {
480
+ id: props.id !== undefined ? props.id : undefined,
481
+ alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
482
+ tradeId: props.tradeId !== undefined ? {
483
+ equals: props.tradeId
365
484
  } : undefined,
366
- },
367
- update: {
368
- sequence: props.sequence !== undefined ? {
369
- set: props.sequence
370
- } : undefined,
371
- type: props.type !== undefined ? {
372
- set: props.type
373
- } : undefined,
374
- primary: props.primary !== undefined ? {
375
- set: props.primary
376
- } : undefined,
377
- note: props.note !== undefined ? {
378
- set: props.note
379
- } : undefined,
380
- status: props.status !== undefined ? {
381
- set: props.status
382
- } : undefined,
383
- alpacaOrderId: props.alpacaOrderId !== undefined ? {
384
- set: props.alpacaOrderId
385
- } : undefined,
386
- trade: props.trade ?
387
- typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && (Object.keys(props.trade)[0] === 'id' || Object.keys(props.trade)[0] === 'symbol')
388
- ? {
389
- connect: {
390
- id: props.trade.id
391
- }
392
- } : { upsert: {
393
- where: {
394
- id: props.trade.id !== undefined ? {
395
- equals: props.trade.id
396
- } : undefined,
397
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
398
- equals: props.trade.alpacaAccountId
399
- } : undefined,
400
- symbol: props.trade.symbol !== undefined ? {
401
- equals: props.trade.symbol
402
- } : undefined,
403
- },
404
- update: {
405
- id: props.trade.id !== undefined ? {
406
- set: props.trade.id
407
- } : undefined,
408
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
409
- set: props.trade.alpacaAccountId
410
- } : undefined,
411
- qty: props.trade.qty !== undefined ? {
412
- set: props.trade.qty
413
- } : undefined,
414
- price: props.trade.price !== undefined ? {
415
- set: props.trade.price
416
- } : undefined,
417
- total: props.trade.total !== undefined ? {
418
- set: props.trade.total
419
- } : undefined,
420
- signal: props.trade.signal !== undefined ? {
421
- set: props.trade.signal
422
- } : undefined,
423
- strategy: props.trade.strategy !== undefined ? {
424
- set: props.trade.strategy
425
- } : undefined,
426
- analysis: props.trade.analysis !== undefined ? {
427
- set: props.trade.analysis
428
- } : undefined,
429
- summary: props.trade.summary !== undefined ? {
430
- set: props.trade.summary
431
- } : undefined,
432
- confidence: props.trade.confidence !== undefined ? {
433
- set: props.trade.confidence
485
+ },
486
+ create: {
487
+ sequence: props.sequence !== undefined ? props.sequence : undefined,
488
+ type: props.type !== undefined ? props.type : undefined,
489
+ primary: props.primary !== undefined ? props.primary : undefined,
490
+ note: props.note !== undefined ? props.note : undefined,
491
+ status: props.status !== undefined ? props.status : undefined,
492
+ alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
493
+ trade: props.trade ?
494
+ typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && Object.keys(props.trade)[0] === 'id'
495
+ ? { connect: {
496
+ id: props.trade.id
497
+ }
498
+ }
499
+ : { connectOrCreate: {
500
+ where: {
501
+ id: props.trade.id !== undefined ? props.trade.id : undefined,
502
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
503
+ equals: props.trade.alpacaAccountId
504
+ } : undefined,
505
+ symbol: props.trade.symbol !== undefined ? {
506
+ equals: props.trade.symbol
507
+ } : undefined,
508
+ },
509
+ create: {
510
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
511
+ signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
512
+ strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
513
+ analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
514
+ summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
515
+ confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
516
+ timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
517
+ status: props.trade.status !== undefined ? props.trade.status : undefined,
518
+ symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
519
+ entryPrice: props.trade.entryPrice !== undefined ? props.trade.entryPrice : undefined,
520
+ exitPrice: props.trade.exitPrice !== undefined ? props.trade.exitPrice : undefined,
521
+ entryQty: props.trade.entryQty !== undefined ? props.trade.entryQty : undefined,
522
+ exitQty: props.trade.exitQty !== undefined ? props.trade.exitQty : undefined,
523
+ entryValue: props.trade.entryValue !== undefined ? props.trade.entryValue : undefined,
524
+ exitValue: props.trade.exitValue !== undefined ? props.trade.exitValue : undefined,
525
+ entryTime: props.trade.entryTime !== undefined ? props.trade.entryTime : undefined,
526
+ exitTime: props.trade.exitTime !== undefined ? props.trade.exitTime : undefined,
527
+ pnlAmount: props.trade.pnlAmount !== undefined ? props.trade.pnlAmount : undefined,
528
+ pnlPercent: props.trade.pnlPercent !== undefined ? props.trade.pnlPercent : undefined,
529
+ durationMinutes: props.trade.durationMinutes !== undefined ? props.trade.durationMinutes : undefined,
530
+ marketPhase: props.trade.marketPhase !== undefined ? props.trade.marketPhase : undefined,
531
+ marketVolatility: props.trade.marketVolatility !== undefined ? props.trade.marketVolatility : undefined,
532
+ thresholdsJson: props.trade.thresholdsJson !== undefined ? props.trade.thresholdsJson : undefined,
533
+ },
534
+ }
434
535
  } : undefined,
435
- timestamp: props.trade.timestamp !== undefined ? {
436
- set: props.trade.timestamp
437
- } : undefined,
438
- status: props.trade.status !== undefined ? {
439
- set: props.trade.status
440
- } : undefined,
441
- symbol: props.trade.symbol !== undefined ? {
442
- set: props.trade.symbol
443
- } : undefined,
444
- },
445
- create: {
446
- alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
447
- qty: props.trade.qty !== undefined ? props.trade.qty : undefined,
448
- price: props.trade.price !== undefined ? props.trade.price : undefined,
449
- total: props.trade.total !== undefined ? props.trade.total : undefined,
450
- signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
451
- strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
452
- analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
453
- summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
454
- confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
455
- timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
456
- status: props.trade.status !== undefined ? props.trade.status : undefined,
457
- symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
458
- },
459
- }
460
- } : undefined,
461
- },
462
- };
463
- const filteredVariables = removeUndefinedProps(variables);
464
- try {
465
- const response = await client.mutate({ mutation: UPSERT_ONE_ACTION, variables: filteredVariables });
466
- if (response.errors && response.errors.length > 0)
467
- throw new Error(response.errors[0].message);
468
- if (response && response.data && response.data.upsertOneAction) {
469
- return response.data.upsertOneAction;
536
+ },
537
+ update: {
538
+ sequence: props.sequence !== undefined ? {
539
+ set: props.sequence
540
+ } : undefined,
541
+ type: props.type !== undefined ? {
542
+ set: props.type
543
+ } : undefined,
544
+ primary: props.primary !== undefined ? {
545
+ set: props.primary
546
+ } : undefined,
547
+ note: props.note !== undefined ? {
548
+ set: props.note
549
+ } : undefined,
550
+ status: props.status !== undefined ? {
551
+ set: props.status
552
+ } : undefined,
553
+ alpacaOrderId: props.alpacaOrderId !== undefined ? {
554
+ set: props.alpacaOrderId
555
+ } : undefined,
556
+ trade: props.trade ?
557
+ typeof props.trade === 'object' && Object.keys(props.trade).length === 1 && (Object.keys(props.trade)[0] === 'id' || Object.keys(props.trade)[0] === 'symbol')
558
+ ? {
559
+ connect: {
560
+ id: props.trade.id
561
+ }
562
+ } : { upsert: {
563
+ where: {
564
+ id: props.trade.id !== undefined ? {
565
+ equals: props.trade.id
566
+ } : undefined,
567
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
568
+ equals: props.trade.alpacaAccountId
569
+ } : undefined,
570
+ symbol: props.trade.symbol !== undefined ? {
571
+ equals: props.trade.symbol
572
+ } : undefined,
573
+ },
574
+ update: {
575
+ id: props.trade.id !== undefined ? {
576
+ set: props.trade.id
577
+ } : undefined,
578
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? {
579
+ set: props.trade.alpacaAccountId
580
+ } : undefined,
581
+ signal: props.trade.signal !== undefined ? {
582
+ set: props.trade.signal
583
+ } : undefined,
584
+ strategy: props.trade.strategy !== undefined ? {
585
+ set: props.trade.strategy
586
+ } : undefined,
587
+ analysis: props.trade.analysis !== undefined ? {
588
+ set: props.trade.analysis
589
+ } : undefined,
590
+ summary: props.trade.summary !== undefined ? {
591
+ set: props.trade.summary
592
+ } : undefined,
593
+ confidence: props.trade.confidence !== undefined ? {
594
+ set: props.trade.confidence
595
+ } : undefined,
596
+ timestamp: props.trade.timestamp !== undefined ? {
597
+ set: props.trade.timestamp
598
+ } : undefined,
599
+ status: props.trade.status !== undefined ? {
600
+ set: props.trade.status
601
+ } : undefined,
602
+ symbol: props.trade.symbol !== undefined ? {
603
+ set: props.trade.symbol
604
+ } : undefined,
605
+ entryPrice: props.trade.entryPrice !== undefined ? {
606
+ set: props.trade.entryPrice
607
+ } : undefined,
608
+ exitPrice: props.trade.exitPrice !== undefined ? {
609
+ set: props.trade.exitPrice
610
+ } : undefined,
611
+ entryQty: props.trade.entryQty !== undefined ? {
612
+ set: props.trade.entryQty
613
+ } : undefined,
614
+ exitQty: props.trade.exitQty !== undefined ? {
615
+ set: props.trade.exitQty
616
+ } : undefined,
617
+ entryValue: props.trade.entryValue !== undefined ? {
618
+ set: props.trade.entryValue
619
+ } : undefined,
620
+ exitValue: props.trade.exitValue !== undefined ? {
621
+ set: props.trade.exitValue
622
+ } : undefined,
623
+ entryTime: props.trade.entryTime !== undefined ? {
624
+ set: props.trade.entryTime
625
+ } : undefined,
626
+ exitTime: props.trade.exitTime !== undefined ? {
627
+ set: props.trade.exitTime
628
+ } : undefined,
629
+ pnlAmount: props.trade.pnlAmount !== undefined ? {
630
+ set: props.trade.pnlAmount
631
+ } : undefined,
632
+ pnlPercent: props.trade.pnlPercent !== undefined ? {
633
+ set: props.trade.pnlPercent
634
+ } : undefined,
635
+ durationMinutes: props.trade.durationMinutes !== undefined ? {
636
+ set: props.trade.durationMinutes
637
+ } : undefined,
638
+ marketPhase: props.trade.marketPhase !== undefined ? {
639
+ set: props.trade.marketPhase
640
+ } : undefined,
641
+ marketVolatility: props.trade.marketVolatility !== undefined ? {
642
+ set: props.trade.marketVolatility
643
+ } : undefined,
644
+ thresholdsJson: props.trade.thresholdsJson !== undefined ? {
645
+ set: props.trade.thresholdsJson
646
+ } : undefined,
647
+ },
648
+ create: {
649
+ alpacaAccountId: props.trade.alpacaAccountId !== undefined ? props.trade.alpacaAccountId : undefined,
650
+ signal: props.trade.signal !== undefined ? props.trade.signal : undefined,
651
+ strategy: props.trade.strategy !== undefined ? props.trade.strategy : undefined,
652
+ analysis: props.trade.analysis !== undefined ? props.trade.analysis : undefined,
653
+ summary: props.trade.summary !== undefined ? props.trade.summary : undefined,
654
+ confidence: props.trade.confidence !== undefined ? props.trade.confidence : undefined,
655
+ timestamp: props.trade.timestamp !== undefined ? props.trade.timestamp : undefined,
656
+ status: props.trade.status !== undefined ? props.trade.status : undefined,
657
+ symbol: props.trade.symbol !== undefined ? props.trade.symbol : undefined,
658
+ entryPrice: props.trade.entryPrice !== undefined ? props.trade.entryPrice : undefined,
659
+ exitPrice: props.trade.exitPrice !== undefined ? props.trade.exitPrice : undefined,
660
+ entryQty: props.trade.entryQty !== undefined ? props.trade.entryQty : undefined,
661
+ exitQty: props.trade.exitQty !== undefined ? props.trade.exitQty : undefined,
662
+ entryValue: props.trade.entryValue !== undefined ? props.trade.entryValue : undefined,
663
+ exitValue: props.trade.exitValue !== undefined ? props.trade.exitValue : undefined,
664
+ entryTime: props.trade.entryTime !== undefined ? props.trade.entryTime : undefined,
665
+ exitTime: props.trade.exitTime !== undefined ? props.trade.exitTime : undefined,
666
+ pnlAmount: props.trade.pnlAmount !== undefined ? props.trade.pnlAmount : undefined,
667
+ pnlPercent: props.trade.pnlPercent !== undefined ? props.trade.pnlPercent : undefined,
668
+ durationMinutes: props.trade.durationMinutes !== undefined ? props.trade.durationMinutes : undefined,
669
+ marketPhase: props.trade.marketPhase !== undefined ? props.trade.marketPhase : undefined,
670
+ marketVolatility: props.trade.marketVolatility !== undefined ? props.trade.marketVolatility : undefined,
671
+ thresholdsJson: props.trade.thresholdsJson !== undefined ? props.trade.thresholdsJson : undefined,
672
+ },
673
+ }
674
+ } : undefined,
675
+ },
676
+ };
677
+ const filteredVariables = removeUndefinedProps(variables);
678
+ const response = await client.mutate({
679
+ mutation: UPSERT_ONE_ACTION,
680
+ variables: filteredVariables,
681
+ // Don't cache mutations, but ensure we're using the freshest context
682
+ fetchPolicy: 'no-cache'
683
+ });
684
+ if (response.errors && response.errors.length > 0)
685
+ throw new Error(response.errors[0].message);
686
+ if (response && response.data && response.data.upsertOneAction) {
687
+ return response.data.upsertOneAction;
688
+ }
689
+ else {
690
+ return null;
691
+ }
470
692
  }
471
- else {
472
- return null;
693
+ catch (error) {
694
+ lastError = error;
695
+ // Check if this is a database connection error that we should retry
696
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
697
+ error.message?.includes('Cannot reach database server') ||
698
+ error.message?.includes('Connection timed out') ||
699
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
700
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
701
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
702
+ retryCount++;
703
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
704
+ console.warn("Database connection error, retrying...");
705
+ await new Promise(resolve => setTimeout(resolve, delay));
706
+ continue;
707
+ }
708
+ // Log the error and rethrow
709
+ console.error("Database error occurred:", error);
710
+ throw error;
473
711
  }
474
712
  }
475
- catch (error) {
476
- console.error('Error in upsertOneAction:', error);
477
- throw error;
478
- }
713
+ // If we exhausted retries, throw the last error
714
+ throw lastError;
479
715
  },
480
716
  /**
481
717
  * Update multiple Action records.
718
+ * Enhanced with connection resilience against Prisma connection errors.
482
719
  * @param props - Array of Action objects for the updated records.
483
720
  * @param globalClient - Apollo Client instance.
484
721
  * @returns The count of created records or null.
485
722
  */
486
723
  async updateMany(props, globalClient) {
487
- const [modules, client] = await Promise.all([
488
- getApolloModules(),
489
- globalClient
490
- ? Promise.resolve(globalClient)
491
- : importedClient
492
- ]);
493
- const { gql, ApolloError } = modules;
494
- const UPDATE_MANY_ACTION = gql `
495
- mutation updateManyAction($data: [ActionCreateManyInput!]!) {
496
- updateManyAction(data: $data) {
497
- count
498
- }
499
- }`;
500
- const variables = props.map(prop => ({
501
- where: {
502
- id: prop.id !== undefined ? prop.id : undefined,
503
- alpacaOrderId: prop.alpacaOrderId !== undefined ? prop.alpacaOrderId : undefined,
504
- tradeId: prop.tradeId !== undefined ? {
505
- equals: prop.tradeId
506
- } : undefined,
507
- },
508
- data: {
509
- id: prop.id !== undefined ? {
510
- set: prop.id
511
- } : undefined,
512
- sequence: prop.sequence !== undefined ? {
513
- set: prop.sequence
514
- } : undefined,
515
- type: prop.type !== undefined ? {
516
- set: prop.type
517
- } : undefined,
518
- primary: prop.primary !== undefined ? {
519
- set: prop.primary
520
- } : undefined,
521
- note: prop.note !== undefined ? {
522
- set: prop.note
523
- } : undefined,
524
- status: prop.status !== undefined ? {
525
- set: prop.status
526
- } : undefined,
527
- createdAt: prop.createdAt !== undefined ? {
528
- set: prop.createdAt
529
- } : undefined,
530
- updatedAt: prop.updatedAt !== undefined ? {
531
- set: prop.updatedAt
532
- } : undefined,
533
- alpacaOrderId: prop.alpacaOrderId !== undefined ? {
534
- set: prop.alpacaOrderId
535
- } : undefined,
536
- trade: prop.trade ?
537
- typeof prop.trade === 'object' && Object.keys(prop.trade).length === 1 && (Object.keys(prop.trade)[0] === 'id' || Object.keys(prop.trade)[0] === 'symbol')
538
- ? {
539
- connect: {
540
- id: prop.trade.id
541
- }
542
- } : { upsert: {
543
- where: {
544
- id: prop.trade.id !== undefined ? {
545
- equals: prop.trade.id
546
- } : undefined,
547
- alpacaAccountId: prop.trade.alpacaAccountId !== undefined ? {
548
- equals: prop.trade.alpacaAccountId
549
- } : undefined,
550
- symbol: prop.trade.symbol !== undefined ? {
551
- equals: prop.trade.symbol
552
- } : undefined,
553
- },
554
- update: {
555
- id: prop.trade.id !== undefined ? {
556
- set: prop.trade.id
557
- } : undefined,
558
- alpacaAccountId: prop.trade.alpacaAccountId !== undefined ? {
559
- set: prop.trade.alpacaAccountId
560
- } : undefined,
561
- qty: prop.trade.qty !== undefined ? {
562
- set: prop.trade.qty
563
- } : undefined,
564
- price: prop.trade.price !== undefined ? {
565
- set: prop.trade.price
566
- } : undefined,
567
- total: prop.trade.total !== undefined ? {
568
- set: prop.trade.total
569
- } : undefined,
570
- signal: prop.trade.signal !== undefined ? {
571
- set: prop.trade.signal
572
- } : undefined,
573
- strategy: prop.trade.strategy !== undefined ? {
574
- set: prop.trade.strategy
575
- } : undefined,
576
- analysis: prop.trade.analysis !== undefined ? {
577
- set: prop.trade.analysis
578
- } : undefined,
579
- summary: prop.trade.summary !== undefined ? {
580
- set: prop.trade.summary
581
- } : undefined,
582
- confidence: prop.trade.confidence !== undefined ? {
583
- set: prop.trade.confidence
584
- } : undefined,
585
- timestamp: prop.trade.timestamp !== undefined ? {
586
- set: prop.trade.timestamp
587
- } : undefined,
588
- status: prop.trade.status !== undefined ? {
589
- set: prop.trade.status
590
- } : undefined,
591
- symbol: prop.trade.symbol !== undefined ? {
592
- set: prop.trade.symbol
593
- } : undefined,
594
- },
595
- create: {
596
- alpacaAccountId: prop.trade.alpacaAccountId !== undefined ? prop.trade.alpacaAccountId : undefined,
597
- qty: prop.trade.qty !== undefined ? prop.trade.qty : undefined,
598
- price: prop.trade.price !== undefined ? prop.trade.price : undefined,
599
- total: prop.trade.total !== undefined ? prop.trade.total : undefined,
600
- signal: prop.trade.signal !== undefined ? prop.trade.signal : undefined,
601
- strategy: prop.trade.strategy !== undefined ? prop.trade.strategy : undefined,
602
- analysis: prop.trade.analysis !== undefined ? prop.trade.analysis : undefined,
603
- summary: prop.trade.summary !== undefined ? prop.trade.summary : undefined,
604
- confidence: prop.trade.confidence !== undefined ? prop.trade.confidence : undefined,
605
- timestamp: prop.trade.timestamp !== undefined ? prop.trade.timestamp : undefined,
606
- status: prop.trade.status !== undefined ? prop.trade.status : undefined,
607
- symbol: prop.trade.symbol !== undefined ? prop.trade.symbol : undefined,
608
- },
609
- }
610
- } : undefined,
611
- },
612
- }));
613
- const filteredVariables = removeUndefinedProps(variables);
614
- try {
615
- const response = await client.mutate({ mutation: UPDATE_MANY_ACTION, variables: filteredVariables });
616
- if (response.errors && response.errors.length > 0)
617
- throw new Error(response.errors[0].message);
618
- if (response && response.data && response.data.updateManyAction) {
619
- return response.data.updateManyAction;
724
+ // Maximum number of retries for database connection issues
725
+ const MAX_RETRIES = 3;
726
+ let retryCount = 0;
727
+ let lastError = null;
728
+ // Retry loop to handle potential database connection issues
729
+ while (retryCount < MAX_RETRIES) {
730
+ try {
731
+ const [modules, client] = await Promise.all([
732
+ getApolloModules(),
733
+ globalClient
734
+ ? Promise.resolve(globalClient)
735
+ : importedClient
736
+ ]);
737
+ const { gql, ApolloError } = modules;
738
+ const UPDATE_MANY_ACTION = gql `
739
+ mutation updateManyAction($data: [ActionCreateManyInput!]!) {
740
+ updateManyAction(data: $data) {
741
+ count
742
+ }
743
+ }`;
744
+ const variables = props.map(prop => ({
745
+ where: {
746
+ id: prop.id !== undefined ? prop.id : undefined,
747
+ alpacaOrderId: prop.alpacaOrderId !== undefined ? prop.alpacaOrderId : undefined,
748
+ tradeId: prop.tradeId !== undefined ? {
749
+ equals: prop.tradeId
750
+ } : undefined,
751
+ },
752
+ data: {
753
+ id: prop.id !== undefined ? {
754
+ set: prop.id
755
+ } : undefined,
756
+ sequence: prop.sequence !== undefined ? {
757
+ set: prop.sequence
758
+ } : undefined,
759
+ type: prop.type !== undefined ? {
760
+ set: prop.type
761
+ } : undefined,
762
+ primary: prop.primary !== undefined ? {
763
+ set: prop.primary
764
+ } : undefined,
765
+ note: prop.note !== undefined ? {
766
+ set: prop.note
767
+ } : undefined,
768
+ status: prop.status !== undefined ? {
769
+ set: prop.status
770
+ } : undefined,
771
+ createdAt: prop.createdAt !== undefined ? {
772
+ set: prop.createdAt
773
+ } : undefined,
774
+ updatedAt: prop.updatedAt !== undefined ? {
775
+ set: prop.updatedAt
776
+ } : undefined,
777
+ alpacaOrderId: prop.alpacaOrderId !== undefined ? {
778
+ set: prop.alpacaOrderId
779
+ } : undefined,
780
+ trade: prop.trade ?
781
+ typeof prop.trade === 'object' && Object.keys(prop.trade).length === 1 && (Object.keys(prop.trade)[0] === 'id' || Object.keys(prop.trade)[0] === 'symbol')
782
+ ? {
783
+ connect: {
784
+ id: prop.trade.id
785
+ }
786
+ } : { upsert: {
787
+ where: {
788
+ id: prop.trade.id !== undefined ? {
789
+ equals: prop.trade.id
790
+ } : undefined,
791
+ alpacaAccountId: prop.trade.alpacaAccountId !== undefined ? {
792
+ equals: prop.trade.alpacaAccountId
793
+ } : undefined,
794
+ symbol: prop.trade.symbol !== undefined ? {
795
+ equals: prop.trade.symbol
796
+ } : undefined,
797
+ },
798
+ update: {
799
+ id: prop.trade.id !== undefined ? {
800
+ set: prop.trade.id
801
+ } : undefined,
802
+ alpacaAccountId: prop.trade.alpacaAccountId !== undefined ? {
803
+ set: prop.trade.alpacaAccountId
804
+ } : undefined,
805
+ signal: prop.trade.signal !== undefined ? {
806
+ set: prop.trade.signal
807
+ } : undefined,
808
+ strategy: prop.trade.strategy !== undefined ? {
809
+ set: prop.trade.strategy
810
+ } : undefined,
811
+ analysis: prop.trade.analysis !== undefined ? {
812
+ set: prop.trade.analysis
813
+ } : undefined,
814
+ summary: prop.trade.summary !== undefined ? {
815
+ set: prop.trade.summary
816
+ } : undefined,
817
+ confidence: prop.trade.confidence !== undefined ? {
818
+ set: prop.trade.confidence
819
+ } : undefined,
820
+ timestamp: prop.trade.timestamp !== undefined ? {
821
+ set: prop.trade.timestamp
822
+ } : undefined,
823
+ status: prop.trade.status !== undefined ? {
824
+ set: prop.trade.status
825
+ } : undefined,
826
+ symbol: prop.trade.symbol !== undefined ? {
827
+ set: prop.trade.symbol
828
+ } : undefined,
829
+ entryPrice: prop.trade.entryPrice !== undefined ? {
830
+ set: prop.trade.entryPrice
831
+ } : undefined,
832
+ exitPrice: prop.trade.exitPrice !== undefined ? {
833
+ set: prop.trade.exitPrice
834
+ } : undefined,
835
+ entryQty: prop.trade.entryQty !== undefined ? {
836
+ set: prop.trade.entryQty
837
+ } : undefined,
838
+ exitQty: prop.trade.exitQty !== undefined ? {
839
+ set: prop.trade.exitQty
840
+ } : undefined,
841
+ entryValue: prop.trade.entryValue !== undefined ? {
842
+ set: prop.trade.entryValue
843
+ } : undefined,
844
+ exitValue: prop.trade.exitValue !== undefined ? {
845
+ set: prop.trade.exitValue
846
+ } : undefined,
847
+ entryTime: prop.trade.entryTime !== undefined ? {
848
+ set: prop.trade.entryTime
849
+ } : undefined,
850
+ exitTime: prop.trade.exitTime !== undefined ? {
851
+ set: prop.trade.exitTime
852
+ } : undefined,
853
+ pnlAmount: prop.trade.pnlAmount !== undefined ? {
854
+ set: prop.trade.pnlAmount
855
+ } : undefined,
856
+ pnlPercent: prop.trade.pnlPercent !== undefined ? {
857
+ set: prop.trade.pnlPercent
858
+ } : undefined,
859
+ durationMinutes: prop.trade.durationMinutes !== undefined ? {
860
+ set: prop.trade.durationMinutes
861
+ } : undefined,
862
+ marketPhase: prop.trade.marketPhase !== undefined ? {
863
+ set: prop.trade.marketPhase
864
+ } : undefined,
865
+ marketVolatility: prop.trade.marketVolatility !== undefined ? {
866
+ set: prop.trade.marketVolatility
867
+ } : undefined,
868
+ thresholdsJson: prop.trade.thresholdsJson !== undefined ? {
869
+ set: prop.trade.thresholdsJson
870
+ } : undefined,
871
+ },
872
+ create: {
873
+ alpacaAccountId: prop.trade.alpacaAccountId !== undefined ? prop.trade.alpacaAccountId : undefined,
874
+ signal: prop.trade.signal !== undefined ? prop.trade.signal : undefined,
875
+ strategy: prop.trade.strategy !== undefined ? prop.trade.strategy : undefined,
876
+ analysis: prop.trade.analysis !== undefined ? prop.trade.analysis : undefined,
877
+ summary: prop.trade.summary !== undefined ? prop.trade.summary : undefined,
878
+ confidence: prop.trade.confidence !== undefined ? prop.trade.confidence : undefined,
879
+ timestamp: prop.trade.timestamp !== undefined ? prop.trade.timestamp : undefined,
880
+ status: prop.trade.status !== undefined ? prop.trade.status : undefined,
881
+ symbol: prop.trade.symbol !== undefined ? prop.trade.symbol : undefined,
882
+ entryPrice: prop.trade.entryPrice !== undefined ? prop.trade.entryPrice : undefined,
883
+ exitPrice: prop.trade.exitPrice !== undefined ? prop.trade.exitPrice : undefined,
884
+ entryQty: prop.trade.entryQty !== undefined ? prop.trade.entryQty : undefined,
885
+ exitQty: prop.trade.exitQty !== undefined ? prop.trade.exitQty : undefined,
886
+ entryValue: prop.trade.entryValue !== undefined ? prop.trade.entryValue : undefined,
887
+ exitValue: prop.trade.exitValue !== undefined ? prop.trade.exitValue : undefined,
888
+ entryTime: prop.trade.entryTime !== undefined ? prop.trade.entryTime : undefined,
889
+ exitTime: prop.trade.exitTime !== undefined ? prop.trade.exitTime : undefined,
890
+ pnlAmount: prop.trade.pnlAmount !== undefined ? prop.trade.pnlAmount : undefined,
891
+ pnlPercent: prop.trade.pnlPercent !== undefined ? prop.trade.pnlPercent : undefined,
892
+ durationMinutes: prop.trade.durationMinutes !== undefined ? prop.trade.durationMinutes : undefined,
893
+ marketPhase: prop.trade.marketPhase !== undefined ? prop.trade.marketPhase : undefined,
894
+ marketVolatility: prop.trade.marketVolatility !== undefined ? prop.trade.marketVolatility : undefined,
895
+ thresholdsJson: prop.trade.thresholdsJson !== undefined ? prop.trade.thresholdsJson : undefined,
896
+ },
897
+ }
898
+ } : undefined,
899
+ },
900
+ }));
901
+ const filteredVariables = removeUndefinedProps(variables);
902
+ const response = await client.mutate({
903
+ mutation: UPDATE_MANY_ACTION,
904
+ variables: filteredVariables,
905
+ // Don't cache mutations, but ensure we're using the freshest context
906
+ fetchPolicy: 'no-cache'
907
+ });
908
+ if (response.errors && response.errors.length > 0)
909
+ throw new Error(response.errors[0].message);
910
+ if (response && response.data && response.data.updateManyAction) {
911
+ return response.data.updateManyAction;
912
+ }
913
+ else {
914
+ return null;
915
+ }
620
916
  }
621
- else {
622
- return null;
917
+ catch (error) {
918
+ lastError = error;
919
+ // Check if this is a database connection error that we should retry
920
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
921
+ error.message?.includes('Cannot reach database server') ||
922
+ error.message?.includes('Connection timed out') ||
923
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
924
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
925
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
926
+ retryCount++;
927
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
928
+ console.warn("Database connection error, retrying...");
929
+ await new Promise(resolve => setTimeout(resolve, delay));
930
+ continue;
931
+ }
932
+ // Log the error and rethrow
933
+ console.error("Database error occurred:", error);
934
+ throw error;
623
935
  }
624
936
  }
625
- catch (error) {
626
- console.error('Error in updateManyAction:', error);
627
- throw error;
628
- }
937
+ // If we exhausted retries, throw the last error
938
+ throw lastError;
629
939
  },
630
940
  /**
631
941
  * Delete a single Action record.
632
- * @param props - Properties to update.
942
+ * Enhanced with connection resilience against Prisma connection errors.
943
+ * @param props - Properties to identify the record to delete.
633
944
  * @param globalClient - Apollo Client instance.
634
945
  * @returns The deleted Action or null.
635
946
  */
636
947
  async delete(props, globalClient) {
637
- const [modules, client] = await Promise.all([
638
- getApolloModules(),
639
- globalClient
640
- ? Promise.resolve(globalClient)
641
- : importedClient
642
- ]);
643
- const { gql, ApolloError } = modules;
644
- const DELETE_ONE_ACTION = gql `
645
- mutation deleteOneAction($where: ActionWhereUniqueInput!) {
646
- deleteOneAction(where: $where) {
647
- id
648
- }
649
- }`;
650
- const variables = {
651
- where: {
652
- id: props.id ? props.id : undefined,
948
+ // Maximum number of retries for database connection issues
949
+ const MAX_RETRIES = 3;
950
+ let retryCount = 0;
951
+ let lastError = null;
952
+ // Retry loop to handle potential database connection issues
953
+ while (retryCount < MAX_RETRIES) {
954
+ try {
955
+ const [modules, client] = await Promise.all([
956
+ getApolloModules(),
957
+ globalClient
958
+ ? Promise.resolve(globalClient)
959
+ : importedClient
960
+ ]);
961
+ const { gql, ApolloError } = modules;
962
+ const DELETE_ONE_ACTION = gql `
963
+ mutation deleteOneAction($where: ActionWhereUniqueInput!) {
964
+ deleteOneAction(where: $where) {
965
+ id
653
966
  }
654
- };
655
- const filteredVariables = removeUndefinedProps(variables);
656
- try {
657
- const response = await client.mutate({ mutation: DELETE_ONE_ACTION, variables: filteredVariables });
658
- if (response.errors && response.errors.length > 0)
659
- throw new Error(response.errors[0].message);
660
- if (response && response.data && response.data.deleteOneAction) {
661
- return response.data.deleteOneAction;
967
+ }`;
968
+ const variables = {
969
+ where: {
970
+ id: props.id ? props.id : undefined,
971
+ }
972
+ };
973
+ const filteredVariables = removeUndefinedProps(variables);
974
+ const response = await client.mutate({
975
+ mutation: DELETE_ONE_ACTION,
976
+ variables: filteredVariables,
977
+ // Don't cache mutations, but ensure we're using the freshest context
978
+ fetchPolicy: 'no-cache'
979
+ });
980
+ if (response.errors && response.errors.length > 0)
981
+ throw new Error(response.errors[0].message);
982
+ if (response && response.data && response.data.deleteOneAction) {
983
+ return response.data.deleteOneAction;
984
+ }
985
+ else {
986
+ return null;
987
+ }
662
988
  }
663
- else {
664
- return null;
989
+ catch (error) {
990
+ lastError = error;
991
+ // Check if this is a database connection error that we should retry
992
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
993
+ error.message?.includes('Cannot reach database server') ||
994
+ error.message?.includes('Connection timed out') ||
995
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
996
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
997
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
998
+ retryCount++;
999
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1000
+ console.warn("Database connection error, retrying...");
1001
+ await new Promise(resolve => setTimeout(resolve, delay));
1002
+ continue;
1003
+ }
1004
+ // Log the error and rethrow
1005
+ console.error("Database error occurred:", error);
1006
+ throw error;
665
1007
  }
666
1008
  }
667
- catch (error) {
668
- console.error('Error in deleteOneAction:', error);
669
- throw error;
670
- }
1009
+ // If we exhausted retries, throw the last error
1010
+ throw lastError;
671
1011
  },
672
1012
  /**
673
1013
  * Retrieve a single Action record by ID.
674
- * @param props - Properties to update.
1014
+ * Enhanced with connection resilience against Prisma connection errors.
1015
+ * @param props - Properties to identify the record.
675
1016
  * @param globalClient - Apollo Client instance.
1017
+ * @param whereInput - Optional custom where input.
676
1018
  * @returns The retrieved Action or null.
677
1019
  */
678
1020
  async get(props, globalClient, whereInput) {
679
- const [modules, client] = await Promise.all([
680
- getApolloModules(),
681
- globalClient
682
- ? Promise.resolve(globalClient)
683
- : importedClient
684
- ]);
685
- const { gql, ApolloError } = modules;
686
- const GET_ACTION = gql `
687
- query getAction($where: ActionWhereUniqueInput!) {
688
- getAction(where: $where) {
689
- ${selectionSet}
690
- }
691
- }`;
692
- const variables = {
693
- where: whereInput ? whereInput : {
694
- id: props.id !== undefined ? props.id : undefined,
695
- alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
696
- tradeId: props.tradeId !== undefined ? {
697
- equals: props.tradeId
698
- } : undefined,
699
- },
700
- };
701
- const filteredVariables = removeUndefinedProps(variables);
702
- try {
703
- const response = await client.query({ query: GET_ACTION, variables: filteredVariables });
704
- if (response.errors && response.errors.length > 0)
705
- throw new Error(response.errors[0].message);
706
- return response.data?.getAction ?? null;
707
- }
708
- catch (error) {
709
- if (error instanceof ApolloError && error.message === 'No Action found') {
710
- return null;
1021
+ // Maximum number of retries for database connection issues
1022
+ const MAX_RETRIES = 3;
1023
+ let retryCount = 0;
1024
+ let lastError = null;
1025
+ // Retry loop to handle potential database connection issues
1026
+ while (retryCount < MAX_RETRIES) {
1027
+ try {
1028
+ const [modules, client] = await Promise.all([
1029
+ getApolloModules(),
1030
+ globalClient
1031
+ ? Promise.resolve(globalClient)
1032
+ : importedClient
1033
+ ]);
1034
+ const { gql, ApolloError } = modules;
1035
+ const GET_ACTION = gql `
1036
+ query getAction($where: ActionWhereUniqueInput!) {
1037
+ getAction(where: $where) {
1038
+ ${selectionSet}
711
1039
  }
712
- else {
713
- console.error('Error in getAction:', error);
1040
+ }`;
1041
+ const variables = {
1042
+ where: whereInput ? whereInput : {
1043
+ id: props.id !== undefined ? props.id : undefined,
1044
+ alpacaOrderId: props.alpacaOrderId !== undefined ? props.alpacaOrderId : undefined,
1045
+ tradeId: props.tradeId !== undefined ? {
1046
+ equals: props.tradeId
1047
+ } : undefined,
1048
+ },
1049
+ };
1050
+ const filteredVariables = removeUndefinedProps(variables);
1051
+ const response = await client.query({
1052
+ query: GET_ACTION,
1053
+ variables: filteredVariables,
1054
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
1055
+ });
1056
+ if (response.errors && response.errors.length > 0)
1057
+ throw new Error(response.errors[0].message);
1058
+ return response.data?.getAction ?? null;
1059
+ }
1060
+ catch (error) {
1061
+ lastError = error;
1062
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
1063
+ if (error.message === 'No Action found') {
1064
+ return null;
1065
+ }
1066
+ // Check if this is a database connection error that we should retry
1067
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
1068
+ error.message?.includes('Cannot reach database server') ||
1069
+ error.message?.includes('Connection timed out') ||
1070
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
1071
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
1072
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1073
+ retryCount++;
1074
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1075
+ console.warn("Database connection error, retrying...");
1076
+ await new Promise(resolve => setTimeout(resolve, delay));
1077
+ continue;
1078
+ }
1079
+ // Log the error and rethrow
1080
+ console.error("Database error occurred:", error);
714
1081
  throw error;
715
1082
  }
716
1083
  }
1084
+ // If we exhausted retries, throw the last error
1085
+ throw lastError;
717
1086
  },
718
1087
  /**
719
1088
  * Retrieve all Actions records.
1089
+ * Enhanced with connection resilience against Prisma connection errors.
720
1090
  * @param globalClient - Apollo Client instance.
721
1091
  * @returns An array of Action records or null.
722
1092
  */
723
1093
  async getAll(globalClient) {
724
- const [modules, client] = await Promise.all([
725
- getApolloModules(),
726
- globalClient
727
- ? Promise.resolve(globalClient)
728
- : importedClient
729
- ]);
730
- const { gql, ApolloError } = modules;
731
- const GET_ALL_ACTION = gql `
732
- query getAllAction {
733
- actions {
734
- ${selectionSet}
735
- }
736
- }`;
737
- try {
738
- const response = await client.query({ query: GET_ALL_ACTION });
739
- if (response.errors && response.errors.length > 0)
740
- throw new Error(response.errors[0].message);
741
- return response.data?.actions ?? null;
742
- }
743
- catch (error) {
744
- if (error instanceof ApolloError && error.message === 'No Action found') {
745
- return null;
1094
+ // Maximum number of retries for database connection issues
1095
+ const MAX_RETRIES = 3;
1096
+ let retryCount = 0;
1097
+ let lastError = null;
1098
+ // Retry loop to handle potential database connection issues
1099
+ while (retryCount < MAX_RETRIES) {
1100
+ try {
1101
+ const [modules, client] = await Promise.all([
1102
+ getApolloModules(),
1103
+ globalClient
1104
+ ? Promise.resolve(globalClient)
1105
+ : importedClient
1106
+ ]);
1107
+ const { gql, ApolloError } = modules;
1108
+ const GET_ALL_ACTION = gql `
1109
+ query getAllAction {
1110
+ actions {
1111
+ ${selectionSet}
1112
+ }
1113
+ }`;
1114
+ const response = await client.query({
1115
+ query: GET_ALL_ACTION,
1116
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
1117
+ });
1118
+ if (response.errors && response.errors.length > 0)
1119
+ throw new Error(response.errors[0].message);
1120
+ return response.data?.actions ?? null;
746
1121
  }
747
- else {
748
- console.error('Error in getAction:', error);
1122
+ catch (error) {
1123
+ lastError = error;
1124
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
1125
+ if (error.message === 'No Action found') {
1126
+ return null;
1127
+ }
1128
+ // Check if this is a database connection error that we should retry
1129
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
1130
+ error.message?.includes('Cannot reach database server') ||
1131
+ error.message?.includes('Connection timed out') ||
1132
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
1133
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
1134
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1135
+ retryCount++;
1136
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1137
+ console.warn("Database connection error, retrying...");
1138
+ await new Promise(resolve => setTimeout(resolve, delay));
1139
+ continue;
1140
+ }
1141
+ // Log the error and rethrow
1142
+ console.error("Database error occurred:", error);
749
1143
  throw error;
750
1144
  }
751
1145
  }
1146
+ // If we exhausted retries, throw the last error
1147
+ throw lastError;
752
1148
  },
753
1149
  /**
754
1150
  * Find multiple Action records based on conditions.
1151
+ * Enhanced with connection resilience against Prisma connection errors.
755
1152
  * @param props - Conditions to find records.
756
1153
  * @param globalClient - Apollo Client instance.
1154
+ * @param whereInput - Optional custom where input.
757
1155
  * @returns An array of found Action records or null.
758
1156
  */
759
1157
  async findMany(props, globalClient, whereInput) {
760
- const [modules, client] = await Promise.all([
761
- getApolloModules(),
762
- globalClient
763
- ? Promise.resolve(globalClient)
764
- : importedClient
765
- ]);
766
- const { gql, ApolloError } = modules;
767
- const FIND_MANY_ACTION = gql `
768
- query findManyAction($where: ActionWhereInput!) {
769
- actions(where: $where) {
770
- ${selectionSet}
771
- }
772
- }`;
773
- const variables = {
774
- where: whereInput ? whereInput : {
775
- id: props.id !== undefined ? {
776
- equals: props.id
777
- } : undefined,
778
- tradeId: props.tradeId !== undefined ? {
779
- equals: props.tradeId
780
- } : undefined,
781
- },
782
- };
783
- const filteredVariables = removeUndefinedProps(variables);
784
- try {
785
- const response = await client.query({ query: FIND_MANY_ACTION, variables: filteredVariables });
786
- if (response.errors && response.errors.length > 0)
787
- throw new Error(response.errors[0].message);
788
- if (response && response.data && response.data.actions) {
789
- return response.data.actions;
790
- }
791
- else {
792
- return [];
1158
+ // Maximum number of retries for database connection issues
1159
+ const MAX_RETRIES = 3;
1160
+ let retryCount = 0;
1161
+ let lastError = null;
1162
+ // Retry loop to handle potential database connection issues
1163
+ while (retryCount < MAX_RETRIES) {
1164
+ try {
1165
+ const [modules, client] = await Promise.all([
1166
+ getApolloModules(),
1167
+ globalClient
1168
+ ? Promise.resolve(globalClient)
1169
+ : importedClient
1170
+ ]);
1171
+ const { gql, ApolloError } = modules;
1172
+ const FIND_MANY_ACTION = gql `
1173
+ query findManyAction($where: ActionWhereInput!) {
1174
+ actions(where: $where) {
1175
+ ${selectionSet}
793
1176
  }
794
- }
795
- catch (error) {
796
- if (error instanceof ApolloError && error.message === 'No Action found') {
797
- return null;
1177
+ }`;
1178
+ const variables = {
1179
+ where: whereInput ? whereInput : {
1180
+ id: props.id !== undefined ? {
1181
+ equals: props.id
1182
+ } : undefined,
1183
+ tradeId: props.tradeId !== undefined ? {
1184
+ equals: props.tradeId
1185
+ } : undefined,
1186
+ },
1187
+ };
1188
+ const filteredVariables = removeUndefinedProps(variables);
1189
+ const response = await client.query({
1190
+ query: FIND_MANY_ACTION,
1191
+ variables: filteredVariables,
1192
+ fetchPolicy: 'network-only', // Force network request to avoid stale cache
1193
+ });
1194
+ if (response.errors && response.errors.length > 0)
1195
+ throw new Error(response.errors[0].message);
1196
+ if (response && response.data && response.data.actions) {
1197
+ return response.data.actions;
1198
+ }
1199
+ else {
1200
+ return [];
1201
+ }
798
1202
  }
799
- else {
800
- console.error('Error in getAction:', error);
1203
+ catch (error) {
1204
+ lastError = error;
1205
+ // Check if this is a "No record found" error - this is an expected condition, not a failure
1206
+ if (error.message === 'No Action found') {
1207
+ return null;
1208
+ }
1209
+ // Check if this is a database connection error that we should retry
1210
+ const isConnectionError = error.message?.includes('Server has closed the connection') ||
1211
+ error.message?.includes('Cannot reach database server') ||
1212
+ error.message?.includes('Connection timed out') ||
1213
+ error.message?.includes('Accelerate') || // Prisma Accelerate proxy errors
1214
+ (error.networkError && error.networkError.message?.includes('Failed to fetch'));
1215
+ if (isConnectionError && retryCount < MAX_RETRIES - 1) {
1216
+ retryCount++;
1217
+ const delay = Math.pow(2, retryCount) * 100; // Exponential backoff: 200ms, 400ms, 800ms
1218
+ console.warn("Database connection error, retrying...");
1219
+ await new Promise(resolve => setTimeout(resolve, delay));
1220
+ continue;
1221
+ }
1222
+ // Log the error and rethrow
1223
+ console.error("Database error occurred:", error);
801
1224
  throw error;
802
1225
  }
803
1226
  }
1227
+ // If we exhausted retries, throw the last error
1228
+ throw lastError;
804
1229
  }
805
1230
  };
806
1231
  //# sourceMappingURL=Action.js.map