ФУНКЦИИ - МЕЖПРОЕКТНАЯ КОММУНИКАЦИЯ: self-service workspace invite approval

This commit is contained in:
DCCONSTRUCTIONS
2026-05-09 22:57:07 +03:00
parent 42bc0fb0e6
commit 0be8f01283
22 changed files with 707 additions and 77 deletions
@@ -0,0 +1,36 @@
# Generated by NODE.DC platform integration.
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("db", "0138_external_identity_link_unique_user"),
]
operations = [
migrations.AddField(
model_name="workspacememberinvite",
name="nodedc_approval_status",
field=models.CharField(
choices=[
("not_required", "Not required"),
("pending", "Pending NODE.DC approval"),
("approved", "Approved by NODE.DC"),
("rejected", "Rejected by NODE.DC"),
],
default="not_required",
max_length=32,
),
),
migrations.AddField(
model_name="workspacememberinvite",
name="nodedc_approval_request_id",
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AddField(
model_name="workspacememberinvite",
name="nodedc_approval_decided_at",
field=models.DateTimeField(blank=True, null=True),
),
]
@@ -0,0 +1,16 @@
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("db", "0139_workspacememberinvite_nodedc_approval"),
]
operations = [
migrations.AddField(
model_name="workspacememberinvite",
name="nodedc_platform_invite_link",
field=models.URLField(blank=True, max_length=1000, null=True),
),
]
@@ -238,6 +238,17 @@ class WorkspaceMember(BaseModel):
class WorkspaceMemberInvite(BaseModel):
NODEDC_APPROVAL_NOT_REQUIRED = "not_required"
NODEDC_APPROVAL_PENDING = "pending"
NODEDC_APPROVAL_APPROVED = "approved"
NODEDC_APPROVAL_REJECTED = "rejected"
NODEDC_APPROVAL_CHOICES = (
(NODEDC_APPROVAL_NOT_REQUIRED, "Not required"),
(NODEDC_APPROVAL_PENDING, "Pending NODE.DC approval"),
(NODEDC_APPROVAL_APPROVED, "Approved by NODE.DC"),
(NODEDC_APPROVAL_REJECTED, "Rejected by NODE.DC"),
)
workspace = models.ForeignKey("db.Workspace", on_delete=models.CASCADE, related_name="workspace_member_invite")
email = models.CharField(max_length=255)
accepted = models.BooleanField(default=False)
@@ -245,6 +256,14 @@ class WorkspaceMemberInvite(BaseModel):
message = models.TextField(null=True)
responded_at = models.DateTimeField(null=True)
role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, default=5)
nodedc_approval_status = models.CharField(
max_length=32,
choices=NODEDC_APPROVAL_CHOICES,
default=NODEDC_APPROVAL_NOT_REQUIRED,
)
nodedc_approval_request_id = models.CharField(max_length=255, null=True, blank=True)
nodedc_approval_decided_at = models.DateTimeField(null=True, blank=True)
nodedc_platform_invite_link = models.URLField(max_length=1000, null=True, blank=True)
class Meta:
unique_together = ["email", "workspace", "deleted_at"]