from django.db import models from django.conf import settings from django.utils import timezone class UserEvent(models.Model): class EventSource(models.IntegerChoices): FRONTEND = 0 BACKEND = 1 class EventName(models.TextChoices): UPDATE_PROFILE = "update_profile" REDEEM_EVENT_VOUCHER = "redeem_event_voucher" REDEEM_CREDITS_VOUCHER = "redeem_credits_voucher" REDEEM_EXAM_VOUCHER = "redeem_exam_voucher" REDEEM_LAB = "redeem_lab" START_LAB = "start_lab" TERMINATE_LAB = "terminate_lab" SUBMIT_LAB_FEEDBACK = "submit_lab_feedback" ASK_AI = "ask_ai" BILLING_CREATE_ORDER = "billing_create_order" BILLING_CHECKOUT_ORDER = "billing_checkout_order" BILLING_UPDATE_PROFILE = "billing_update_profile" user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) event_source = models.IntegerField( choices=EventSource.choices, default=EventSource.FRONTEND ) event_name = models.CharField(max_length=64) event_body = models.JSONField(default=dict) page_location = models.CharField(max_length=255, null=True, blank=True) page_referrer = models.CharField(max_length=255, null=True, blank=True) device = models.JSONField(default=dict) geo = models.JSONField(default=dict) user_pseudo_id = models.CharField(max_length=128, null=True, blank=True) lab_code = models.CharField(max_length=32, null=True, blank=True) lab_instance = models.ForeignKey( "labs.LabInstance", on_delete=models.DO_NOTHING, null=True, blank=True, ) created_at = models.DateTimeField(default=timezone.now) class Meta: db_table = "user_events" unique_together = ("user", "event_name", "event_source", "created_at")