func getStats()

in stats.go [21:51]


func getStats(ctx context.Context, db *sqlx.DB) (*Stats, error) {
	var stats Stats
	countParams := []struct {
		table  string
		result *int
	}{
		{"products", &stats.Products},
		{"customers", &stats.Customers},
		{"orders", &stats.Orders},
	}
	for _, p := range countParams {
		row := db.QueryRowContext(ctx, `SELECT COUNT(*) FROM `+p.table)
		if err := row.Scan(p.result); err != nil {
			return nil, errors.Wrap(err, "querying "+p.table)
		}
	}

	var revenue, cost, profit *int
	row := db.QueryRowContext(ctx, `
SELECT
  SUM(selling_price), SUM(cost), SUM(selling_price-cost)
FROM products JOIN order_lines ON products.id=order_lines.product_id
`)
	if err := row.Scan(&revenue, &cost, &profit); err != nil {
		return nil, errors.Wrap(err, "querying numbers")
	}
	stats.Numbers.Revenue = maybeInt(revenue)
	stats.Numbers.Cost = maybeInt(cost)
	stats.Numbers.Profit = maybeInt(profit)
	return &stats, nil
}