1import uuid
2
3from plain import models
4
5
6@models.register_model
7class Pageview(models.Model):
8 uuid = models.UUIDField(default=uuid.uuid4)
9
10 url = models.URLField(max_length=1024)
11 timestamp = models.DateTimeField(auto_now_add=True)
12
13 title = models.CharField(max_length=512, required=False)
14 # Referrers may not always be valid URLs (e.g. `android-app://...`).
15 # Use a plain CharField so we don't validate the scheme or format.
16 referrer = models.CharField(max_length=1024, required=False)
17
18 user_id = models.CharField(max_length=255, required=False)
19 session_key = models.CharField(max_length=255, required=False)
20
21 class Meta:
22 ordering = ["-timestamp"]
23 indexes = [
24 models.Index(fields=["timestamp"]),
25 models.Index(fields=["user_id"]),
26 models.Index(fields=["session_key"]),
27 models.Index(fields=["url"]),
28 ]
29 constraints = [
30 models.UniqueConstraint(
31 fields=["uuid"], name="plainpageviews_pageview_unique_uuid"
32 ),
33 ]
34
35 def __str__(self):
36 return self.url