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