@@ -8,27 +8,37 @@ func routes(_ app: Application) async throws {
88 let currencyDTOMapper = CurrencyDTOMapper ( )
99 let tickerDTOMapper = TickerDTOMapper ( )
1010 let loginResponseDTOMapper = LoginResponseDTOMapper ( )
11- let transactionDTOMapper = TransactionDTOMapper ( currencyDTOMapper: currencyDTOMapper)
11+ let transactionDTOMapper = TransactionDTOMapper ( currencyDTOMapper: currencyDTOMapper, database : app . db )
1212 let tickerRepository = PostgresTickerRepository ( database: app. db)
1313 let livePriceService = LivePriceService ( alphavantage: alphavantage)
1414 let quoteCache = PostgresQuoteRepository ( database: app. db)
1515 let priceService = CachedPriceService ( priceService: livePriceService, cache: quoteCache)
16+ let performanceCalculator = HoldingsPerformanceCalculator ( priceService: priceService)
1617 let investmentDTOMapper = InvestmentDTOMapper ( currencyDTOMapper: currencyDTOMapper,
1718 transactionDTOMapper: transactionDTOMapper,
1819 tickerRepository: tickerRepository,
1920 priceService: priceService)
21+
22+ let userRepository = PostgresUserRepository ( database: app. db)
2023 let portfolioRepository = PostgresPortfolioRepository ( database: app. db)
21- let portfolioPerformanceCalculator = PortfolioPerformanceCalculator ( priceService: priceService)
24+ let transactionRepository = PostgresTransactionRepository ( database: app. db)
25+ let brokerageRepository = PostgresBrokerageRepository ( database: app. db)
26+ let brokerageAccountRepository = PostgresBrokerageAccountRepository ( database: app. db)
27+ let brokerageAccountDailyRepository = PostgresBrokerageAccountDailyPerformanceRepository ( database: app. db)
28+ let brokerageDailyPerformanceRepository = PostgresBrokerageDailyPerformanceRepository ( database: app. db)
29+
2230 let portfolioDTOMapper = PortfolioDTOMapper ( investmentDTOMapper: investmentDTOMapper,
23- currencyDTOMapper: currencyDTOMapper,
24- performanceCalculator: portfolioPerformanceCalculator)
31+ transactionDTOMapper: transactionDTOMapper,
32+ currencyDTOMapper: currencyDTOMapper)
33+ let currencyRepository = PostgresCurrencyRepository ( database: app. db)
2534 let portfolioPerformanceUpdater = PortfolioPerformanceUpdater (
26- userRepository: PostgresUserRepository ( database : app . db ) ,
35+ userRepository: userRepository ,
2736 portfolioRepository: portfolioRepository,
2837 tickerRepository: PostgresTickerRepository ( database: app. db) ,
2938 quoteCache: quoteCache,
3039 priceService: priceService,
31- performanceCalculator: portfolioPerformanceCalculator)
40+ performanceCalculator: performanceCalculator,
41+ portfolioDailyRepo: PostgresPortfolioDailyPerformanceRepository ( db: app. db) )
3242 let transactionChangedHandler = TransactionChangedHandler ( portfolioRepository: PostgresPortfolioRepository ( database: app. db) ,
3343 historicalPerformanceUpdater: portfolioPerformanceUpdater)
3444
@@ -41,7 +51,7 @@ func routes(_ app: Application) async throws {
4151 let investmentsController = InvestmentController ( portfolioRepository: portfolioRepository,
4252 dataMapper: investmentDTOMapper)
4353
44- let accountController = AccountController ( userRepository: PostgresUserRepository ( database : app . db ) , dataMapper: UserDTOMapper ( ) )
54+ let accountController = AccountController ( userRepository: userRepository , dataMapper: UserDTOMapper ( ) )
4555
4656 let globalRateLimiter = RateLimiterMiddleware ( maxRequests: 100 , perSeconds: 60 )
4757 let loginRateLimiter = RateLimiterMiddleware ( maxRequests: 3 , perSeconds: 60 )
@@ -63,26 +73,54 @@ func routes(_ app: Application) async throws {
6373 try protected. register ( collection:
6474 PortfoliosController (
6575 portfolioRepository: PostgresPortfolioRepository ( database: app. db) ,
66- currencyRepository: PostgresCurrencyRepository ( database : app . db ) ,
76+ currencyRepository: currencyRepository ,
6777 historicalPortfolioPerformanceUpdater: portfolioPerformanceUpdater,
78+ portfolioDailyRepo: PostgresPortfolioDailyPerformanceRepository ( db: app. db) ,
6879 dataMapper: portfolioDTOMapper)
6980 )
7081
71- let transactionController = TransactionsController ( transactionsRepository: PostgresTransactionRepository ( database : app . db ) ,
72- currencyRepository: PostgresCurrencyRepository ( database : app . db ) ,
82+ let transactionController = TransactionsController ( transactionsRepository: transactionRepository ,
83+ currencyRepository: currencyRepository ,
7384 dataMapper: transactionDTOMapper)
7485 transactionController. delegate = transactionChangedHandler
7586 try protected. register ( collection: transactionController)
7687 try protected. register ( collection: tickersController)
7788 try protected. register ( collection: investmentsController)
7889 try protected. register ( collection: accountController)
90+ try protected. register ( collection: BrokerageController ( brokerageRepository: brokerageRepository,
91+ dtoMapper: BrokerageDTOMapper ( brokerageRepository: brokerageRepository,
92+ accountDTOMapper: BrokerageAccountDTOMapper ( brokerageAccountRepository: brokerageAccountRepository,
93+ currencyMapper: currencyDTOMapper, database: app. db) ,
94+ database: app. db) ,
95+ accounts: brokerageAccountRepository,
96+ currencyMapper: currencyDTOMapper,
97+ performanceRepository: brokerageDailyPerformanceRepository,
98+ performancePointDTOMapper: PerformancePointDTOMapper ( ) ) )
99+ try protected. register ( collection: BrokerageAccountController ( brokerageAccountRepository: brokerageAccountRepository,
100+ currencyMapper: currencyDTOMapper,
101+ currencyRepository: currencyRepository) )
79102 }
80103
81104 if app. environment != . testing {
82- let portfolioUpdaterJob = PortfolioPerformanceUpdaterJob ( performanceUpdater: portfolioPerformanceUpdater)
83- app. queues. schedule ( portfolioUpdaterJob)
105+ let nightlyUpdaterJob = NightlyUpdaterJob (
106+ tickerPriceUpdater: TickerPriceUpdater ( tickerRepository: tickerRepository,
107+ quoteCache: quoteCache,
108+ priceService: priceService) ,
109+ portfolioPerformanceUpdater: portfolioPerformanceUpdater,
110+ brokerageAccountPerformanceUpdater: BrokerageAccountPerformanceUpdater ( transactionRepository: transactionRepository,
111+ brokerageAccountRepository: brokerageAccountRepository,
112+ accountDailyRepository: brokerageAccountDailyRepository,
113+ userRepository: userRepository,
114+ calculator: performanceCalculator) ,
115+ brokeragePerformanceUpdater: BrokeragePerformanceUpdater ( userRepository: userRepository,
116+ brokerageAccountRepository: brokerageAccountRepository,
117+ accountDailyRepository: brokerageAccountDailyRepository,
118+ brokerageDailyRepository: brokerageDailyPerformanceRepository)
119+ )
120+ app. queues. schedule ( nightlyUpdaterJob)
84121 . daily ( )
85122 . at ( 3 , 0 )
123+
86124 app. queues. add ( LoggingJobEventDelegate ( logger: app. logger) )
87125
88126 let userTokenCleanerJob = UserTokenClearUpJob ( userTokenClearing: UserTokenClearer ( database: app. db) )
0 commit comments