# Generated by Django 5.2.12 on 2026-03-11 11:01 import django.db.models.deletion import uuid from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ("clients", "0001_initial"), ("workspaces", "0001_initial"), migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name="Project", fields=[ ( "id", models.UUIDField( default=uuid.uuid7, primary_key=True, serialize=False ), ), ("created_at", models.DateTimeField(auto_now_add=True)), ("updated_at", models.DateTimeField(auto_now=True)), ("deleted_at", models.DateTimeField(blank=True, null=True)), ("is_deleted", models.BooleanField(default=False)), ("is_active", models.BooleanField(default=False)), ("name", models.CharField(max_length=255)), ("description", models.TextField(blank=True)), ("is_archived", models.BooleanField(default=False)), ("color", models.CharField(blank=True, max_length=7)), ( "client", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="projects", to="clients.client", ), ), ( "created_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="created_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ( "updated_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="updated_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ( "workspace", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="projects", to="workspaces.workspace", ), ), ], options={ "db_table": "project", "ordering": ("-updated_at", "-created_at"), }, ), migrations.CreateModel( name="ProjectMembership", fields=[ ( "id", models.UUIDField( default=uuid.uuid7, primary_key=True, serialize=False ), ), ("created_at", models.DateTimeField(auto_now_add=True)), ("updated_at", models.DateTimeField(auto_now=True)), ("deleted_at", models.DateTimeField(blank=True, null=True)), ("is_deleted", models.BooleanField(default=False)), ( "role", models.CharField( choices=[("manager", "Manager"), ("member", "Member")], default="member", max_length=20, ), ), ("is_active", models.BooleanField(default=True)), ( "created_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="created_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ( "project", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="memberships", to="projects.project", ), ), ( "updated_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="updated_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="project_memberships", to=settings.AUTH_USER_MODEL, ), ), ], options={ "db_table": "project_membership", "ordering": ("-created_at",), }, ), migrations.CreateModel( name="ProjectRate", fields=[ ( "id", models.UUIDField( default=uuid.uuid7, primary_key=True, serialize=False ), ), ("created_at", models.DateTimeField(auto_now_add=True)), ("updated_at", models.DateTimeField(auto_now=True)), ("deleted_at", models.DateTimeField(blank=True, null=True)), ("is_deleted", models.BooleanField(default=False)), ("hourly_rate", models.DecimalField(decimal_places=2, max_digits=10)), ("currency", models.CharField(default="USD", max_length=3)), ("effective_from", models.DateTimeField()), ("is_active", models.BooleanField(default=True)), ( "created_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="created_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ( "project", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="rates", to="projects.project", ), ), ( "updated_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="updated_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ], options={ "db_table": "project_rate", "ordering": ("-effective_from",), }, ), migrations.CreateModel( name="ProjectUserRate", fields=[ ( "id", models.UUIDField( default=uuid.uuid7, primary_key=True, serialize=False ), ), ("created_at", models.DateTimeField(auto_now_add=True)), ("updated_at", models.DateTimeField(auto_now=True)), ("deleted_at", models.DateTimeField(blank=True, null=True)), ("is_deleted", models.BooleanField(default=False)), ("hourly_rate", models.DecimalField(decimal_places=2, max_digits=10)), ("currency", models.CharField(default="USD", max_length=3)), ("effective_from", models.DateTimeField()), ("is_active", models.BooleanField(default=True)), ( "created_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="created_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ( "project", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="user_rates", to="projects.project", ), ), ( "updated_by", models.ForeignKey( blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name="updated_%(app_label)s_%(class)s_set", to=settings.AUTH_USER_MODEL, ), ), ( "user", models.ForeignKey( on_delete=django.db.models.deletion.CASCADE, related_name="project_rates", to=settings.AUTH_USER_MODEL, ), ), ], options={ "db_table": "project_user_rate", "ordering": ("-effective_from",), }, ), migrations.AddIndex( model_name="project", index=models.Index(fields=["workspace"], name="project_workspace_idx"), ), migrations.AddConstraint( model_name="project", constraint=models.UniqueConstraint( condition=models.Q(("is_deleted", False)), fields=("workspace", "name"), name="unique_project_name_per_workspace", ), ), migrations.AddIndex( model_name="projectmembership", index=models.Index( fields=["project"], name="project_membership_project_idx" ), ), migrations.AddIndex( model_name="projectmembership", index=models.Index(fields=["user"], name="project_membership_user_idx"), ), migrations.AddConstraint( model_name="projectmembership", constraint=models.UniqueConstraint( condition=models.Q(("is_deleted", False)), fields=("project", "user"), name="unique_project_membership", ), ), migrations.AddIndex( model_name="projectrate", index=models.Index(fields=["project"], name="project_rate_project_idx"), ), migrations.AddIndex( model_name="projectuserrate", index=models.Index(fields=["project"], name="pur_project_idx"), ), migrations.AddIndex( model_name="projectuserrate", index=models.Index(fields=["user"], name="pur_user_idx"), ), migrations.AddConstraint( model_name="projectuserrate", constraint=models.UniqueConstraint( condition=models.Q(("is_deleted", False)), fields=("project", "user", "effective_from"), name="unique_project_user_rate_time", ), ), ]