Skip to content

Commit 2d36783

Browse files
GitHKAndrei Neagu
andauthored
✨adding db layer that support folders (#5983)
Co-authored-by: Andrei Neagu <[email protected]>
1 parent ef70a5c commit 2d36783

File tree

7 files changed

+3095
-4
lines changed

7 files changed

+3095
-4
lines changed
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
"""added folders tables
2+
3+
Revision ID: 21699ee569a7
4+
Revises: 056ed0eb1ba6
5+
Create Date: 2024-07-30 13:38:57.694754+00:00
6+
7+
"""
8+
import sqlalchemy as sa
9+
from alembic import op
10+
11+
# revision identifiers, used by Alembic.
12+
revision = "21699ee569a7"
13+
down_revision = "056ed0eb1ba6"
14+
branch_labels = None
15+
depends_on = None
16+
17+
18+
def upgrade():
19+
# ### commands auto generated by Alembic - please adjust! ###
20+
op.create_table(
21+
"folders",
22+
sa.Column("id", sa.BigInteger(), autoincrement=True, nullable=False),
23+
sa.Column("name", sa.String(), nullable=False),
24+
sa.Column("description", sa.String(), server_default="", nullable=False),
25+
sa.Column("created_by", sa.BigInteger(), nullable=True),
26+
sa.Column(
27+
"created",
28+
sa.DateTime(timezone=True),
29+
server_default=sa.text("now()"),
30+
nullable=False,
31+
),
32+
sa.Column(
33+
"modified",
34+
sa.DateTime(timezone=True),
35+
server_default=sa.text("now()"),
36+
nullable=False,
37+
),
38+
sa.ForeignKeyConstraint(
39+
["created_by"],
40+
["groups.gid"],
41+
name="fk_folders_to_groups_gid",
42+
ondelete="SET NULL",
43+
),
44+
sa.PrimaryKeyConstraint("id"),
45+
)
46+
op.create_table(
47+
"folders_access_rights",
48+
sa.Column("folder_id", sa.BigInteger(), nullable=False),
49+
sa.Column("gid", sa.BigInteger(), nullable=False),
50+
sa.Column("traversal_parent_id", sa.BigInteger(), nullable=True),
51+
sa.Column("original_parent_id", sa.BigInteger(), nullable=True),
52+
sa.Column("read", sa.Boolean(), nullable=False),
53+
sa.Column("write", sa.Boolean(), nullable=False),
54+
sa.Column("delete", sa.Boolean(), nullable=False),
55+
sa.Column(
56+
"created",
57+
sa.DateTime(timezone=True),
58+
server_default=sa.text("now()"),
59+
nullable=False,
60+
),
61+
sa.Column(
62+
"modified",
63+
sa.DateTime(timezone=True),
64+
server_default=sa.text("now()"),
65+
nullable=False,
66+
),
67+
sa.ForeignKeyConstraint(
68+
["folder_id"],
69+
["folders.id"],
70+
name="fk_folders_access_rights_to_folders_id",
71+
onupdate="CASCADE",
72+
ondelete="CASCADE",
73+
),
74+
sa.ForeignKeyConstraint(
75+
["gid"],
76+
["groups.gid"],
77+
name="fk_folders_access_rights_to_groups_gid",
78+
onupdate="CASCADE",
79+
ondelete="CASCADE",
80+
),
81+
sa.ForeignKeyConstraint(
82+
["original_parent_id"],
83+
["folders.id"],
84+
name="fk_folders_to_folders_id_via_original_parent_id",
85+
ondelete="SET NULL",
86+
),
87+
sa.ForeignKeyConstraint(
88+
["traversal_parent_id"],
89+
["folders.id"],
90+
name="fk_folders_to_folders_id_via_traversal_parent_id",
91+
ondelete="SET NULL",
92+
),
93+
sa.PrimaryKeyConstraint("folder_id", "gid", name="folders_access_rights_pk"),
94+
)
95+
op.create_table(
96+
"folders_to_projects",
97+
sa.Column("folder_id", sa.BigInteger(), nullable=False),
98+
sa.Column("project_uuid", sa.String(), nullable=False),
99+
sa.Column(
100+
"created",
101+
sa.DateTime(timezone=True),
102+
server_default=sa.text("now()"),
103+
nullable=False,
104+
),
105+
sa.Column(
106+
"modified",
107+
sa.DateTime(timezone=True),
108+
server_default=sa.text("now()"),
109+
nullable=False,
110+
),
111+
sa.ForeignKeyConstraint(
112+
["folder_id"],
113+
["folders.id"],
114+
name="fk_folders_to_projects_to_folders_id",
115+
onupdate="CASCADE",
116+
ondelete="CASCADE",
117+
),
118+
sa.ForeignKeyConstraint(
119+
["project_uuid"],
120+
["projects.uuid"],
121+
name="fk_folders_to_projects_to_projects_uuid",
122+
onupdate="CASCADE",
123+
ondelete="CASCADE",
124+
),
125+
sa.PrimaryKeyConstraint(
126+
"folder_id", "project_uuid", name="projects_to_folder_pk"
127+
),
128+
)
129+
# ### end Alembic commands ###
130+
131+
132+
def downgrade():
133+
# ### commands auto generated by Alembic - please adjust! ###
134+
op.drop_table("folders_to_projects")
135+
op.drop_table("folders_access_rights")
136+
op.drop_table("folders")
137+
# ### end Alembic commands ###
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
import sqlalchemy as sa
2+
3+
from ._common import (
4+
column_created_datetime,
5+
column_modified_datetime,
6+
register_modified_datetime_auto_update_trigger,
7+
)
8+
from .base import metadata
9+
10+
folders = sa.Table(
11+
"folders",
12+
metadata,
13+
sa.Column(
14+
"id",
15+
sa.BigInteger,
16+
nullable=False,
17+
autoincrement=True,
18+
primary_key=True,
19+
doc="Primary key",
20+
),
21+
sa.Column(
22+
"name",
23+
sa.String,
24+
nullable=False,
25+
doc="name of the folder",
26+
),
27+
sa.Column(
28+
"description",
29+
sa.String,
30+
nullable=False,
31+
server_default="",
32+
doc="user provided description for the folder",
33+
),
34+
sa.Column(
35+
"created_by",
36+
sa.BigInteger,
37+
sa.ForeignKey(
38+
"groups.gid",
39+
name="fk_folders_to_groups_gid",
40+
ondelete="SET NULL",
41+
),
42+
nullable=True,
43+
doc="traces who created the folder",
44+
),
45+
column_created_datetime(timezone=True),
46+
column_modified_datetime(timezone=True),
47+
)
48+
49+
50+
register_modified_datetime_auto_update_trigger(folders)
51+
52+
folders_access_rights = sa.Table(
53+
"folders_access_rights",
54+
metadata,
55+
sa.Column(
56+
"folder_id",
57+
sa.BigInteger,
58+
sa.ForeignKey(
59+
"folders.id",
60+
name="fk_folders_access_rights_to_folders_id",
61+
onupdate="CASCADE",
62+
ondelete="CASCADE",
63+
),
64+
),
65+
sa.Column(
66+
"gid",
67+
sa.BigInteger,
68+
sa.ForeignKey(
69+
"groups.gid",
70+
name="fk_folders_access_rights_to_groups_gid",
71+
onupdate="CASCADE",
72+
ondelete="CASCADE",
73+
),
74+
),
75+
sa.Column(
76+
"traversal_parent_id",
77+
sa.BigInteger,
78+
sa.ForeignKey(
79+
"folders.id",
80+
name="fk_folders_to_folders_id_via_traversal_parent_id",
81+
ondelete="SET NULL",
82+
),
83+
doc=(
84+
"used for listing the contes of the folders, "
85+
"can be changed by the user by moving the folder"
86+
),
87+
),
88+
sa.Column(
89+
"original_parent_id",
90+
sa.BigInteger,
91+
sa.ForeignKey(
92+
"folders.id",
93+
name="fk_folders_to_folders_id_via_original_parent_id",
94+
ondelete="SET NULL",
95+
),
96+
doc=(
97+
"initially equal the same as `traversal_parent_id`, "
98+
"keeps track of the original parent, "
99+
"can never be changed once insteted"
100+
),
101+
),
102+
sa.Column(
103+
"read",
104+
sa.Boolean(),
105+
nullable=False,
106+
doc=(
107+
"if True can: "
108+
"view folders inside current folder "
109+
"view projects inside current folder"
110+
),
111+
),
112+
sa.Column(
113+
"write",
114+
sa.Boolean(),
115+
nullable=False,
116+
doc=(
117+
"if True can: "
118+
"create folder inside current folder, "
119+
"add project to folder"
120+
),
121+
),
122+
sa.Column(
123+
"delete",
124+
sa.Boolean(),
125+
nullable=False,
126+
doc=(
127+
"if True can: "
128+
"share folder, "
129+
"rename folder, "
130+
"edit folder description, "
131+
"delete folder, "
132+
"delete project form folder"
133+
),
134+
),
135+
column_created_datetime(timezone=True),
136+
column_modified_datetime(timezone=True),
137+
sa.PrimaryKeyConstraint("folder_id", "gid", name="folders_access_rights_pk"),
138+
)
139+
140+
register_modified_datetime_auto_update_trigger(folders_access_rights)
141+
142+
143+
folders_to_projects = sa.Table(
144+
"folders_to_projects",
145+
metadata,
146+
sa.Column(
147+
"folder_id",
148+
sa.BigInteger,
149+
sa.ForeignKey(
150+
"folders.id",
151+
name="fk_folders_to_projects_to_folders_id",
152+
onupdate="CASCADE",
153+
ondelete="CASCADE",
154+
),
155+
),
156+
sa.Column(
157+
"project_uuid",
158+
sa.String,
159+
sa.ForeignKey(
160+
"projects.uuid",
161+
name="fk_folders_to_projects_to_projects_uuid",
162+
onupdate="CASCADE",
163+
ondelete="CASCADE",
164+
),
165+
),
166+
column_created_datetime(timezone=True),
167+
column_modified_datetime(timezone=True),
168+
sa.PrimaryKeyConstraint("folder_id", "project_uuid", name="projects_to_folder_pk"),
169+
)
170+
171+
register_modified_datetime_auto_update_trigger(folders_to_projects)

0 commit comments

Comments
 (0)