feat: 扩展领域模型与配置
This commit is contained in:
55
src/Domain/TakeoutSaaS.Domain/Ordering/Entities/CartItem.cs
Normal file
55
src/Domain/TakeoutSaaS.Domain/Ordering/Entities/CartItem.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using TakeoutSaaS.Domain.Ordering.Enums;
|
||||
using TakeoutSaaS.Shared.Abstractions.Entities;
|
||||
|
||||
namespace TakeoutSaaS.Domain.Ordering.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 购物车条目。
|
||||
/// </summary>
|
||||
public sealed class CartItem : MultiTenantEntityBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 所属购物车标识。
|
||||
/// </summary>
|
||||
public Guid ShoppingCartId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 商品或 SKU 标识。
|
||||
/// </summary>
|
||||
public Guid ProductId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SKU 标识。
|
||||
/// </summary>
|
||||
public Guid? ProductSkuId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 商品名称快照。
|
||||
/// </summary>
|
||||
public string ProductName { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 单价快照。
|
||||
/// </summary>
|
||||
public decimal UnitPrice { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 数量。
|
||||
/// </summary>
|
||||
public int Quantity { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 自定义备注(口味要求)。
|
||||
/// </summary>
|
||||
public string? Remark { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 状态。
|
||||
/// </summary>
|
||||
public CartItemStatus Status { get; set; } = CartItemStatus.Normal;
|
||||
|
||||
/// <summary>
|
||||
/// 扩展 JSON(规格、加料选项等)。
|
||||
/// </summary>
|
||||
public string? AttributesJson { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using TakeoutSaaS.Shared.Abstractions.Entities;
|
||||
|
||||
namespace TakeoutSaaS.Domain.Ordering.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 购物车条目的加料/附加项。
|
||||
/// </summary>
|
||||
public sealed class CartItemAddon : MultiTenantEntityBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 所属购物车条目。
|
||||
/// </summary>
|
||||
public Guid CartItemId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 选项名称。
|
||||
/// </summary>
|
||||
public string Name { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 附加价格。
|
||||
/// </summary>
|
||||
public decimal ExtraPrice { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 选项 ID(可对应 ProductAddonOption)。
|
||||
/// </summary>
|
||||
public Guid? OptionId { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using TakeoutSaaS.Domain.Ordering.Enums;
|
||||
using TakeoutSaaS.Shared.Abstractions.Entities;
|
||||
|
||||
namespace TakeoutSaaS.Domain.Ordering.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 结账会话,记录校验上下文。
|
||||
/// </summary>
|
||||
public sealed class CheckoutSession : MultiTenantEntityBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户标识。
|
||||
/// </summary>
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 门店标识。
|
||||
/// </summary>
|
||||
public Guid StoreId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 会话 Token。
|
||||
/// </summary>
|
||||
public string SessionToken { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 会话状态。
|
||||
/// </summary>
|
||||
public CheckoutSessionStatus Status { get; set; } = CheckoutSessionStatus.Pending;
|
||||
|
||||
/// <summary>
|
||||
/// 校验结果明细 JSON。
|
||||
/// </summary>
|
||||
public string ValidationResultJson { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// 过期时间(UTC)。
|
||||
/// </summary>
|
||||
public DateTime ExpiresAt { get; set; }
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
using TakeoutSaaS.Domain.Ordering.Enums;
|
||||
using TakeoutSaaS.Shared.Abstractions.Entities;
|
||||
|
||||
namespace TakeoutSaaS.Domain.Ordering.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 用户购物车,按租户/门店隔离。
|
||||
/// </summary>
|
||||
public sealed class ShoppingCart : MultiTenantEntityBase
|
||||
{
|
||||
/// <summary>
|
||||
/// 用户标识。
|
||||
/// </summary>
|
||||
public Guid UserId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 门店标识。
|
||||
/// </summary>
|
||||
public Guid StoreId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 购物车状态,包含正常/锁定。
|
||||
/// </summary>
|
||||
public ShoppingCartStatus Status { get; set; } = ShoppingCartStatus.Active;
|
||||
|
||||
/// <summary>
|
||||
/// 桌码或场景标识(扫码点餐)。
|
||||
/// </summary>
|
||||
public string? TableContext { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 履约方式(堂食/自提/配送)缓存。
|
||||
/// </summary>
|
||||
public string? DeliveryPreference { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最近一次修改时间(UTC)。
|
||||
/// </summary>
|
||||
public DateTime LastModifiedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
namespace TakeoutSaaS.Domain.Ordering.Enums;
|
||||
|
||||
/// <summary>
|
||||
/// 购物车条目状态。
|
||||
/// </summary>
|
||||
public enum CartItemStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// 正常可结算。
|
||||
/// </summary>
|
||||
Normal = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 不可售(售罄或下架)。
|
||||
/// </summary>
|
||||
Unavailable = 1,
|
||||
|
||||
/// <summary>
|
||||
/// 已被删除。
|
||||
/// </summary>
|
||||
Removed = 2
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
namespace TakeoutSaaS.Domain.Ordering.Enums;
|
||||
|
||||
/// <summary>
|
||||
/// 结账会话状态。
|
||||
/// </summary>
|
||||
public enum CheckoutSessionStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// 等待用户提交或支付。
|
||||
/// </summary>
|
||||
Pending = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 校验失败。
|
||||
/// </summary>
|
||||
Failed = 1,
|
||||
|
||||
/// <summary>
|
||||
/// 已用于创建订单。
|
||||
/// </summary>
|
||||
Completed = 2,
|
||||
|
||||
/// <summary>
|
||||
/// 超时作废。
|
||||
/// </summary>
|
||||
Expired = 3
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
namespace TakeoutSaaS.Domain.Ordering.Enums;
|
||||
|
||||
/// <summary>
|
||||
/// 购物车状态。
|
||||
/// </summary>
|
||||
public enum ShoppingCartStatus
|
||||
{
|
||||
/// <summary>
|
||||
/// 可正常使用。
|
||||
/// </summary>
|
||||
Active = 0,
|
||||
|
||||
/// <summary>
|
||||
/// 已锁定(进行结账中)。
|
||||
/// </summary>
|
||||
Locked = 1,
|
||||
|
||||
/// <summary>
|
||||
/// 已清空或失效。
|
||||
/// </summary>
|
||||
Cleared = 2
|
||||
}
|
||||
Reference in New Issue
Block a user