from django.db import models from django.conf import settings from django_tidb.fields import BigAutoRandomField class StripeCheckoutSession(models.Model): # https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-payment_status class PaymentStatus(models.TextChoices): PAID = "paid" UNPAID = "unpaid" NO_PAYMENT_REQUIRED = "no_payment_required" # https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-status class Status(models.TextChoices): COMPLETED = "complete" EXPIRED = "expired" OPEN = "open" id = BigAutoRandomField(primary_key=True) stripe_session_id = models.CharField(max_length=100, blank=True, null=True) stripe_payment_intent_id = models.CharField(max_length=100, blank=True, null=True) user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING) quantity = models.IntegerField() discount = models.DecimalField(max_digits=4, decimal_places=2) # Three-letter [ISO currency code](https://www.iso.org/iso-4217-currency-codes.html), in lowercase. currency = models.CharField(max_length=3) payment_status = models.CharField( max_length=32, choices=PaymentStatus.choices, default=PaymentStatus.UNPAID ) status = models.CharField( max_length=32, choices=Status.choices, default=Status.OPEN ) checkout_url = models.TextField() stripe_request = models.JSONField(default=dict) stripe_response = models.JSONField(default=dict) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "billing_stripe_checkout_sessions"