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
}