basyx commited on
Commit
2bb7820
·
verified ·
1 Parent(s): 8629a13

sync: align runtime source with GitHub main

Browse files
Files changed (1) hide show
  1. app/projects/models/collaboration.py +103 -46
app/projects/models/collaboration.py CHANGED
@@ -16,30 +16,43 @@ from sqlalchemy.orm import Mapped, mapped_column
16
 
17
  from app.security.models import Base, utcnow
18
 
 
19
  class Team(Base):
20
  __tablename__ = "teams"
21
- __table_args__ = (
22
- Index("ix_teams_workspace_id", "workspace_id"),
23
- )
24
 
25
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
26
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
 
 
27
  name: Mapped[str] = mapped_column(String(255), nullable=False)
28
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
29
- updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow, onupdate=utcnow)
 
 
 
 
 
30
 
31
  class TeamMember(Base):
32
  __tablename__ = "team_members"
33
- __table_args__ = (
34
- UniqueConstraint("team_id", "user_id", name="uq_team_member"),
35
- )
36
 
37
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
38
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
39
- team_id: Mapped[str] = mapped_column(String(36), ForeignKey("teams.id", ondelete="CASCADE"), nullable=False)
40
- user_id: Mapped[str] = mapped_column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
 
 
 
 
 
 
41
  role: Mapped[str] = mapped_column(String(50), nullable=False)
42
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
 
 
 
43
 
44
  class ProjectCollaborator(Base):
45
  __tablename__ = "project_collaborators"
@@ -49,11 +62,20 @@ class ProjectCollaborator(Base):
49
  )
50
 
51
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
52
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
53
- project_id: Mapped[str] = mapped_column(String(36), ForeignKey("projects.id", ondelete="CASCADE"), nullable=False)
54
- user_id: Mapped[str] = mapped_column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
 
 
 
 
 
 
55
  role: Mapped[str] = mapped_column(String(50), nullable=False)
56
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
 
 
 
57
 
58
  class CollaborationActivity(Base):
59
  __tablename__ = "collaboration_activities"
@@ -62,62 +84,97 @@ class CollaborationActivity(Base):
62
  )
63
 
64
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
65
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
66
- user_id: Mapped[str] = mapped_column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
 
 
 
 
67
  action: Mapped[str] = mapped_column(String(100), nullable=False)
68
  entity_id: Mapped[str] = mapped_column(String(36), nullable=False)
69
  entity_type: Mapped[str] = mapped_column(String(64), nullable=False)
70
- metadata_json: Mapped[dict[str, object]] = mapped_column("metadata", JSON, nullable=False, default=dict)
71
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
 
 
 
 
 
 
72
  class Invitation(Base):
73
  __tablename__ = "invitations"
74
- __table_args__ = (
75
- Index("ix_invitations_workspace_id", "workspace_id"),
76
- )
77
 
78
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
79
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
 
 
80
  email: Mapped[str] = mapped_column(String(255), nullable=False)
81
  role: Mapped[str] = mapped_column(String(50), nullable=False)
82
  status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending")
83
  token_hash: Mapped[str | None] = mapped_column(String(255), nullable=True)
84
  expires_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
 
 
 
 
 
85
  class ApprovalWorkflow(Base):
86
  __tablename__ = "approval_workflows"
87
- __table_args__ = (
88
- Index("ix_approval_workflows_project_id", "project_id"),
89
- )
90
 
91
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
92
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
93
- project_id: Mapped[str] = mapped_column(String(36), ForeignKey("projects.id", ondelete="CASCADE"), nullable=False)
 
 
 
 
94
  name: Mapped[str] = mapped_column(String(255), nullable=False)
95
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
 
 
 
96
 
97
  class ApprovalRequest(Base):
98
  __tablename__ = "approval_requests"
99
- __table_args__ = (
100
- Index("ix_approval_requests_workflow_id", "workflow_id"),
101
- )
102
 
