Domain модели

This commit is contained in:
2026-05-31 22:41:59 +03:00
parent daeae92a75
commit e691f14e5d
6 changed files with 106 additions and 9 deletions

View File

@@ -1,6 +0,0 @@
namespace Domain;
public class Class1
{
}

View File

@@ -0,0 +1,24 @@
namespace Domain.Entities;
/// <summary>
/// Блюдо из меню (GetMenu / MenuItem).
/// </summary>
public sealed class Dish
{
public required string Id { get; init; }
/// <summary>
/// Артикул блюда. Используется при вводе заказа с клавиатуры.
/// </summary>
public required string Article { get; init; }
public required string Name { get; init; }
public decimal Price { get; init; }
public bool IsWeighted { get; init; }
public required string FullPath { get; init; }
public IReadOnlyList<string> Barcodes { get; init; } = [];
}

View File

@@ -0,0 +1,37 @@
namespace Domain.Entities;
/// <summary>
/// Заказ (SendOrder).
/// </summary>
public sealed class Order
{
private readonly List<OrderItem> _items = [];
public Guid Id { get; }
public IReadOnlyCollection<OrderItem> Items => _items;
public Order(Guid? id = null)
{
Id = id ?? Guid.NewGuid();
}
public void AddItem(string menuItemId, decimal quantity)
{
ArgumentException.ThrowIfNullOrWhiteSpace(menuItemId);
if (quantity <= 0)
{
throw new ArgumentOutOfRangeException(
nameof(quantity),
quantity,
"Количество должно быть больше нуля.");
}
_items.Add(new OrderItem
{
MenuItemId = menuItemId,
Quantity = quantity,
});
}
}

View File

@@ -0,0 +1,17 @@
namespace Domain.Entities;
/// <summary>
/// Позиция заказа (SendOrder / MenuItems).
/// </summary>
public sealed class OrderItem
{
/// <summary>
/// Идентификатор блюда на сервере (<see cref="Dish.Id"/>).
/// </summary>
public required string MenuItemId { get; init; }
/// <summary>
/// Количество. Для весовых блюд допускаются дробные значения.
/// </summary>
public decimal Quantity { get; init; }
}