2023-12-15 03:51:13 +01:00
|
|
|
# https://github.com/typeddjango/django-stubs/issues/1698
|
|
|
|
# mypy: disable-error-code="explicit-override"
|
|
|
|
|
|
|
|
from django.db import models
|
|
|
|
from django.db.models import CASCADE
|
|
|
|
|
|
|
|
from zerver.models.users import UserProfile
|
|
|
|
|
|
|
|
|
|
|
|
class AbstractPushDeviceToken(models.Model):
|
|
|
|
APNS = 1
|
2024-06-13 20:53:09 +02:00
|
|
|
FCM = 2
|
2023-12-15 03:51:13 +01:00
|
|
|
|
|
|
|
KINDS = (
|
|
|
|
(APNS, "apns"),
|
2024-06-13 20:53:09 +02:00
|
|
|
# The string value in the database is "gcm" for legacy reasons.
|
|
|
|
# TODO: We should migrate it.
|
|
|
|
(FCM, "gcm"),
|
2023-12-15 03:51:13 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
kind = models.PositiveSmallIntegerField(choices=KINDS)
|
|
|
|
|
|
|
|
# The token is a unique device-specific token that is
|
|
|
|
# sent to us from each device:
|
|
|
|
# - APNS token if kind == APNS
|
2024-06-13 20:53:09 +02:00
|
|
|
# - FCM registration id if kind == FCM
|
2023-12-15 03:51:13 +01:00
|
|
|
token = models.CharField(max_length=4096, db_index=True)
|
|
|
|
|
|
|
|
# TODO: last_updated should be renamed date_created, since it is
|
|
|
|
# no longer maintained as a last_updated value.
|
|
|
|
last_updated = models.DateTimeField(auto_now=True)
|
|
|
|
|
|
|
|
# [optional] Contains the app id of the device if it is an iOS device
|
|
|
|
ios_app_id = models.TextField(null=True)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
abstract = True
|
|
|
|
|
|
|
|
|
|
|
|
class PushDeviceToken(AbstractPushDeviceToken):
|
|
|
|
# The user whose device this is
|
|
|
|
user = models.ForeignKey(UserProfile, db_index=True, on_delete=CASCADE)
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
unique_together = ("user", "kind", "token")
|