The minimum and maximum quantity of the product that can be purchased in a single order can be set both globally as well as at product level. It works for both simple and variable product types.
You can also set custom error messages when cart already contains other products, or when adding other products to cart.