+ Tips
+ Memberships - DDD - FutureCreator - UserTransactions
This commit is contained in:
8
src/Web/Features/Memberships/Data/Creator.cs
Normal file
8
src/Web/Features/Memberships/Data/Creator.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
namespace Hutopy.Web.Features.Memberships.Data;
|
||||
|
||||
public class Creator
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string StripeAccountId { get; set; }
|
||||
}
|
||||
58
src/Web/Features/Memberships/Data/MembershipDbContext.cs
Normal file
58
src/Web/Features/Memberships/Data/MembershipDbContext.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
namespace Hutopy.Web.Features.Memberships.Data;
|
||||
|
||||
public sealed class MembershipDbContext(
|
||||
DbContextOptions<MembershipDbContext> options)
|
||||
: DbContext(options)
|
||||
{
|
||||
public const string SchemaName = "Membership";
|
||||
|
||||
public DbSet<Creator> Creators => Set<Creator>();
|
||||
public DbSet<Subscription> Subscriptions => Set<Subscription>();
|
||||
public DbSet<Tier> Tiers => Set<Tier>();
|
||||
public DbSet<Tip> Tips => Set<Tip>();
|
||||
public DbSet<Transaction> Transactions => Set<Transaction>();
|
||||
|
||||
|
||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||
{
|
||||
modelBuilder.HasDefaultSchema(SchemaName);
|
||||
|
||||
modelBuilder.Entity<Creator>();
|
||||
|
||||
modelBuilder
|
||||
.Entity<Subscription>()
|
||||
.Property(c => c.CreatedAt)
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
||||
|
||||
modelBuilder
|
||||
.Entity<Subscription>()
|
||||
.HasOne(c => c.Creator)
|
||||
.WithMany()
|
||||
.HasForeignKey(c => c.CreatorId);
|
||||
|
||||
modelBuilder
|
||||
.Entity<Tier>()
|
||||
.HasOne(c => c.Creator)
|
||||
.WithMany()
|
||||
.HasForeignKey(c => c.CreatorId);
|
||||
|
||||
modelBuilder
|
||||
.Entity<Tier>()
|
||||
.Property(c => c.CreatedAt)
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
||||
|
||||
modelBuilder
|
||||
.Entity<Tip>()
|
||||
.Property(c => c.CreatedAt)
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
||||
|
||||
modelBuilder
|
||||
.Entity<Transaction>()
|
||||
.Property(c => c.CreatedAt)
|
||||
.ValueGeneratedOnAdd()
|
||||
.HasDefaultValueSql("CURRENT_TIMESTAMP");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
using Hutopy.Web.Features.Contents.Data;
|
||||
|
||||
namespace Hutopy.Web.Features.Memberships.Data;
|
||||
|
||||
public static class InitializerExtensions
|
||||
{
|
||||
public static async Task InitialiseMembershipDbContextAsync(this WebApplication app)
|
||||
{
|
||||
using var scope = app.Services.CreateScope();
|
||||
|
||||
var initializer = scope.ServiceProvider.GetRequiredService<MembershipDbContextInitializer>();
|
||||
|
||||
await initializer.InitialiseAsync();
|
||||
}
|
||||
}
|
||||
|
||||
public class MembershipDbContextInitializer(
|
||||
ILogger<MembershipDbContextInitializer> logger,
|
||||
ContentDbContext context
|
||||
)
|
||||
{
|
||||
public async Task InitialiseAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
await context.Database.MigrateAsync();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.LogError(ex, "An error occurred while initialising the content database.");
|
||||
throw;
|
||||
}
|
||||
}
|
||||
}
|
||||
18
src/Web/Features/Memberships/Data/Subscription.cs
Normal file
18
src/Web/Features/Memberships/Data/Subscription.cs
Normal file
@@ -0,0 +1,18 @@
|
||||
namespace Hutopy.Web.Features.Memberships.Data;
|
||||
|
||||
public class Subscription
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTimeOffset CreatedAt { get; set; }
|
||||
public Guid UserId { get; set; }
|
||||
public Guid CreatorId { get; set; }
|
||||
public Creator Creator { get; set; }
|
||||
public Guid TierId { get; set; }
|
||||
public Tier Tier { get; set; }
|
||||
public DateTimeOffset StartDate { get; set; }
|
||||
public DateTimeOffset? EndDate { get; set; }
|
||||
public bool IsActive => EndDate == null || EndDate > DateTime.UtcNow;
|
||||
public string? StripeSessionId { get; set; }
|
||||
public string? StripeSubscriptionId { get; set; }
|
||||
|
||||
}
|
||||
14
src/Web/Features/Memberships/Data/Tier.cs
Normal file
14
src/Web/Features/Memberships/Data/Tier.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace Hutopy.Web.Features.Memberships.Data;
|
||||
|
||||
public class Tier
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public Guid CreatorId { get; set; }
|
||||
public Creator Creator { get; set; }
|
||||
public string Name { get; set; }
|
||||
public decimal Price { get; set; }
|
||||
public string CurrencyCode { get; set; }
|
||||
|
||||
public ICollection<Subscription> Subscriptions { get; set; }
|
||||
}
|
||||
15
src/Web/Features/Memberships/Data/Tip.cs
Normal file
15
src/Web/Features/Memberships/Data/Tip.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace Hutopy.Web.Features.Memberships.Data;
|
||||
|
||||
public class Tip
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTimeOffset CreatedAt { get; set; }
|
||||
public string StripeSessionId { get; set; }
|
||||
public Guid TipperId { get; set; }
|
||||
public string TipperName { get; set; }
|
||||
public Guid CreatorId { get; set; }
|
||||
public string CreatorName { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
public string Currency { get; set; }
|
||||
public string Message { get; set; }
|
||||
}
|
||||
11
src/Web/Features/Memberships/Data/Transaction.cs
Normal file
11
src/Web/Features/Memberships/Data/Transaction.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
namespace Hutopy.Web.Features.Memberships.Data;
|
||||
|
||||
public class Transaction
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public DateTimeOffset CreatedAt { get; set; }
|
||||
public string StripeCheckoutSessionId { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
public string Type { get; set; } // Subscription, Tip
|
||||
public DateTime Timestamp { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user