|
18 | 18 | from django_lifecycle.conditions import ( # type: ignore[import-untyped] |
19 | 19 | WhenFieldHasChanged, |
20 | 20 | ) |
| 21 | +from pydantic import BaseModel |
21 | 22 |
|
22 | 23 | from integrations.lead_tracking.hubspot.tasks import ( |
23 | 24 | create_hubspot_contact_for_user, |
|
44 | 45 | from users.constants import DEFAULT_DELETE_ORPHAN_ORGANISATIONS_VALUE |
45 | 46 | from users.exceptions import InvalidInviteError |
46 | 47 |
|
| 48 | + |
| 49 | +class UTMDataModel(BaseModel): |
| 50 | + utm_source: typing.Optional[str] = None |
| 51 | + utm_medium: typing.Optional[str] = None |
| 52 | + utm_campaign: typing.Optional[str] = None |
| 53 | + utm_term: typing.Optional[str] = None |
| 54 | + utm_content: typing.Optional[str] = None |
| 55 | + |
| 56 | + |
47 | 57 | if typing.TYPE_CHECKING: |
48 | 58 | from environments.models import Environment |
49 | 59 | from organisations.invites.models import ( |
@@ -463,12 +473,29 @@ class HubspotLead(models.Model): |
463 | 473 | updated_at = models.DateTimeField(auto_now=True) |
464 | 474 |
|
465 | 475 |
|
| 476 | +class HubspotTrackerUTMData(typing.TypedDict, total=False): |
| 477 | + utm_source: str |
| 478 | + utm_medium: str |
| 479 | + utm_campaign: str |
| 480 | + utm_term: str |
| 481 | + utm_content: str |
| 482 | + |
| 483 | + |
466 | 484 | class HubspotTracker(models.Model): |
467 | 485 | user = models.OneToOneField( |
468 | 486 | FFAdminUser, |
469 | 487 | related_name="hubspot_tracker", |
470 | 488 | on_delete=models.CASCADE, |
471 | 489 | ) |
472 | | - hubspot_cookie = models.CharField(unique=True, max_length=100, null=False) |
| 490 | + hubspot_cookie = models.CharField( |
| 491 | + unique=True, |
| 492 | + max_length=100, |
| 493 | + null=True, |
| 494 | + blank=True, |
| 495 | + ) |
| 496 | + utm_data: HubspotTrackerUTMData = models.JSONField( |
| 497 | + default=None, blank=True, null=True |
| 498 | + ) # type: ignore[assignment] |
| 499 | + |
473 | 500 | created_at = models.DateTimeField(auto_now_add=True) |
474 | 501 | updated_at = models.DateTimeField(auto_now=True) |
0 commit comments