@@ -6,6 +6,8 @@ parameters:
6
6
llm.base_url : ' %env(GENAI_BASE_URL)%'
7
7
llm.model : ' %env(GENAI_MODEL)%'
8
8
env(USE_MOCK_DATA) : ' %env(bool:USE_MOCK_DATA)%'
9
+ alpha_vantage.api_key : ' %env(ALPHA_VANTAGE_API_KEY)%'
10
+ edgar_api.user_agent : ' %env(SEC_EDGAR_USER_AGENT)%' # User-Agent for SEC EDGAR API from environment
9
11
10
12
services :
11
13
# Default configuration for services in *this* file
@@ -23,60 +25,134 @@ services:
23
25
- ' ../src/DependencyInjection/'
24
26
- ' ../src/Entity/'
25
27
- ' ../src/Kernel.php'
26
- # Exclude API client implementations AND factories - we define them explicitly
27
- - ' ../src/Service/ApiClient/'
28
+ # Removed exclusion of API client implementations AND factories to enable autowiring
29
+ # - '../src/Service/ApiClient/'
28
30
29
31
# --- Define ALL Concrete Implementations (Real & Mock) ---
30
- # These need to be defined so the factories can locate them.
31
- App\Service\ApiClient\AlphaVantageClient : ~ # ~ uses _defaults
32
- App\Service\ApiClient\YahooFinanceClient : ~
33
- App\Service\ApiClient\SecApiClient : ~
34
- App\Service\ApiClient\NewsApiClient : ~
35
- App\Service\ApiClient\EdgarApiClient : ~
36
- App\Service\ApiClient\LinkedInApiClient : ~
37
-
38
- App\Service\ApiClient\MockAlphaVantageClient : ~
39
- App\Service\ApiClient\MockYahooFinanceClient : ~
40
- App\Service\ApiClient\MockSecApiClient : ~
41
- App\Service\ApiClient\MockNewsApiClient : ~
42
- App\Service\ApiClient\MockEdgarApiClient : ~
43
- App\Service\ApiClient\MockLinkedInApiClient : ~
32
+ # These need to be defined with proper arguments for the factories to locate them
33
+ # Alpha Vantage
34
+ App\Service\ApiClient\AlphaVantageClient :
35
+ public : true
36
+ arguments :
37
+ $httpClient : ' @http_client'
38
+ $params : ' @parameter_bag'
39
+ $logger : ' @logger'
40
+
41
+ App\Service\ApiClient\MockAlphaVantageClient :
42
+ public : true
43
+
44
+ # Yahoo Finance
45
+ App\Service\ApiClient\YahooFinanceClient :
46
+ public : true
47
+ arguments :
48
+ $httpClient : ' @http_client'
49
+ $params : ' @parameter_bag'
50
+ $logger : ' @logger'
51
+
52
+ App\Service\ApiClient\MockYahooFinanceClient :
53
+ public : true
54
+
55
+ # SEC API (Edgar)
56
+ App\Service\ApiClient\SecApiClient :
57
+ public : true
58
+ arguments :
59
+ $httpClient : ' @http_client'
60
+ $params : ' @parameter_bag'
61
+ $logger : ' @logger'
62
+
63
+ App\Service\ApiClient\MockSecApiClient :
64
+ public : true
65
+
66
+ # News API
67
+ App\Service\ApiClient\NewsApiClient :
68
+ public : true
69
+ arguments :
70
+ $httpClient : ' @http_client'
71
+ $params : ' @parameter_bag'
72
+ $logger : ' @logger'
73
+
74
+ App\Service\ApiClient\MockNewsApiClient :
75
+ public : true
76
+
77
+ # Edgar API
78
+ App\Service\ApiClient\EdgarApiClient :
79
+ public : true
80
+ arguments :
81
+ $httpClient : ' @http_client'
82
+ $params : ' @parameter_bag'
83
+ $logger : ' @logger'
84
+
85
+ App\Service\ApiClient\MockEdgarApiClient :
86
+ public : true
87
+
88
+ # LinkedIn API
89
+ App\Service\ApiClient\LinkedInApiClient :
90
+ public : true
91
+ arguments :
92
+ $params : ' @parameter_bag'
93
+ $logger : ' @logger'
94
+ $requestStack : ' @request_stack'
95
+
96
+ App\Service\ApiClient\MockLinkedInApiClient :
97
+ public : true
44
98
45
99
# --- Define the Factories ---
46
100
# We use a service locator for the factories to avoid circular dependencies
47
101
# and allow the factories to access the correct client service.
102
+ # Define explicit service locators for factories to avoid YAML !service_locator tag issues
103
+ App\Service\ApiClient\EdgarClientFactory.locator :
104
+ public : true
105
+ class : Symfony\Component\DependencyInjection\ServiceLocator
106
+ tags : ['container.service_locator']
107
+ arguments :
108
+ -
109
+ App\Service\ApiClient\EdgarApiClient : ' @App\Service\ApiClient\EdgarApiClient'
110
+ App\Service\ApiClient\MockEdgarApiClient : ' @App\Service\ApiClient\MockEdgarApiClient'
111
+
48
112
App\Service\ApiClient\EdgarClientFactory :
113
+ public : true
49
114
arguments :
50
- $locator : !service_locator # Use a service locator
51
- # List the services this factory needs access to
52
- - App\Service\ApiClient\EdgarApiClient
53
- - App\Service\ApiClient\MockEdgarApiClient
115
+ $locator : ' @App\Service\ApiClient\EdgarClientFactory.locator'
54
116
$useMockData : ' %env(bool:USE_MOCK_DATA)%'
55
- tags : ['container.service_subscriber'] # Tag for service locator
117
+ tags : ['container.service_subscriber']
118
+
119
+ App\Service\ApiClient\LinkedInClientFactory.locator :
120
+ public : true
121
+ class : Symfony\Component\DependencyInjection\ServiceLocator
122
+ tags : ['container.service_locator']
123
+ arguments :
124
+ -
125
+ App\Service\ApiClient\LinkedInApiClient : ' @App\Service\ApiClient\LinkedInApiClient'
126
+ App\Service\ApiClient\MockLinkedInApiClient : ' @App\Service\ApiClient\MockLinkedInApiClient'
56
127
57
128
App\Service\ApiClient\LinkedInClientFactory :
129
+ public : true
58
130
arguments :
59
- $locator : !service_locator
60
- # List the services this factory needs access to
61
- - App\Service\ApiClient\LinkedInApiClient
62
- - App\Service\ApiClient\MockLinkedInApiClient
131
+ $locator : ' @App\Service\ApiClient\LinkedInClientFactory.locator'
63
132
$useMockData : ' %env(bool:USE_MOCK_DATA)%'
64
133
tags : ['container.service_subscriber']
65
134
135
+ App\Service\ApiClient\StockClientsFactory.locator :
136
+ public : true
137
+ class : Symfony\Component\DependencyInjection\ServiceLocator
138
+ tags : ['container.service_locator']
139
+ arguments :
140
+ -
141
+ App\Service\ApiClient\AlphaVantageClient : ' @App\Service\ApiClient\AlphaVantageClient'
142
+ App\Service\ApiClient\MockAlphaVantageClient : ' @App\Service\ApiClient\MockAlphaVantageClient'
143
+ App\Service\ApiClient\YahooFinanceClient : ' @App\Service\ApiClient\YahooFinanceClient'
144
+ App\Service\ApiClient\MockYahooFinanceClient : ' @App\Service\ApiClient\MockYahooFinanceClient'
145
+ App\Service\ApiClient\NewsApiClient : ' @App\Service\ApiClient\NewsApiClient'
146
+ App\Service\ApiClient\MockNewsApiClient : ' @App\Service\ApiClient\MockNewsApiClient'
147
+ App\Service\ApiClient\SecApiClient : ' @App\Service\ApiClient\SecApiClient'
148
+ App\Service\ApiClient\MockSecApiClient : ' @App\Service\ApiClient\MockSecApiClient'
149
+
66
150
App\Service\ApiClient\StockClientsFactory :
67
- arguments :
68
- $locator : !service_locator
69
- # List the services this factory needs access to
70
- - App\Service\ApiClient\AlphaVantageClient
71
- - App\Service\ApiClient\MockAlphaVantageClient
72
- - App\Service\ApiClient\YahooFinanceClient
73
- - App\Service\ApiClient\MockYahooFinanceClient
74
- - App\Service\ApiClient\NewsApiClient
75
- - App\Service\ApiClient\MockNewsApiClient
76
- - App\Service\ApiClient\SecApiClient
77
- - App\Service\ApiClient\MockSecApiClient
151
+ public : true
152
+ arguments :
153
+ $locator : ' @App\Service\ApiClient\StockClientsFactory.locator'
78
154
$useMockData : ' %env(bool:USE_MOCK_DATA)%'
79
- tags : ['container.service_subscriber']
155
+ tags : ['container.service_subscriber']
80
156
81
157
# --- Service Definitions that USE the API Clients ---
82
158
# Inject the FACTORIES now, not the clients directly.
@@ -127,4 +203,10 @@ services:
127
203
arguments :
128
204
$projectDir : ' %kernel.project_dir%'
129
205
130
- # Cache definition should remain in stock_api.yaml or cache.yaml
206
+ # Define the stock data cache service
207
+ stock_data.cache :
208
+ class : Symfony\Component\Cache\Adapter\FilesystemAdapter
209
+ arguments :
210
+ $namespace : ' stock_data'
211
+ $defaultLifetime : 3600
212
+ $directory : ' %kernel.cache_dir%/stock_data'
0 commit comments