51 lines
1.6 KiB
C#
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;
|
|
}
|
|
}
|