64 lines
2.1 KiB
C#
64 lines
2.1 KiB
C#
using NodaTime;
|
|
using NodaTime.Serialization.Protobuf;
|
|
|
|
namespace DysonNetwork.Shared.Data;
|
|
|
|
public class SubscriptionReference
|
|
{
|
|
public Guid Id { get; set; }
|
|
public string Identifier { get; set; } = string.Empty;
|
|
public string DisplayName { get; set; } = string.Empty;
|
|
public bool IsActive { get; set; }
|
|
public bool IsAvailable { get; set; }
|
|
public Instant BegunAt { get; set; }
|
|
public Instant? EndedAt { get; set; }
|
|
public Instant? RenewalAt { get; set; }
|
|
public SubscriptionReferenceStatus Status { get; set; }
|
|
|
|
public static SubscriptionReference FromProtoValue(Proto.SubscriptionReferenceObject proto)
|
|
{
|
|
return new SubscriptionReference
|
|
{
|
|
Id = Guid.Parse(proto.Id),
|
|
Identifier = proto.Identifier,
|
|
DisplayName = proto.DisplayName,
|
|
IsActive = proto.IsActive,
|
|
IsAvailable = proto.IsAvailable,
|
|
BegunAt = proto.BegunAt.ToInstant(),
|
|
EndedAt = proto.EndedAt?.ToInstant(),
|
|
RenewalAt = proto.RenewalAt?.ToInstant(),
|
|
Status = (SubscriptionReferenceStatus)proto.Status
|
|
};
|
|
}
|
|
|
|
public Proto.SubscriptionReferenceObject ToProtoValue()
|
|
{
|
|
return new Proto.SubscriptionReferenceObject
|
|
{
|
|
Id = Id.ToString(),
|
|
Identifier = Identifier,
|
|
DisplayName = DisplayName,
|
|
IsActive = IsActive,
|
|
IsAvailable = IsAvailable,
|
|
BegunAt = BegunAt.ToTimestamp(),
|
|
EndedAt = EndedAt?.ToTimestamp(),
|
|
RenewalAt = RenewalAt?.ToTimestamp(),
|
|
Status = Status switch
|
|
{
|
|
SubscriptionReferenceStatus.Unpaid => Proto.SubscriptionStatus.Unpaid,
|
|
SubscriptionReferenceStatus.Active => Proto.SubscriptionStatus.Active,
|
|
SubscriptionReferenceStatus.Expired => Proto.SubscriptionStatus.Expired,
|
|
SubscriptionReferenceStatus.Cancelled => Proto.SubscriptionStatus.Cancelled,
|
|
_ => Proto.SubscriptionStatus.Unpaid
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
public enum SubscriptionReferenceStatus
|
|
{
|
|
Unpaid = 0,
|
|
Active = 1,
|
|
Expired = 2,
|
|
Cancelled = 3
|
|
} |