fengling-risk-control/Fengling.RiskControl.Domain/Aggregates/LotteryActivities/LotteryActivity.cs

51 lines
1.6 KiB
C#

using NetCorePal.Extensions.Domain;
namespace Fengling.RiskControl.Domain.Aggregates.LotteryActivities;
public class LotteryActivity : Entity<long>, IAggregateRoot
{
public long MemberId { get; private set; }
public string ActivityType { get; private set; } = string.Empty;
public int StakePoints { get; private set; }
public int? WinAmount { get; private set; }
public LotteryStatus Status { get; private set; } = LotteryStatus.Pending;
public string? IpAddress { get; private set; }
public string? DeviceId { get; private set; }
public DateTime CreatedAt { get; private set; } = DateTime.UtcNow;
public DateTime? CompletedAt { get; private set; }
private LotteryActivity() { }
public static LotteryActivity Create(long memberId, string activityType, int stakePoints,
string? ipAddress = null, string? deviceId = null)
{
return new LotteryActivity
{
MemberId = memberId,
ActivityType = activityType,
StakePoints = stakePoints,
Status = LotteryStatus.Pending,
IpAddress = ipAddress,
DeviceId = deviceId
};
}
public void MarkProcessing()
{
Status = LotteryStatus.Processing;
}
public void Complete(int winAmount, bool isWin)
{
Status = isWin ? LotteryStatus.Won : LotteryStatus.Lost;
WinAmount = isWin ? winAmount : null;
CompletedAt = DateTime.UtcNow;
}
public void Fail(string reason)
{
Status = LotteryStatus.Failed;
CompletedAt = DateTime.UtcNow;
}
}