func queryCustomers()

in customers.go [37:79]


func queryCustomers(ctx context.Context, db *sqlx.DB, id, productId, limit *int) ([]Customer, error) {
	var args []interface{}
	queryString := `
SELECT
  customers.id, full_name, company_name, email,
  address, postal_code, city, country
FROM customers
`
	if id != nil {
		queryString += "WHERE id=?\n"
		args = append(args, *id)
	}
	if productId != nil {
		queryString += "" +
			"JOIN orders ON customers.id=orders.customer_id " +
			"JOIN order_lines ON orders.id=order_lines.order_id " +
			"WHERE order_lines.product_id=?\n"
		args = append(args, *productId)
	}
	if limit != nil {
		queryString += fmt.Sprintf("LIMIT %d\n", *limit)
	}

	rows, err := db.QueryContext(ctx, db.Rebind(queryString), args...)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	var customers []Customer
	for rows.Next() {
		var c Customer
		if err := rows.Scan(
			&c.ID, &c.FullName, &c.CompanyName,
			&c.Email, &c.Address, &c.PostalCode,
			&c.City, &c.Country,
		); err != nil {
			return nil, err
		}
		customers = append(customers, c)
	}
	return customers, rows.Err()
}