forked from xiongyuxing/tiku-backend.net
75 lines
3.4 KiB
C#
75 lines
3.4 KiB
C#
using System.Text.Json;
|
|
using Tiku.Domain.Common;
|
|
|
|
namespace Tiku.Domain.Commerce;
|
|
|
|
public sealed class PointActivityTask : AuditableTenantEntity
|
|
{
|
|
public string TaskKey { get; set; } = string.Empty;
|
|
public string Title { get; set; } = string.Empty;
|
|
public string? Description { get; set; }
|
|
public PointActivityTaskType TaskType { get; set; } = PointActivityTaskType.Manual;
|
|
public PointActivityTaskStatus Status { get; set; } = PointActivityTaskStatus.Active;
|
|
public int Points { get; set; }
|
|
public int MaxClaimsPerUser { get; set; } = 1;
|
|
public DateTimeOffset? StartsAt { get; set; }
|
|
public DateTimeOffset? EndsAt { get; set; }
|
|
public int SortOrder { get; set; }
|
|
public JsonElement Rules { get; set; } = JsonDefaults.Object();
|
|
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
|
}
|
|
|
|
public sealed class PointActivityClaim : AuditableTenantEntity
|
|
{
|
|
public Guid TaskId { get; set; }
|
|
public Guid UserId { get; set; }
|
|
public string TaskKey { get; set; } = string.Empty;
|
|
public int Points { get; set; }
|
|
public PointActivityClaimStatus Status { get; set; } = PointActivityClaimStatus.Claimed;
|
|
public string? SourceType { get; set; }
|
|
public Guid? SourceId { get; set; }
|
|
public DateTimeOffset ClaimedAt { get; set; } = DateTimeOffset.UtcNow;
|
|
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
|
}
|
|
|
|
public sealed class PointExchangeItem : AuditableTenantEntity
|
|
{
|
|
public Guid? RegionId { get; set; }
|
|
public string ItemKey { get; set; } = string.Empty;
|
|
public string Name { get; set; } = string.Empty;
|
|
public string? Description { get; set; }
|
|
public PointExchangeItemType ItemType { get; set; } = PointExchangeItemType.Entitlement;
|
|
public PointExchangeItemStatus Status { get; set; } = PointExchangeItemStatus.Active;
|
|
public int PointsCost { get; set; }
|
|
public int? Stock { get; set; }
|
|
public int? Days { get; set; }
|
|
public int SortOrder { get; set; }
|
|
public DateTimeOffset? StartsAt { get; set; }
|
|
public DateTimeOffset? EndsAt { get; set; }
|
|
public JsonElement FulfillmentPayload { get; set; } = JsonDefaults.Object();
|
|
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
|
}
|
|
|
|
public sealed class PointExchangeOrder : AuditableTenantEntity
|
|
{
|
|
public Guid ItemId { get; set; }
|
|
public Guid UserId { get; set; }
|
|
public string OrderNo { get; set; } = string.Empty;
|
|
public string ItemName { get; set; } = string.Empty;
|
|
public PointExchangeItemType ItemType { get; set; } = PointExchangeItemType.Entitlement;
|
|
public PointExchangeOrderStatus Status { get; set; } = PointExchangeOrderStatus.Completed;
|
|
public int PointsCost { get; set; }
|
|
public DateTimeOffset OrderedAt { get; set; } = DateTimeOffset.UtcNow;
|
|
public DateTimeOffset? CompletedAt { get; set; }
|
|
public DateTimeOffset? CancelledAt { get; set; }
|
|
public JsonElement FulfillmentSnapshot { get; set; } = JsonDefaults.Object();
|
|
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
|
}
|
|
|
|
public enum PointActivityTaskType { Manual, DailyLogin, Practice, VocabularyReview, BadgeUnlock }
|
|
public enum PointActivityTaskStatus { Active, Disabled, Expired }
|
|
public enum PointActivityClaimStatus { Claimed, Cancelled }
|
|
public enum PointExchangeItemType { Entitlement, Coupon, Virtual, Other }
|
|
public enum PointExchangeItemStatus { Active, Disabled, SoldOut }
|
|
public enum PointExchangeOrderStatus { Pending, Completed, Cancelled, Failed }
|