103
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
104
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
105
- workflow_id: Mapped[str] = mapped_column(String(36), ForeignKey("approval_workflows.id", ondelete="CASCADE"), nullable=False)
106
- project_id: Mapped[str] = mapped_column(String(36), ForeignKey("projects.id", ondelete="CASCADE"), nullable=False)
 
 
 
 
 
 
107
  editor_revision: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
108
  status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending")
109
- created_by: Mapped[str] = mapped_column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
110
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
 
 
 
 
 
111
 
112
  class ReviewComment(Base):
113
  __tablename__ = "review_comments"
114
- __table_args__ = (
115
- Index("ix_review_comments_request_id", "request_id"),
116
- )
117
 
118
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
119
- workspace_id: Mapped[str] = mapped_column(String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False)
120
- request_id: Mapped[str] = mapped_column(String(36), ForeignKey("approval_requests.id", ondelete="CASCADE"), nullable=False)
121
- user_id: Mapped[str] = mapped_column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False)
 
 
 
 
 
 
122
  content: Mapped[str] = mapped_column(String(2000), nullable=False)
123
- created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False, default=utcnow)
 
 
 
16
 
17
  from app.security.models import Base, utcnow
18
 
19
+
20
  class Team(Base):
21
  __tablename__ = "teams"
22
+ __table_args__ = (Index("ix_teams_workspace_id", "workspace_id"),)
 
 
23
 
24
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
25
+ workspace_id: Mapped[str] = mapped_column(
26
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
27
+ )
28
  name: Mapped[str] = mapped_column(String(255), nullable=False)
29
+ created_at: Mapped[datetime] = mapped_column(
30
+ DateTime(timezone=True), nullable=False, default=utcnow
31
+ )
32
+ updated_at: Mapped[datetime] = mapped_column(
33
+ DateTime(timezone=True), nullable=False, default=utcnow, onupdate=utcnow
34
+ )
35
+
36
 
37
  class TeamMember(Base):
38
  __tablename__ = "team_members"
39
+ __table_args__ = (UniqueConstraint("team_id", "user_id", name="uq_team_member"),)
 
 
40
 
41
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
42
+ workspace_id: Mapped[str] = mapped_column(
43
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
44
+ )
45
+ team_id: Mapped[str] = mapped_column(
46
+ String(36), ForeignKey("teams.id", ondelete="CASCADE"), nullable=False
47
+ )
48
+ user_id: Mapped[str] = mapped_column(
49
+ String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False
50
+ )
51
  role: Mapped[str] = mapped_column(String(50), nullable=False)
52
+ created_at: Mapped[datetime] = mapped_column(
53
+ DateTime(timezone=True), nullable=False, default=utcnow
54
+ )
55
+
56
 
57
  class ProjectCollaborator(Base):
58
  __tablename__ = "project_collaborators"
 
62
  )
63
 
64
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
65
+ workspace_id: Mapped[str] = mapped_column(
66
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
67
+ )
68
+ project_id: Mapped[str] = mapped_column(
69
+ String(36), ForeignKey("projects.id", ondelete="CASCADE"), nullable=False
70
+ )
71
+ user_id: Mapped[str] = mapped_column(
72
+ String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False
73
+ )
74
  role: Mapped[str] = mapped_column(String(50), nullable=False)
75
+ created_at: Mapped[datetime] = mapped_column(
76
+ DateTime(timezone=True), nullable=False, default=utcnow
77
+ )
78
+
79
 
80
  class CollaborationActivity(Base):
81
  __tablename__ = "collaboration_activities"
 
84
  )
85
 
86
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
87
+ workspace_id: Mapped[str] = mapped_column(
88
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
89
+ )
90
+ user_id: Mapped[str] = mapped_column(
91
+ String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False
92
+ )
93
  action: Mapped[str] = mapped_column(String(100), nullable=False)
94
  entity_id: Mapped[str] = mapped_column(String(36), nullable=False)
