Skip to main content

Payment Entities

Entities for Stripe payment processing, subscriptions, disputes, and payment retries.

Subscription

Purpose: User subscription linked to Stripe subscription.

Key Fields:

  • Id (int): Unique identifier
  • UserId: Subscribed user
  • StripeSubscriptionId: Stripe subscription ID
  • StripeCustomerId: Stripe customer ID
  • StripePriceId: Stripe price ID
  • Tier: Free, Basic, Pro subscription tier
  • Status: Incomplete, Active, PastDue, Cancelled, Unpaid
  • Amount: Subscription amount
  • Currency: Currency code
  • Interval: month, year, etc.
  • IntervalCount: 1, 3, 6, 12, etc.
  • TrialStart, TrialEnd: Trial period
  • CurrentPeriodStart, CurrentPeriodEnd: Current billing period
  • CanceledAt, CancelAt, EndedAt: Cancellation dates
  • CancelAtPeriodEnd: Whether cancels at period end
  • CancellationReason: Cancellation reason

Relationships:

  • Many-to-one: User

Usage Patterns:

// Get active subscriptions
var subscriptions = context.Subscriptions
.Where(s => s.Status == SubscriptionStatus.Active)
.Include(s => s.User)
.ToList();

// Get user's subscription
var subscription = context.Subscriptions
.FirstOrDefault(s => s.UserId == userId && s.Status == SubscriptionStatus.Active);

Dispute

Purpose: Payment disputes from Stripe.

Key Fields:

  • Id (int): Unique identifier
  • StripeDisputeId: Stripe dispute ID
  • ChargeId: Associated charge
  • Amount: Disputed amount
  • Currency: Currency code
  • Reason: Dispute reason
  • Status: WarningNeedsResponse, WarningUnderReview, WarningClosed, NeedsResponse, UnderReview, ChargeRefunded, Won, Lost
  • CreatedAt: Dispute creation date
  • ResolvedAt: Resolution date

Relationships:

  • Many-to-one: Payment (optional)

Usage Patterns:

// Get active disputes
var disputes = context.Disputes
.Where(d => d.Status == DisputeStatus.NeedsResponse || d.Status == DisputeStatus.UnderReview)
.ToList();

PaymentRetry

Purpose: Failed payment retry tracking.

Key Fields:

  • Id (int): Unique identifier
  • PaymentIntentId: Stripe payment intent ID
  • UserId: User with failed payment
  • Amount: Payment amount
  • Currency: Currency code
  • RetryCount: Number of retry attempts
  • LastRetryAt: Last retry timestamp
  • NextRetryAt: Next scheduled retry
  • Status: Pending, Success, Failed, Cancelled
  • FailureReason: Payment failure reason

Relationships:

  • Many-to-one: User

Usage Patterns:

// Get payments needing retry
var retries = context.PaymentRetries
.Where(pr => pr.Status == PaymentRetryStatus.Pending && pr.NextRetryAt <= DateTime.UtcNow)
.Include(pr => pr.User)
.ToList();
  • Stripe Integration - Complete Stripe setup
  • Stripe Service - See FishingLog.API/Services/StripeService.cs for payment service implementation