bb-plane-fork/apiserver/plane/db/migrations/0065_auto_20240415_0937.py
Nikhil 85b54d2490
dev: migrations (#4489)
* dev: estimates and pages migrations

* dev: favorite and user migrations

* chore: workspace base model

* chore: workspace user properties

* chore: removed unused variables

* chore: favorite view set changes

* chore: default sequence id

---------

Co-authored-by: NarayanBavisetti <narayan3119@gmail.com>
2024-05-17 15:59:55 +05:30

462 lines
16 KiB
Python

# Generated by Django 4.2.10 on 2024-04-04 08:47
import uuid
import django.db.models.deletion
import django.utils.timezone
from django.conf import settings
from django.db import migrations, models
import plane.db.models.user
def migrate_user_profile(apps, schema_editor):
Profile = apps.get_model("db", "Profile")
User = apps.get_model("db", "User")
Profile.objects.bulk_create(
[
Profile(
user_id=user.get("id"),
theme=user.get("theme"),
is_tour_completed=user.get("is_tour_completed"),
use_case=user.get("use_case"),
is_onboarded=user.get("is_onboarded"),
last_workspace_id=user.get("last_workspace_id"),
billing_address_country=user.get("billing_address_country"),
billing_address=user.get("billing_address"),
has_billing_address=user.get("has_billing_address"),
)
for user in User.objects.values(
"id",
"theme",
"is_tour_completed",
"onboarding_step",
"use_case",
"role",
"is_onboarded",
"last_workspace_id",
"billing_address_country",
"billing_address",
"has_billing_address",
)
],
batch_size=1000,
)
def user_favorite_migration(apps, schema_editor):
# Import the models
CycleFavorite = apps.get_model("db", "CycleFavorite")
ModuleFavorite = apps.get_model("db", "ModuleFavorite")
ProjectFavorite = apps.get_model("db", "ProjectFavorite")
PageFavorite = apps.get_model("db", "PageFavorite")
IssueViewFavorite = apps.get_model("db", "IssueViewFavorite")
UserFavorite = apps.get_model("db", "UserFavorite")
# List of source models
source_models = [
CycleFavorite,
ModuleFavorite,
ProjectFavorite,
PageFavorite,
IssueViewFavorite,
]
entity_mapper = {
"CycleFavorite": "cycle",
"ModuleFavorite": "module",
"ProjectFavorite": "project",
"PageFavorite": "page",
"IssueViewFavorite": "view",
}
for source_model in source_models:
entity_type = entity_mapper[source_model.__name__]
UserFavorite.objects.bulk_create(
[
UserFavorite(
user_id=obj.user_id,
entity_type=entity_type,
entity_identifier=str(getattr(obj, entity_type).id),
project_id=obj.project_id,
workspace_id=obj.workspace_id,
created_by_id=obj.created_by_id,
updated_by_id=obj.updated_by_id,
)
for obj in source_model.objects.all().iterator()
],
batch_size=1000,
)
class Migration(migrations.Migration):
dependencies = [
("db", "0064_auto_20240409_1134"),
]
operations = [
migrations.AlterField(
model_name="user",
name="avatar",
field=models.TextField(blank=True),
),
migrations.CreateModel(
name="Session",
fields=[
(
"session_data",
models.TextField(verbose_name="session data"),
),
(
"expire_date",
models.DateTimeField(
db_index=True, verbose_name="expire date"
),
),
(
"device_info",
models.JSONField(blank=True, default=None, null=True),
),
(
"session_key",
models.CharField(
max_length=128, primary_key=True, serialize=False
),
),
("user_id", models.CharField(max_length=50, null=True)),
],
options={
"verbose_name": "session",
"verbose_name_plural": "sessions",
"db_table": "sessions",
"abstract": False,
},
),
migrations.CreateModel(
name="Profile",
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"
),
),
(
"id",
models.UUIDField(
db_index=True,
default=uuid.uuid4,
editable=False,
primary_key=True,
serialize=False,
unique=True,
),
),
("theme", models.JSONField(default=dict)),
("is_tour_completed", models.BooleanField(default=False)),
(
"onboarding_step",
models.JSONField(
default=plane.db.models.user.get_default_onboarding
),
),
("use_case", models.TextField(blank=True, null=True)),
(
"role",
models.CharField(blank=True, max_length=300, null=True),
),
("is_onboarded", models.BooleanField(default=False)),
("last_workspace_id", models.UUIDField(null=True)),
(
"billing_address_country",
models.CharField(default="INDIA", max_length=255),
),
("billing_address", models.JSONField(null=True)),
("has_billing_address", models.BooleanField(default=False)),
("company_name", models.CharField(blank=True, max_length=255)),
(
"user",
models.OneToOneField(
on_delete=django.db.models.deletion.CASCADE,
related_name="profile",
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"verbose_name": "Profile",
"verbose_name_plural": "Profiles",
"db_table": "profiles",
"ordering": ("-created_at",),
},
),
migrations.CreateModel(
name="Account",
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"
),
),
(
"id",
models.UUIDField(
db_index=True,
default=uuid.uuid4,
editable=False,
primary_key=True,
serialize=False,
unique=True,
),
),
("provider_account_id", models.CharField(max_length=255)),
(
"provider",
models.CharField(
choices=[("google", "Google"), ("github", "Github")]
),
),
("access_token", models.TextField()),
("access_token_expired_at", models.DateTimeField(null=True)),
("refresh_token", models.TextField(blank=True, null=True)),
("refresh_token_expired_at", models.DateTimeField(null=True)),
(
"last_connected_at",
models.DateTimeField(default=django.utils.timezone.now),
),
("metadata", models.JSONField(default=dict)),
(
"user",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="accounts",
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"verbose_name": "Account",
"verbose_name_plural": "Accounts",
"db_table": "accounts",
"ordering": ("-created_at",),
"unique_together": {("provider", "provider_account_id")},
},
),
migrations.RunPython(migrate_user_profile),
migrations.RemoveField(
model_name="user",
name="billing_address",
),
migrations.RemoveField(
model_name="user",
name="billing_address_country",
),
migrations.RemoveField(
model_name="user",
name="has_billing_address",
),
migrations.RemoveField(
model_name="user",
name="is_onboarded",
),
migrations.RemoveField(
model_name="user",
name="is_tour_completed",
),
migrations.RemoveField(
model_name="user",
name="last_workspace_id",
),
migrations.RemoveField(
model_name="user",
name="my_issues_prop",
),
migrations.RemoveField(
model_name="user",
name="onboarding_step",
),
migrations.RemoveField(
model_name="user",
name="role",
),
migrations.RemoveField(
model_name="user",
name="theme",
),
migrations.RemoveField(
model_name="user",
name="use_case",
),
migrations.AddField(
model_name="globalview",
name="logo_props",
field=models.JSONField(default=dict),
),
# Pages
migrations.AddField(
model_name="page",
name="logo_props",
field=models.JSONField(default=dict),
),
migrations.AddField(
model_name="page",
name="description_binary",
field=models.BinaryField(null=True),
),
migrations.AlterField(
model_name="page",
name="name",
field=models.CharField(blank=True, max_length=255),
),
# Estimates
migrations.AddField(
model_name="estimate",
name="type",
field=models.CharField(default="Categories", max_length=255),
),
migrations.AlterField(
model_name="estimatepoint",
name="key",
field=models.IntegerField(
default=0,
validators=[
django.core.validators.MinValueValidator(0),
django.core.validators.MaxValueValidator(12),
],
),
),
migrations.AlterField(
model_name="issue",
name="estimate_point",
field=models.IntegerField(
blank=True,
null=True,
validators=[
django.core.validators.MinValueValidator(0),
django.core.validators.MaxValueValidator(12),
],
),
),
# workspace user properties
migrations.AlterModelTable(
name="workspaceuserproperties",
table="workspace_user_properties",
),
# Favorites
migrations.CreateModel(
name="UserFavorite",
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"
),
),
(
"id",
models.UUIDField(
db_index=True,
default=uuid.uuid4,
editable=False,
primary_key=True,
serialize=False,
unique=True,
),
),
("entity_type", models.CharField(max_length=100)),
("entity_identifier", models.UUIDField(blank=True, null=True)),
(
"name",
models.CharField(blank=True, max_length=255, null=True),
),
("is_folder", models.BooleanField(default=False)),
("sequence", models.IntegerField(default=65535)),
(
"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",
),
),
(
"parent",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="parent_folder",
to="db.userfavorite",
),
),
(
"project",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="project_%(class)s",
to="db.project",
),
),
(
"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="favorites",
to=settings.AUTH_USER_MODEL,
),
),
(
"workspace",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="workspace_%(class)s",
to="db.workspace",
),
),
],
options={
"verbose_name": "User Favorite",
"verbose_name_plural": "User Favorites",
"db_table": "user_favorites",
"ordering": ("-created_at",),
"unique_together": {
("entity_type", "user", "entity_identifier")
},
},
),
migrations.RunPython(user_favorite_migration),
]