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.
- package/Account.cjs +2543 -2265
- package/Account.d.ts +19 -2
- package/Action.cjs +1115 -683
- package/Action.d.ts +19 -2
- package/Alert.cjs +2626 -2348
- package/Alert.d.ts +19 -2
- package/Allocation.cjs +2578 -2300
- package/Allocation.d.ts +19 -2
- package/AlpacaAccount.cjs +2383 -2105
- package/AlpacaAccount.d.ts +19 -2
- package/Asset.cjs +1813 -1535
- package/Asset.d.ts +19 -2
- package/Authenticator.cjs +2568 -2290
- package/Authenticator.d.ts +19 -2
- package/Customer.cjs +2495 -2217
- package/Customer.d.ts +19 -2
- package/EconomicEvent.cjs +645 -367
- package/EconomicEvent.d.ts +19 -2
- package/MarketSentiment.cjs +618 -340
- package/MarketSentiment.d.ts +19 -2
- package/NewsArticle.cjs +1933 -1655
- package/NewsArticle.d.ts +19 -2
- package/NewsArticleAssetSentiment.cjs +1842 -1564
- package/NewsArticleAssetSentiment.d.ts +19 -2
- package/ScheduledOptionOrder.cjs +594 -316
- package/ScheduledOptionOrder.d.ts +19 -2
- package/Session.cjs +2570 -2292
- package/Session.d.ts +19 -2
- package/Trade.cjs +1087 -666
- package/Trade.d.ts +19 -2
- package/User.cjs +2288 -2010
- package/User.d.ts +19 -2
- package/VerificationToken.cjs +606 -328
- package/VerificationToken.d.ts +19 -2
- package/esm/Account.d.ts +19 -2
- package/esm/Account.d.ts.map +1 -1
- package/esm/Account.js.map +1 -1
- package/esm/Account.mjs +2534 -2263
- package/esm/Action.d.ts +19 -2
- package/esm/Action.d.ts.map +1 -1
- package/esm/Action.js.map +1 -1
- package/esm/Action.mjs +1106 -681
- package/esm/Alert.d.ts +19 -2
- package/esm/Alert.d.ts.map +1 -1
- package/esm/Alert.js.map +1 -1
- package/esm/Alert.mjs +2617 -2346
- package/esm/Allocation.d.ts +19 -2
- package/esm/Allocation.d.ts.map +1 -1
- package/esm/Allocation.js.map +1 -1
- package/esm/Allocation.mjs +2569 -2298
- package/esm/AlpacaAccount.d.ts +19 -2
- package/esm/AlpacaAccount.d.ts.map +1 -1
- package/esm/AlpacaAccount.js.map +1 -1
- package/esm/AlpacaAccount.mjs +2374 -2103
- package/esm/Asset.d.ts +19 -2
- package/esm/Asset.d.ts.map +1 -1
- package/esm/Asset.js.map +1 -1
- package/esm/Asset.mjs +1804 -1533
- package/esm/Authenticator.d.ts +19 -2
- package/esm/Authenticator.d.ts.map +1 -1
- package/esm/Authenticator.js.map +1 -1
- package/esm/Authenticator.mjs +2559 -2288
- package/esm/Customer.d.ts +19 -2
- package/esm/Customer.d.ts.map +1 -1
- package/esm/Customer.js.map +1 -1
- package/esm/Customer.mjs +2486 -2215
- package/esm/EconomicEvent.d.ts +19 -2
- package/esm/EconomicEvent.d.ts.map +1 -1
- package/esm/EconomicEvent.js.map +1 -1
- package/esm/EconomicEvent.mjs +636 -365
- package/esm/MarketSentiment.d.ts +19 -2
- package/esm/MarketSentiment.d.ts.map +1 -1
- package/esm/MarketSentiment.js.map +1 -1
- package/esm/MarketSentiment.mjs +609 -338
- package/esm/NewsArticle.d.ts +19 -2
- package/esm/NewsArticle.d.ts.map +1 -1
- package/esm/NewsArticle.js.map +1 -1
- package/esm/NewsArticle.mjs +1924 -1653
- package/esm/NewsArticleAssetSentiment.d.ts +19 -2
- package/esm/NewsArticleAssetSentiment.d.ts.map +1 -1
- package/esm/NewsArticleAssetSentiment.js.map +1 -1
- package/esm/NewsArticleAssetSentiment.mjs +1833 -1562
- package/esm/ScheduledOptionOrder.d.ts +19 -2
- package/esm/ScheduledOptionOrder.d.ts.map +1 -1
- package/esm/ScheduledOptionOrder.js.map +1 -1
- package/esm/ScheduledOptionOrder.mjs +585 -314
- package/esm/Session.d.ts +19 -2
- package/esm/Session.d.ts.map +1 -1
- package/esm/Session.js.map +1 -1
- package/esm/Session.mjs +2561 -2290
- package/esm/Trade.d.ts +19 -2
- package/esm/Trade.d.ts.map +1 -1
- package/esm/Trade.js.map +1 -1
- package/esm/Trade.mjs +1078 -664
- package/esm/User.d.ts +19 -2
- package/esm/User.d.ts.map +1 -1
- package/esm/User.js.map +1 -1
- package/esm/User.mjs +2279 -2008
- package/esm/VerificationToken.d.ts +19 -2
- package/esm/VerificationToken.d.ts.map +1 -1
- package/esm/VerificationToken.js.map +1 -1
- package/esm/VerificationToken.mjs +597 -326
- package/esm/generated/selectionSets/Trade.d.ts +1 -1
- package/esm/generated/selectionSets/Trade.d.ts.map +1 -1
- package/esm/generated/selectionSets/Trade.js.map +1 -1
- package/esm/generated/selectionSets/Trade.mjs +14 -3
- package/esm/generated/typeStrings/Trade.d.ts +1 -1
- package/esm/generated/typeStrings/Trade.d.ts.map +1 -1
- package/esm/generated/typeStrings/Trade.js.map +1 -1
- package/esm/generated/typeStrings/Trade.mjs +0 -6
- package/esm/generated/typeStrings/index.d.ts +1 -1
- package/esm/generated/typegraphql-prisma/enhance.js.map +1 -1
- package/esm/generated/typegraphql-prisma/enhance.mjs +24 -24
- package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts +15 -4
- package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.js.map +1 -1
- package/esm/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.mjs +14 -3
- package/esm/generated/typegraphql-prisma/models/Trade.d.ts +56 -12
- package/esm/generated/typegraphql-prisma/models/Trade.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/models/Trade.js.map +1 -1
- package/esm/generated/typegraphql-prisma/models/Trade.mjs +154 -33
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts +9 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.mjs +49 -7
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.mjs +93 -16
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.mjs +98 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.mjs +98 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.mjs +98 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.mjs +93 -16
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.mjs +93 -16
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.mjs +97 -20
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.mjs +97 -20
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts +16 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.mjs +100 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts +9 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.mjs +49 -7
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts +16 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.mjs +100 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts +16 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.mjs +100 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts +16 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.mjs +100 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts +16 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.mjs +100 -21
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts +16 -3
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.mjs +100 -21
- package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.mjs +98 -21
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts +9 -3
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.mjs +49 -7
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.mjs +93 -16
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.mjs +98 -21
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.mjs +98 -21
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts +14 -3
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.mjs +98 -21
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts +9 -3
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.js.map +1 -1
- package/esm/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.mjs +49 -7
- package/esm/prismaClient.d.ts +4 -5
- package/esm/prismaClient.d.ts.map +1 -1
- package/esm/prismaClient.js.map +1 -1
- package/esm/prismaClient.mjs +13 -11
- package/generated/typeStrings/Trade.cjs +0 -6
- package/generated/typeStrings/Trade.d.ts +1 -1
- package/generated/typeStrings/Trade.d.ts.map +1 -1
- package/generated/typeStrings/Trade.js.map +1 -1
- package/generated/typeStrings/index.d.ts +1 -1
- package/generated/typegraphql-prisma/enhance.cjs +24 -24
- package/generated/typegraphql-prisma/enhance.js.map +1 -1
- package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.cjs +14 -3
- package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts +15 -4
- package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.d.ts.map +1 -1
- package/generated/typegraphql-prisma/enums/TradeScalarFieldEnum.js.map +1 -1
- package/generated/typegraphql-prisma/models/Trade.cjs +98 -21
- package/generated/typegraphql-prisma/models/Trade.d.ts +56 -12
- package/generated/typegraphql-prisma/models/Trade.d.ts.map +1 -1
- package/generated/typegraphql-prisma/models/Trade.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeArgs.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindFirstTradeOrThrowArgs.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/FindManyTradeArgs.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/crud/Trade/args/GroupByTradeArgs.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.cjs +40 -4
- package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts +9 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeAvgOrderByAggregateInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.cjs +79 -13
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCountOrderByAggregateInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.cjs +84 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.cjs +84 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateManyInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.cjs +84 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeCreateWithoutActionsInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.cjs +79 -13
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMaxOrderByAggregateInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.cjs +79 -13
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeMinOrderByAggregateInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.cjs +83 -17
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithAggregationInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.cjs +83 -17
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeOrderByWithRelationInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.cjs +86 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts +16 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeScalarWhereWithAggregatesInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.cjs +40 -4
- package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts +9 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeSumOrderByAggregateInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.cjs +86 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts +16 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.cjs +86 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts +16 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateManyMutationInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.cjs +86 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts +16 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeUpdateWithoutActionsInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.cjs +86 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts +16 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.cjs +86 -18
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts +16 -3
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/inputs/TradeWhereUniqueInput.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.cjs +84 -18
- package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/CreateManyAndReturnTrade.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.cjs +40 -4
- package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts +9 -3
- package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeAvgAggregate.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.cjs +79 -13
- package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeCountAggregate.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.cjs +84 -18
- package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeGroupBy.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.cjs +84 -18
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMaxAggregate.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.cjs +84 -18
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts +14 -3
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeMinAggregate.js.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.cjs +40 -4
- package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts +9 -3
- package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.d.ts.map +1 -1
- package/generated/typegraphql-prisma/resolvers/outputs/TradeSumAggregate.js.map +1 -1
- package/package.json +1 -1
- package/prismaClient.cjs +13 -11
- package/prismaClient.d.ts +4 -5
- 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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
:
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
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
|
-
|
111
|
-
|
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
|
-
|
115
|
-
|
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
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
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
|
-
|
164
|
-
|
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
|
-
|
168
|
-
|
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
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
}
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
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
|
-
|
305
|
-
|
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
|
-
|
309
|
-
|
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
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
:
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
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
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
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
|
-
|
475
|
-
|
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
|
-
|
479
|
-
|
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
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
511
|
-
|
512
|
-
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
}
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
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
|
-
|
616
|
-
|
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
|
-
|
620
|
-
|
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
|
-
*
|
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
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
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
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
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
|
-
|
658
|
-
|
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
|
-
|
662
|
-
|
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
|
-
*
|
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
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
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
|
-
|
710
|
-
|
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
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
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
|
-
|
746
|
-
|
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
|
-
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
768
|
-
|
769
|
-
|
770
|
-
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
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
|
-
|
797
|
-
|
798
|
-
|
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
|
-
|
801
|
-
|
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
|