in src/product-catalog/main.go [217:256]
func readProductFiles() ([]*pb.Product, error) {
// find all .json files in the products directory
entries, err := os.ReadDir("./products")
if err != nil {
return nil, err
}
jsonFiles := make([]fs.FileInfo, 0, len(entries))
for _, entry := range entries {
if strings.HasSuffix(entry.Name(), ".json") {
info, err := entry.Info()
if err != nil {
return nil, err
}
jsonFiles = append(jsonFiles, info)
}
}
// read the contents of each .json file and unmarshal into a ListProductsResponse
// then append the products to the catalog
var products []*pb.Product
for _, f := range jsonFiles {
jsonData, err := os.ReadFile("./products/" + f.Name())
if err != nil {
return nil, err
}
var res pb.ListProductsResponse
if err := protojson.Unmarshal(jsonData, &res); err != nil {
return nil, err
}
products = append(products, res.Products...)
}
log.Infof("Loaded %d products", len(products))
return products, nil
}