from django.db import models from django.conf import settings from django.utils.translation import gettext_lazy as _ class UserExamRedemption(models.Model): class RedeemType(models.IntegerChoices): CREDITS = 0, _("Credits") VOUCHER = 1, _("Voucher") user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) exam = models.ForeignKey("labs.Exam", on_delete=models.CASCADE) # NULL means "unused redemption" (redeem first, consume when starting an attempt). exam_attempt = models.ForeignKey( "labs.ExamAttempt", on_delete=models.CASCADE, null=True, blank=True, ) redeem_type = models.IntegerField(choices=RedeemType.choices, default=RedeemType.CREDITS) redeem_detail = models.JSONField(default=dict) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "user_exam_redemptions" unique_together = ("user", "exam_attempt") indexes = [ models.Index( fields=["user", "exam", "exam_attempt"], name="idx_uer_user_exam_attempt", ), ]