feat: workspace home preference model (#6300)
* feat: workspace home preference model * chore: changed page title to textfield * chore: add sort order * chore: added null value in sticky title --------- Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
This commit is contained in:
parent
c1407daa47
commit
e4f9d027fe
4 changed files with 164 additions and 3 deletions
|
|
@ -0,0 +1,120 @@
|
||||||
|
# Generated by Django 4.2.17 on 2025-01-02 07:47
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("db", "0088_sticky_sort_order_workspaceuserlink"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="WorkspaceHomePreference",
|
||||||
|
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,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("key", models.CharField(max_length=255)),
|
||||||
|
("is_enabled", models.BooleanField(default=True)),
|
||||||
|
("config", models.JSONField(default=dict)),
|
||||||
|
(
|
||||||
|
"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="workspace_user_home_preferences",
|
||||||
|
to=settings.AUTH_USER_MODEL,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"workspace",
|
||||||
|
models.ForeignKey(
|
||||||
|
on_delete=django.db.models.deletion.CASCADE,
|
||||||
|
related_name="workspace_user_home_preferences",
|
||||||
|
to="db.workspace",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
"verbose_name": "Workspace Home Preference",
|
||||||
|
"verbose_name_plural": "Workspace Home Preferences",
|
||||||
|
"db_table": "workspace_home_preferences",
|
||||||
|
"ordering": ("-created_at",),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddConstraint(
|
||||||
|
model_name="workspacehomepreference",
|
||||||
|
constraint=models.UniqueConstraint(
|
||||||
|
condition=models.Q(("deleted_at__isnull", True)),
|
||||||
|
fields=("workspace", "user", "key"),
|
||||||
|
name="workspace_user_home_preferences_unique_workspace_user_key_when_deleted_at_null",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.AlterUniqueTogether(
|
||||||
|
name="workspacehomepreference",
|
||||||
|
unique_together={("workspace", "user", "key", "deleted_at")},
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="page",
|
||||||
|
name="name",
|
||||||
|
field=models.TextField(blank=True),
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name="sticky",
|
||||||
|
name="name",
|
||||||
|
field=models.TextField(blank=True, null=True),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='workspacehomepreference',
|
||||||
|
name='sort_order',
|
||||||
|
field=models.PositiveIntegerField(default=65535),
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
@ -20,7 +20,7 @@ class Page(BaseModel):
|
||||||
workspace = models.ForeignKey(
|
workspace = models.ForeignKey(
|
||||||
"db.Workspace", on_delete=models.CASCADE, related_name="pages"
|
"db.Workspace", on_delete=models.CASCADE, related_name="pages"
|
||||||
)
|
)
|
||||||
name = models.CharField(max_length=255, blank=True)
|
name = models.TextField(blank=True)
|
||||||
description = models.JSONField(default=dict, blank=True)
|
description = models.JSONField(default=dict, blank=True)
|
||||||
description_binary = models.BinaryField(null=True)
|
description_binary = models.BinaryField(null=True)
|
||||||
description_html = models.TextField(blank=True, default="<p></p>")
|
description_html = models.TextField(blank=True, default="<p></p>")
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ from .base import BaseModel
|
||||||
|
|
||||||
|
|
||||||
class Sticky(BaseModel):
|
class Sticky(BaseModel):
|
||||||
name = models.TextField()
|
name = models.TextField(null=True, blank=True)
|
||||||
|
|
||||||
description = models.JSONField(blank=True, default=dict)
|
description = models.JSONField(blank=True, default=dict)
|
||||||
description_html = models.TextField(blank=True, default="<p></p>")
|
description_html = models.TextField(blank=True, default="<p></p>")
|
||||||
|
|
|
||||||
|
|
@ -342,3 +342,44 @@ class WorkspaceUserLink(WorkspaceBaseModel):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.workspace.id} {self.url}"
|
return f"{self.workspace.id} {self.url}"
|
||||||
|
|
||||||
|
|
||||||
|
class WorkspaceHomePreference(BaseModel):
|
||||||
|
class HomeWidgetKeys(models.TextChoices):
|
||||||
|
QUICK_LINKS = "quick_links", "Quick Links"
|
||||||
|
RECENTS = "recents", "Recents"
|
||||||
|
MY_STICKIES = "my_stickies", "My Stickies"
|
||||||
|
NEW_AT_PLANE = "new_at_plane", "New at Plane"
|
||||||
|
QUICK_TUTORIAL = "quick_tutorial", "Quick Tutorial"
|
||||||
|
|
||||||
|
workspace = models.ForeignKey(
|
||||||
|
"db.Workspace",
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name="workspace_user_home_preferences",
|
||||||
|
)
|
||||||
|
user = models.ForeignKey(
|
||||||
|
settings.AUTH_USER_MODEL,
|
||||||
|
on_delete=models.CASCADE,
|
||||||
|
related_name="workspace_user_home_preferences",
|
||||||
|
)
|
||||||
|
key = models.CharField(max_length=255)
|
||||||
|
is_enabled = models.BooleanField(default=True)
|
||||||
|
config = models.JSONField(default=dict)
|
||||||
|
sort_order = models.PositiveIntegerField(default=65535)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
unique_together = ["workspace", "user", "key", "deleted_at"]
|
||||||
|
constraints = [
|
||||||
|
models.UniqueConstraint(
|
||||||
|
fields=["workspace", "user", "key"],
|
||||||
|
condition=models.Q(deleted_at__isnull=True),
|
||||||
|
name="workspace_user_home_preferences_unique_workspace_user_key_when_deleted_at_null",
|
||||||
|
)
|
||||||
|
]
|
||||||
|
verbose_name = "Workspace Home Preference"
|
||||||
|
verbose_name_plural = "Workspace Home Preferences"
|
||||||
|
db_table = "workspace_home_preferences"
|
||||||
|
ordering = ("-created_at",)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return f"{self.workspace.name} {self.user.email} {self.key}"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue