in inventory-service/spanner/main.go [232:269]
func readAvailableInventory(db string) (string, error) {
ro := dataClient.ReadOnlyTransaction()
defer ro.Close()
stmt := spanner.Statement{
SQL: `SELECT
itemID,
sum(inventoryChange) as inventory
FROM inventoryHistory
group by ItemID`}
iter := ro.Query(context.Background(), stmt)
defer iter.Stop()
type inventoryList struct {
ItemID int64
Inventory int64
}
itemList := []inventoryList{}
for {
row, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
return "", err
}
item := inventoryList{}
if err := row.Columns(&item.ItemID, &item.Inventory); err != nil {
return "", err
}
itemList = append(itemList, item)
}
j, err := json.Marshal(itemList)
if err != nil {
return "", err
} else {
return string(j), err
}
}