chore: device migration (#5939)

* chore: device migration

* chore: devices

* chore: update device migrations

* chore: update migration

* chore: update migrations

* chore: update device migrations
This commit is contained in:
Nikhil
2024-11-01 22:40:39 +05:30
committed by GitHub
parent 27d7d91185
commit 0dead39fd1
4 changed files with 239 additions and 18 deletions

View File

@@ -1,15 +1,106 @@
# Generated by Django 4.2.15 on 2024-11-01 15:21
# Generated by Django 4.2.15 on 2024-11-01 17:02
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
("db", "0082_alter_issue_managers_alter_cycleissue_issue_and_more"),
]
operations = [
migrations.CreateModel(
name="Device",
fields=[
(
"created_at",
models.DateTimeField(
auto_now_add=True, verbose_name="Created At"
),
),
(
"updated_at",
models.DateTimeField(
auto_now=True, verbose_name="Last Modified At"
),
),
(
"deleted_at",
models.DateTimeField(
blank=True, null=True, verbose_name="Deleted At"
),
),
(
"id",
models.UUIDField(
db_index=True,
default=uuid.uuid4,
editable=False,
primary_key=True,
serialize=False,
unique=True,
),
),
(
"device_id",
models.CharField(blank=True, max_length=255, null=True),
),
(
"device_type",
models.CharField(
choices=[
("ANDROID", "Android"),
("IOS", "iOS"),
("WEB", "Web"),
("DESKTOP", "Desktop"),
],
max_length=255,
),
),
(
"push_token",
models.CharField(blank=True, max_length=255, null=True),
),
("is_active", models.BooleanField(default=True)),
(
"created_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_created_by",
to=settings.AUTH_USER_MODEL,
verbose_name="Created By",
),
),
(
"updated_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_updated_by",
to=settings.AUTH_USER_MODEL,
verbose_name="Last Modified By",
),
),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="devices",
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"verbose_name": "Device",
"verbose_name_plural": "Devices",
"db_table": "devices",
},
),
migrations.AddField(
model_name="issuetype",
name="is_epic",
@@ -663,18 +754,6 @@ class Migration(migrations.Migration):
max_length=255,
),
),
migrations.AlterField(
model_name="account",
name="provider",
field=models.CharField(
choices=[
("google", "Google"),
("github", "Github"),
("gitlab", "GitLab"),
("firebase", "Firebase"),
]
),
),
migrations.AlterField(
model_name="issuerelation",
name="relation_type",
@@ -706,4 +785,90 @@ class Migration(migrations.Migration):
to="db.project",
),
),
migrations.CreateModel(
name="DeviceSession",
fields=[
(
"created_at",
models.DateTimeField(
auto_now_add=True, verbose_name="Created At"
),
),
(
"updated_at",
models.DateTimeField(
auto_now=True, verbose_name="Last Modified At"
),
),
(
"deleted_at",
models.DateTimeField(
blank=True, null=True, verbose_name="Deleted At"
),
),
(
"id",
models.UUIDField(
db_index=True,
default=uuid.uuid4,
editable=False,
primary_key=True,
serialize=False,
unique=True,
),
),
("is_active", models.BooleanField(default=True)),
(
"user_agent",
models.CharField(blank=True, max_length=255, null=True),
),
(
"ip_address",
models.GenericIPAddressField(blank=True, null=True),
),
("start_time", models.DateTimeField(auto_now_add=True)),
("end_time", models.DateTimeField(blank=True, null=True)),
(
"created_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_created_by",
to=settings.AUTH_USER_MODEL,
verbose_name="Created By",
),
),
(
"device",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="sessions",
to="db.device",
),
),
(
"session",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="device_sessions",
to="db.session",
),
),
(
"updated_by",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.SET_NULL,
related_name="%(class)s_updated_by",
to=settings.AUTH_USER_MODEL,
verbose_name="Last Modified By",
),
),
],
options={
"verbose_name": "Device Session",
"verbose_name_plural": "Device Sessions",
"db_table": "device_sessions",
},
),
]

View File

@@ -5,7 +5,13 @@ from .base import BaseModel
from .cycle import Cycle, CycleIssue, CycleUserProperties
from .dashboard import Dashboard, DashboardWidget, Widget
from .deploy_board import DeployBoard
from .draft import DraftIssue, DraftIssueAssignee, DraftIssueLabel, DraftIssueModule, DraftIssueCycle
from .draft import (
DraftIssue,
DraftIssueAssignee,
DraftIssueLabel,
DraftIssueModule,
DraftIssueCycle,
)
from .estimate import Estimate, EstimatePoint
from .exporter import ExporterHistory
from .importer import Importer
@@ -109,4 +115,6 @@ from .issue_type import IssueType
from .recent_visit import UserRecentVisit
from .label import Label
from .label import Label
from .device import Device, DeviceSession

View File

@@ -0,0 +1,50 @@
# models.py
from django.db import models
from django.conf import settings
from .base import BaseModel
class Device(BaseModel):
class DeviceType(models.TextChoices):
ANDROID = "ANDROID", "Android"
IOS = "IOS", "iOS"
WEB = "WEB", "Web"
DESKTOP = "DESKTOP", "Desktop"
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
related_name="devices",
)
device_id = models.CharField(max_length=255, blank=True, null=True)
device_type = models.CharField(max_length=255, choices=DeviceType.choices)
push_token = models.CharField(max_length=255, blank=True, null=True)
is_active = models.BooleanField(default=True)
class Meta:
db_table = "devices"
verbose_name = "Device"
verbose_name_plural = "Devices"
class DeviceSession(BaseModel):
device = models.ForeignKey(
Device,
on_delete=models.CASCADE,
related_name="sessions",
)
session = models.ForeignKey(
"db.Session",
on_delete=models.CASCADE,
related_name="device_sessions",
)
is_active = models.BooleanField(default=True)
user_agent = models.CharField(max_length=255, null=True, blank=True)
ip_address = models.GenericIPAddressField(null=True, blank=True)
start_time = models.DateTimeField(auto_now_add=True)
end_time = models.DateTimeField(null=True, blank=True)
class Meta:
db_table = "device_sessions"
verbose_name = "Device Session"
verbose_name_plural = "Device Sessions"

View File

@@ -213,7 +213,6 @@ class Account(TimeAuditModel):
("google", "Google"),
("github", "Github"),
("gitlab", "GitLab"),
("firebase", "Firebase"),
)
id = models.UUIDField(
@@ -230,8 +229,7 @@ class Account(TimeAuditModel):
provider = models.CharField(
choices=PROVIDER_CHOICES,
)
device_token = models.TextField(blank=True, null=True)
access_token = models.TextField(blank=True, null=True)
access_token = models.TextField()
access_token_expired_at = models.DateTimeField(null=True)
refresh_token = models.TextField(null=True, blank=True)
refresh_token_expired_at = models.DateTimeField(null=True)