using Fengling.Backend.Domain.AggregatesModel.MemberAggregate;
namespace Fengling.Backend.Domain.AggregatesModel.PointsTransactionAggregate;
///
/// 积分交易ID
///
public partial record PointsTransactionId : IGuidStronglyTypedId;
///
/// 积分交易聚合根
///
public class PointsTransaction : Entity, IAggregateRoot
{
protected PointsTransaction() { }
///
/// 创建积分交易记录
///
public static PointsTransaction CreateEarnTransaction(
MemberId memberId,
int amount,
string source,
string reason,
Guid relatedId,
DateTime expiryDate)
{
if (amount <= 0)
throw new KnownException("积分数量必须大于0");
return new PointsTransaction
{
MemberId = memberId,
Type = PointsTransactionType.Earn,
Amount = amount,
Source = source,
Reason = reason,
RelatedId = relatedId,
ExpiryDate = expiryDate,
CreatedAt = DateTime.UtcNow
};
}
///
/// 创建积分消费记录
///
public static PointsTransaction CreateConsumeTransaction(
MemberId memberId,
int amount,
string reason,
Guid orderId)
{
if (amount <= 0)
throw new KnownException("积分数量必须大于0");
return new PointsTransaction
{
MemberId = memberId,
Type = PointsTransactionType.Consume,
Amount = amount,
Source = "兑换消费",
Reason = reason,
RelatedId = orderId,
CreatedAt = DateTime.UtcNow
};
}
///
/// 创建积分退还记录
///
public static PointsTransaction CreateRefundTransaction(
MemberId memberId,
int amount,
string reason,
Guid orderId)
{
if (amount <= 0)
throw new KnownException("积分数量必须大于0");
return new PointsTransaction
{
MemberId = memberId,
Type = PointsTransactionType.Refund,
Amount = amount,
Source = "订单退还",
Reason = reason,
RelatedId = orderId,
CreatedAt = DateTime.UtcNow
};
}
///
/// 创建积分过期记录
///
public static PointsTransaction CreateExpireTransaction(
MemberId memberId,
int amount,
Guid batchId)
{
if (amount <= 0)
throw new KnownException("积分数量必须大于0");
return new PointsTransaction
{
MemberId = memberId,
Type = PointsTransactionType.Expire,
Amount = amount,
Source = "积分过期",
Reason = "积分已过期自动失效",
RelatedId = batchId,
CreatedAt = DateTime.UtcNow
};
}
///
/// 会员ID
///
public MemberId MemberId { get; private set; } = default!;
///
/// 交易类型
///
public PointsTransactionType Type { get; private set; }
///
/// 积分数量
///
public int Amount { get; private set; }
///
/// 来源
///
public string Source { get; private set; } = string.Empty;
///
/// 原因描述
///
public string Reason { get; private set; } = string.Empty;
///
/// 关联ID(营销码ID/订单ID等)
///
public Guid RelatedId { get; private set; }
///
/// 过期时间(仅获取类型有效)
///
public DateTime? ExpiryDate { get; private set; }
///
/// 创建时间
///
public DateTime CreatedAt { get; private set; }
public Deleted Deleted { get; private set; } = new();
public RowVersion RowVersion { get; private set; } = new(0);
}
///
/// 积分交易类型
///
public enum PointsTransactionType
{
///
/// 获得
///
Earn = 1,
///
/// 消费
///
Consume = 2,
///
/// 过期
///
Expire = 3,
///
/// 退还
///
Refund = 4
}