44 "context"
55 "encoding/json"
66 "fmt"
7- "io"
87 "log/slog"
98 "net/http"
109 "os"
@@ -158,16 +157,12 @@ func loadDatabase(cacheFile string) (*Database, error) {
158157}
159158
160159func fetchFromAPI () (* Database , error ) {
161- client := & http.Client {
162- Timeout : 30 * time .Second ,
163- }
164-
165160 req , err := http .NewRequestWithContext (context .Background (), http .MethodGet , ModelsDevAPIURL , http .NoBody )
166161 if err != nil {
167162 return nil , fmt .Errorf ("failed to create request: %w" , err )
168163 }
169164
170- resp , err := client .Do (req )
165+ resp , err := ( & http. Client { Timeout : 30 * time . Second }) .Do (req )
171166 if err != nil {
172167 return nil , fmt .Errorf ("failed to fetch from API: %w" , err )
173168 }
@@ -177,33 +172,27 @@ func fetchFromAPI() (*Database, error) {
177172 return nil , fmt .Errorf ("API returned status %d" , resp .StatusCode )
178173 }
179174
180- body , err := io .ReadAll (resp .Body )
181- if err != nil {
182- return nil , fmt .Errorf ("failed to read response body: %w" , err )
183- }
184-
185175 var providers map [string ]Provider
186- if err := json .Unmarshal ( body , & providers ); err != nil {
187- return nil , fmt .Errorf ("failed to unmarshal response: %w" , err )
176+ if err := json .NewDecoder ( resp . Body ). Decode ( & providers ); err != nil {
177+ return nil , fmt .Errorf ("failed to decode response: %w" , err )
188178 }
189179
190- database := & Database {
180+ return & Database {
191181 Providers : providers ,
192182 UpdatedAt : time .Now (),
193- }
194-
195- return database , nil
183+ }, nil
196184}
197185
198186func loadFromCache (cacheFile string ) (* CachedData , error ) {
199- data , err := os .ReadFile (cacheFile )
187+ f , err := os .Open (cacheFile )
200188 if err != nil {
201- return nil , fmt .Errorf ("failed to read cache file: %w" , err )
189+ return nil , fmt .Errorf ("failed to open cache file: %w" , err )
202190 }
191+ defer f .Close ()
203192
204193 var cached CachedData
205- if err := json .Unmarshal ( data , & cached ); err != nil {
206- return nil , fmt .Errorf ("failed to unmarshal cached data: %w" , err )
194+ if err := json .NewDecoder ( f ). Decode ( & cached ); err != nil {
195+ return nil , fmt .Errorf ("failed to decode cached data: %w" , err )
207196 }
208197
209198 return & cached , nil
0 commit comments