func readAvailableInventory()

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
	}
}