from django.db import models from django.conf import settings from django.utils.translation import gettext_lazy as _ class UserCreditSummary(models.Model): user = models.OneToOneField( settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, primary_key=True, related_name="credit_summary", ) paid_credits = models.IntegerField(default=0) free_credits = models.IntegerField(default=0) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "billing_user_credits" def __str__(self): return f"UserCreditSummary(user_id={self.user_id}, paid_credits={self.paid_credits}, free_credits={self.free_credits})" class UserCreditDetail(models.Model): class CreditType(models.TextChoices): PAID = "paid", _("Paid") FREE = "free", _("Free") user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.DO_NOTHING, related_name="credit_details", ) credit_type = models.CharField(max_length=10, choices=CreditType.choices) initial_amount = models.IntegerField( blank=True, null=True, help_text="The initial amount of the credit, only used for free credits.", ) amount = models.IntegerField(default=0) expires_at = models.DateTimeField( null=True, blank=True, help_text=( "The date and time when the credit expires." "Paid credits will never expire; " "Free credits always have an expiration date." ), ) remark = models.CharField( max_length=255, null=True, blank=True, help_text="The remark of the credit.", ) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "billing_user_credit_details" def __str__(self): return f"UserCreditDetail(user_id={self.user_id}, credit_type={self.credit_type}, amount={self.amount})"