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:
parent
27d7d91185
commit
0dead39fd1
4 changed files with 239 additions and 18 deletions
|
|
@ -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
|
from django.db import migrations, models
|
||||||
import django.db.models.deletion
|
import django.db.models.deletion
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
dependencies = [
|
dependencies = [
|
||||||
("db", "0082_alter_issue_managers_alter_cycleissue_issue_and_more"),
|
("db", "0082_alter_issue_managers_alter_cycleissue_issue_and_more"),
|
||||||
]
|
]
|
||||||
|
|
||||||
operations = [
|
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(
|
migrations.AddField(
|
||||||
model_name="issuetype",
|
model_name="issuetype",
|
||||||
name="is_epic",
|
name="is_epic",
|
||||||
|
|
@ -663,18 +754,6 @@ class Migration(migrations.Migration):
|
||||||
max_length=255,
|
max_length=255,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
migrations.AlterField(
|
|
||||||
model_name="account",
|
|
||||||
name="provider",
|
|
||||||
field=models.CharField(
|
|
||||||
choices=[
|
|
||||||
("google", "Google"),
|
|
||||||
("github", "Github"),
|
|
||||||
("gitlab", "GitLab"),
|
|
||||||
("firebase", "Firebase"),
|
|
||||||
]
|
|
||||||
),
|
|
||||||
),
|
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name="issuerelation",
|
model_name="issuerelation",
|
||||||
name="relation_type",
|
name="relation_type",
|
||||||
|
|
@ -706,4 +785,90 @@ class Migration(migrations.Migration):
|
||||||
to="db.project",
|
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",
|
||||||
|
},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
@ -5,7 +5,13 @@ from .base import BaseModel
|
||||||
from .cycle import Cycle, CycleIssue, CycleUserProperties
|
from .cycle import Cycle, CycleIssue, CycleUserProperties
|
||||||
from .dashboard import Dashboard, DashboardWidget, Widget
|
from .dashboard import Dashboard, DashboardWidget, Widget
|
||||||
from .deploy_board import DeployBoard
|
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 .estimate import Estimate, EstimatePoint
|
||||||
from .exporter import ExporterHistory
|
from .exporter import ExporterHistory
|
||||||
from .importer import Importer
|
from .importer import Importer
|
||||||
|
|
@ -109,4 +115,6 @@ from .issue_type import IssueType
|
||||||
|
|
||||||
from .recent_visit import UserRecentVisit
|
from .recent_visit import UserRecentVisit
|
||||||
|
|
||||||
from .label import Label
|
from .label import Label
|
||||||
|
|
||||||
|
from .device import Device, DeviceSession
|
||||||
|
|
|
||||||
50
apiserver/plane/db/models/device.py
Normal file
50
apiserver/plane/db/models/device.py
Normal 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"
|
||||||
|
|
@ -213,7 +213,6 @@ class Account(TimeAuditModel):
|
||||||
("google", "Google"),
|
("google", "Google"),
|
||||||
("github", "Github"),
|
("github", "Github"),
|
||||||
("gitlab", "GitLab"),
|
("gitlab", "GitLab"),
|
||||||
("firebase", "Firebase"),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
id = models.UUIDField(
|
id = models.UUIDField(
|
||||||
|
|
@ -230,8 +229,7 @@ class Account(TimeAuditModel):
|
||||||
provider = models.CharField(
|
provider = models.CharField(
|
||||||
choices=PROVIDER_CHOICES,
|
choices=PROVIDER_CHOICES,
|
||||||
)
|
)
|
||||||
device_token = models.TextField(blank=True, null=True)
|
access_token = models.TextField()
|
||||||
access_token = models.TextField(blank=True, null=True)
|
|
||||||
access_token_expired_at = models.DateTimeField(null=True)
|
access_token_expired_at = models.DateTimeField(null=True)
|
||||||
refresh_token = models.TextField(null=True, blank=True)
|
refresh_token = models.TextField(null=True, blank=True)
|
||||||
refresh_token_expired_at = models.DateTimeField(null=True)
|
refresh_token_expired_at = models.DateTimeField(null=True)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue