52 lines
1.4 KiB
C#
52 lines
1.4 KiB
C#
namespace Supermarket;
|
|
|
|
public sealed class Food : Product
|
|
{
|
|
private const char AllergenSeparator = '|';
|
|
private readonly SortedSet<AllergenType> _allergens;
|
|
|
|
public Food(string productName, string barcode, int quantity, params AllergenType[] allergens)
|
|
: base(productName, barcode, quantity)
|
|
{
|
|
_allergens = new SortedSet<AllergenType>(allergens);
|
|
}
|
|
|
|
public AllergenType[] Allergens => _allergens.ToArray();
|
|
|
|
protected override string[] CsvColumnNames => ["Barcode", "ProductName", "Quantity", "Allergens"];
|
|
|
|
protected override string[] CsvColumnValues
|
|
{
|
|
get
|
|
{
|
|
string allergens = string.Join(AllergenSeparator, Allergens);
|
|
return [Barcode, ProductName, Quantity.ToString(), allergens];
|
|
}
|
|
}
|
|
|
|
public bool AddAllergen(AllergenType allergen)
|
|
{
|
|
if (ContainsAnyAllergen(allergen))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
_allergens.Add(allergen);
|
|
return true;
|
|
}
|
|
|
|
public bool RemoveAllergen(AllergenType allergen) => _allergens.Remove(allergen);
|
|
|
|
public bool ContainsAnyAllergen(params AllergenType[] allergens)
|
|
{
|
|
foreach (var allergen in allergens)
|
|
{
|
|
if (_allergens.Contains(allergen))
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|