many fixes and improvements - rework for modules/ and common/
feat(emailer): add Postmark and Resend providers
This commit is contained in:
20
backend/Modules/Memberships/Data/Membership.cs
Normal file
20
backend/Modules/Memberships/Data/Membership.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Hutopy.Modules.Memberships.Data;
|
||||
|
||||
public class Membership
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTimeOffset CreatedAt { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
public Guid CreatorId { get; set; }
|
||||
public Guid TierId { get; set; }
|
||||
public MembershipTier? MembershipTier { get; set; }
|
||||
public MembershipState State { get; set; }
|
||||
public DateTimeOffset? StartDate { get; set; }
|
||||
public DateTimeOffset? EndDate { get; set; }
|
||||
public bool IsActive => EndDate == null || EndDate > DateTimeOffset.UtcNow;
|
||||
[MaxLength(256)]public string? StripeSubscriptionId { get; set; }
|
||||
|
||||
public ICollection<Payment> Payments { get; set; } = [];
|
||||
}
|
||||
8
backend/Modules/Memberships/Data/MembershipState.cs
Normal file
8
backend/Modules/Memberships/Data/MembershipState.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace Hutopy.Modules.Memberships.Data;
|
||||
|
||||
public enum MembershipState
|
||||
{
|
||||
Pending,
|
||||
Active,
|
||||
Inactive
|
||||
}
|
||||
17
backend/Modules/Memberships/Data/MembershipTier.cs
Normal file
17
backend/Modules/Memberships/Data/MembershipTier.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using Hutopy.Common.Domain;
|
||||
|
||||
namespace Hutopy.Modules.Memberships.Data;
|
||||
|
||||
public class MembershipTier : Entity
|
||||
{
|
||||
public Guid CreatorId { get; set; }
|
||||
[MaxLength(128)] public string Name { get; set; } = null!;
|
||||
[MaxLength(4096)] public string Description { get; set; } = null!;
|
||||
public decimal Price { get; set; }
|
||||
[MaxLength(128)] public string CurrencyCode { get; set; } = null!;
|
||||
[MaxLength(128)] public string StripeProductId { get; set; } = null!;
|
||||
[MaxLength(128)] public string StripePriceId { get; set; } = null!;
|
||||
|
||||
public ICollection<Membership> Subscriptions { get; set; } = [];
|
||||
}
|
||||
36
backend/Modules/Memberships/Data/MembershipsDbContext.cs
Normal file
36
backend/Modules/Memberships/Data/MembershipsDbContext.cs
Normal file
@@ -0,0 +1,36 @@
|
||||
namespace Hutopy.Modules.Memberships.Data;
|
||||
|
||||
public sealed class MembershipsDbContext(
|
||||
DbContextOptions<MembershipsDbContext> options)
|
||||
: DbContext(options)
|
||||
{
|
||||
public const string SchemaName = "Memberships";
|
||||
|
||||
public DbSet<MembershipTier> MembershipTiers => Set<MembershipTier>();
|
||||
public DbSet<Membership> Memberships => Set<Membership>();
|
||||
public DbSet<Payment> Payments => Set<Payment>();
|
||||
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.HasDefaultSchema(SchemaName);
|
||||
|
||||
modelBuilder
|
||||
.Entity<MembershipTier>()
|
||||
.Property(c => c.CreatedAt)
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
||||
|
||||
modelBuilder
|
||||
.Entity<Membership>()
|
||||
.Property(c => c.CreatedAt)
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
||||
|
||||
modelBuilder
|
||||
.Entity<Payment>()
|
||||
.Property(c => c.CreatedAt)
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
||||
}
|
||||
}
|
||||
13
backend/Modules/Memberships/Data/Payment.cs
Normal file
13
backend/Modules/Memberships/Data/Payment.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Hutopy.Modules.Memberships.Data;
|
||||
|
||||
public class Payment
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTimeOffset CreatedAt { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
[MaxLength(8)] public required string Currency { get; set; }
|
||||
[MaxLength(2048)] public required string InvoiceUrl { get; set; }
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user