11# -*- coding: utf-8 -*-
22
3- from graphene import UUID , Boolean , Float , List , ObjectType , String
3+ from graphene import UUID , Boolean , Float , List , Mutation , ObjectType , String
44from graphene_django import DjangoObjectType
55
6- from backend .apps .api .v1 .models import Table , TableNeighbor
6+ from backend .apps .api .v1 .models import Column , ObservationLevel , Table , TableNeighbor
77from backend .apps .api .v1 .sql_generator import OneBigTableQueryGenerator
88from backend .custom .graphql_base import PlainTextNode
99
@@ -39,6 +39,42 @@ def resolve_score(root, info):
3939 return root .score
4040
4141
42+ class ReorderTables (Mutation ):
43+ """Set display order for tables within a dataset.
44+ ids: ordered list of table UUIDs (index 0 = first)."""
45+
46+ class Arguments :
47+ ids = List (UUID , required = True )
48+
49+ ok = Boolean ()
50+ errors = List (String )
51+
52+ def mutate (root , info , ids ):
53+ if not info .context .user .is_staff :
54+ return ReorderTables (ok = False , errors = ["Permission denied" ])
55+ for i , table_id in enumerate (ids ):
56+ Table .objects .filter (pk = table_id ).update (order = i )
57+ return ReorderTables (ok = True , errors = [])
58+
59+
60+ class ReorderObservationLevels (Mutation ):
61+ """Set display order for observation levels within a table.
62+ ids: ordered list of ObservationLevel UUIDs (index 0 = first)."""
63+
64+ class Arguments :
65+ ids = List (UUID , required = True )
66+
67+ ok = Boolean ()
68+ errors = List (String )
69+
70+ def mutate (root , info , ids ):
71+ if not info .context .user .is_staff :
72+ return ReorderObservationLevels (ok = False , errors = ["Permission denied" ])
73+ for i , ol_id in enumerate (ids ):
74+ ObservationLevel .objects .filter (pk = ol_id ).update (order = i )
75+ return ReorderObservationLevels (ok = True , errors = [])
76+
77+
4278class Query (ObjectType ):
4379 get_table_neighbor = List (
4480 TableNeighborNode ,
@@ -63,3 +99,27 @@ def resolve_get_table_one_big_table_query(
6399 table , columns , include_table_translation
64100 )
65101 return sql_query
102+
103+
104+ class ReorderColumns (Mutation ):
105+ """Set display order for columns within a table.
106+ ids: ordered list of Column UUIDs (index 0 = first)."""
107+
108+ class Arguments :
109+ ids = List (UUID , required = True )
110+
111+ ok = Boolean ()
112+ errors = List (String )
113+
114+ def mutate (root , info , ids ):
115+ if not info .context .user .is_staff :
116+ return ReorderColumns (ok = False , errors = ["Permission denied" ])
117+ for i , col_id in enumerate (ids ):
118+ Column .objects .filter (pk = col_id ).update (order = i )
119+ return ReorderColumns (ok = True , errors = [])
120+
121+
122+ class APIMutation :
123+ reorder_tables = ReorderTables .Field ()
124+ reorder_observation_levels = ReorderObservationLevels .Field ()
125+ reorder_columns = ReorderColumns .Field ()
0 commit comments