95
  entity_type: Mapped[str] = mapped_column(String(64), nullable=False)
96
+ metadata_json: Mapped[dict[str, object]] = mapped_column(
97
+ "metadata", JSON, nullable=False, default=dict
98
+ )
99
+ created_at: Mapped[datetime] = mapped_column(
100
+ DateTime(timezone=True), nullable=False, default=utcnow
101
+ )
102
+
103
+
104
  class Invitation(Base):
105
  __tablename__ = "invitations"
106
+ __table_args__ = (Index("ix_invitations_workspace_id", "workspace_id"),)
 
 
107
 
108
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
109
+ workspace_id: Mapped[str] = mapped_column(
110
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
111
+ )
112
  email: Mapped[str] = mapped_column(String(255), nullable=False)
113
  role: Mapped[str] = mapped_column(String(50), nullable=False)
114
  status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending")
115
  token_hash: Mapped[str | None] = mapped_column(String(255), nullable=True)
116
  expires_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
117
+ created_at: Mapped[datetime] = mapped_column(
118
+ DateTime(timezone=True), nullable=False, default=utcnow
119
+ )
120
+
121
+
122
  class ApprovalWorkflow(Base):
123
  __tablename__ = "approval_workflows"
124
+ __table_args__ = (Index("ix_approval_workflows_project_id", "project_id"),)
 
 
125
 
126
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
127
+ workspace_id: Mapped[str] = mapped_column(
128
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
129
+ )
130
+ project_id: Mapped[str] = mapped_column(
131
+ String(36), ForeignKey("projects.id", ondelete="CASCADE"), nullable=False
132
+ )
133
  name: Mapped[str] = mapped_column(String(255), nullable=False)
134
+ created_at: Mapped[datetime] = mapped_column(
135
+ DateTime(timezone=True), nullable=False, default=utcnow
136
+ )
137
+
138
 
139
  class ApprovalRequest(Base):
140
  __tablename__ = "approval_requests"
141
+ __table_args__ = (Index("ix_approval_requests_workflow_id", "workflow_id"),)
 
 
142
 
143
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
144
+ workspace_id: Mapped[str] = mapped_column(
145
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
146
+ )
147
+ workflow_id: Mapped[str] = mapped_column(
148
+ String(36), ForeignKey("approval_workflows.id", ondelete="CASCADE"), nullable=False
149
+ )
150
+ project_id: Mapped[str] = mapped_column(
151
+ String(36), ForeignKey("projects.id", ondelete="CASCADE"), nullable=False
152
+ )
153
  editor_revision: Mapped[int] = mapped_column(Integer, nullable=False, default=1)
154
  status: Mapped[str] = mapped_column(String(20), nullable=False, default="pending")
155
+ created_by: Mapped[str] = mapped_column(
156
+ String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False
157
+ )
158
+ created_at: Mapped[datetime] = mapped_column(
159
+ DateTime(timezone=True), nullable=False, default=utcnow
160
+ )
161
+
162
 
163
  class ReviewComment(Base):
164
  __tablename__ = "review_comments"
165
+ __table_args__ = (Index("ix_review_comments_request_id", "request_id"),)
 
 
166
 
167
  id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid4()))
168
+ workspace_id: Mapped[str] = mapped_column(
169
+ String(36), ForeignKey("workspaces.id", ondelete="CASCADE"), nullable=False
170
+ )
171
+ request_id: Mapped[str] = mapped_column(
172
+ String(36), ForeignKey("approval_requests.id", ondelete="CASCADE"), nullable=False
173
+ )
174
+ user_id: Mapped[str] = mapped_column(
175
+ String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False
176
+ )
177
  content: Mapped[str] = mapped_column(String(2000), nullable=False)
178
+ created_at: Mapped[datetime] = mapped_column(
179
+ DateTime(timezone=True), nullable=False, default=utcnow
180
+ )