Skip to content

Commit 2fb1b11

Browse files
committed
feat: Create a composite unique key to remove duplicate data
1 parent 5fdb6dc commit 2fb1b11

6 files changed

+60
-10
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Generated by Django 5.2.7 on 2025-10-16 03:21
2+
3+
from django.db import migrations
4+
from django.db.models.functions import RowNumber
5+
6+
7+
def remove_duplicates(apps, schema_editor):
8+
from django.db.models import Window, F
9+
workspace_user_resource_permission_model = apps.get_model('system_manage', 'WorkspaceUserResourcePermission')
10+
11+
duplicates = workspace_user_resource_permission_model.objects.annotate(
12+
row_num=Window(
13+
expression=RowNumber(),
14+
partition_by=[F('workspace_id'), F('user'), F('auth_target_type'), F('target')],
15+
order_by=[F('create_time').desc()],
16+
)
17+
).filter(row_num__gt=1)
18+
19+
ids_to_delete = list(duplicates.values_list('id', flat=True))
20+
if ids_to_delete:
21+
workspace_user_resource_permission_model.objects.filter(id__in=ids_to_delete).delete()
22+
23+
class Migration(migrations.Migration):
24+
25+
dependencies = [
26+
('system_manage', '0003_alter_workspaceuserresourcepermission_target'),
27+
('users', '0001_initial'),
28+
]
29+
30+
operations = [
31+
migrations.RunPython(remove_duplicates,
32+
),
33+
migrations.AlterUniqueTogether(
34+
name='workspaceuserresourcepermission',
35+
unique_together={('workspace_id', 'user', 'auth_target_type', 'target')},
36+
),
37+
]

apps/system_manage/models/workspace_user_permission.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,4 @@ class WorkspaceUserResourcePermission(models.Model):
5757

5858
class Meta:
5959
db_table = "workspace_user_resource_permission"
60+
unique_together = ('workspace_id', 'user', 'auth_target_type', 'target')

apps/system_manage/sql/get_application_user_resource_permission.sql

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ FROM (
1111
user_id,
1212
workspace_id,
1313
icon,
14-
folder_id
14+
folder_id,
15+
create_time
1516
FROM application
1617
${query_set}
1718
UNION
@@ -22,7 +23,8 @@ FROM (
2223
application_folder."user_id",
2324
application_folder."workspace_id",
2425
NULL AS "icon",
25-
application_folder."parent_id" AS "folder_id"
26+
application_folder."parent_id" AS "folder_id",
27+
application_folder."create_time"
2628
FROM application_folder
2729
${folder_query_set}
2830
) resource_or_folder
@@ -42,3 +44,4 @@ LEFT JOIN (
4244
) wurp
4345
ON wurp.target::text = resource_or_folder.id
4446
${resource_query_set}
47+
ORDER BY resource_or_folder.create_time DESC

apps/system_manage/sql/get_knowledge_user_resource_permission.sql

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ FROM (
1212
user_id,
1313
workspace_id,
1414
"type"::varchar AS "icon",
15-
folder_id
15+
folder_id,
16+
create_time
1617
FROM knowledge
1718
${query_set}
1819
UNION
@@ -23,7 +24,8 @@ FROM (
2324
knowledge_folder."user_id",
2425
knowledge_folder."workspace_id",
2526
NULL AS "icon",
26-
knowledge_folder."parent_id" AS "folder_id"
27+
knowledge_folder."parent_id" AS "folder_id",
28+
knowledge_folder."create_time"
2729
FROM knowledge_folder
2830
${folder_query_set}
2931
) resource_or_folder
@@ -44,4 +46,5 @@ LEFT JOIN (
4446
${workspace_user_resource_permission_query_set}
4547
) wurp
4648
ON wurp.target::text = resource_or_folder.id
47-
${resource_query_set}
49+
${resource_query_set}
50+
ORDER BY resource_or_folder.create_time DESC

apps/system_manage/sql/get_model_user_resource_permission.sql

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ FROM (
1414
user_id,
1515
workspace_id,
1616
provider as icon,
17-
'default' as folder_id
17+
'default' as folder_id,
18+
create_time
1819
FROM
1920
model
2021
${query_set}
@@ -27,7 +28,8 @@ FROM (
2728
user_id,
2829
workspace_id,
2930
provider as icon,
30-
'default' as folder_id
31+
'default' as folder_id,
32+
create_time
3133
FROM model
3234
${folder_query_set}
3335
AND 1=0
@@ -49,4 +51,5 @@ LEFT JOIN (
4951
${workspace_user_resource_permission_query_set}
5052
) wurp
5153
ON wurp.target = resource_or_folder."id"
52-
${resource_query_set}
54+
${resource_query_set}
55+
ORDER BY resource_or_folder.create_time DESC

apps/system_manage/sql/get_tool_user_resource_permission.sql

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ FROM (
1212
workspace_id,
1313
icon,
1414
folder_id,
15-
tool_type
15+
tool_type,
16+
create_time
1617
FROM tool
1718
${query_set}
1819
UNION
@@ -24,7 +25,8 @@ FROM (
2425
tool_folder."workspace_id",
2526
NULL AS "icon",
2627
tool_folder."parent_id" AS "folder_id",
27-
NULL AS "tool_type"
28+
NULL AS "tool_type",
29+
tool_folder."create_time"
2830
FROM tool_folder
2931
${folder_query_set}
3032
) resource_or_folder
@@ -45,4 +47,5 @@ LEFT JOIN (
4547
) wurp
4648
ON wurp.target::text = resource_or_folder."id"
4749
${resource_query_set}
50+
ORDER BY resource_or_folder.create_time DESC
4851

0 commit comments

Comments
 (0)