forked from ToolJet/ToolJet
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtooljet-db-join.dto.ts
More file actions
160 lines (130 loc) · 3.52 KB
/
tooljet-db-join.dto.ts
File metadata and controls
160 lines (130 loc) · 3.52 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import { IsString, IsArray, ValidateNested, IsIn, IsOptional, IsObject, IsNotEmpty } from 'class-validator';
import { Type } from 'class-transformer';
// TODO: We need to remove custom error messages and make use of dto
// default errors and let frontend show the errors on the specific fields
class Table {
@IsString()
@IsNotEmpty({ message: '::Table name for join not selected' })
name: string;
@IsString()
@IsNotEmpty({ message: '::Table type for join not selected' })
type: string;
}
class Field {
@IsString()
@IsNotEmpty({ message: '::Columns names for join not selected' })
name: string;
@IsString()
@IsNotEmpty({ message: '::Table names for join not selected' })
table: string;
}
class Conditions {
@IsString()
@IsIn(['AND', 'OR'], { message: '::Operator for condition not selected (AND | OR)' })
@IsOptional()
operator: string;
@IsArray()
@ValidateNested({ each: true })
@Type(() => ConditionsList)
conditionsList: ConditionsList[];
}
class ConditionField {
@IsString()
@IsIn(['Column', 'Value'], { message: '::Condition parameter not specified' })
type: string;
@IsOptional() // present only when type is value
value: unknown;
@IsString()
@IsOptional() // present only when type is column
table: string;
@IsString()
@IsOptional() // present only when type is column
columnName: string;
}
class ConditionsList {
@IsObject()
@IsNotEmpty({ message: '::Condition value is empty' })
@ValidateNested()
@Type(() => ConditionField)
leftField: ConditionField;
@IsString()
@IsIn(['=', '>', '>=', '<', '<=', '!=', 'LIKE', 'NOT LIKE', 'ILIKE', 'NOT ILIKE', '~', '~*', 'IN', 'NOT IN', 'IS'], {
message: '::Condition operator not selected',
})
operator: string;
@IsObject()
@IsNotEmpty({ message: '::Condition value is empty' })
@ValidateNested()
@Type(() => ConditionField)
rightField: ConditionField;
@ValidateNested()
@Type(() => Conditions)
@IsOptional()
conditions: Conditions;
}
class Join {
@IsString()
@IsIn(['INNER', 'LEFT', 'RIGHT', 'FULL OUTER'], { message: '::Join type not selected' })
joinType: string;
@IsString()
@IsNotEmpty({ message: '::Join table is not selected' })
table: string;
@ValidateNested()
@IsNotEmpty({ message: '::Join condition is not selected' })
@Type(() => Conditions)
conditions: Conditions;
}
class GroupBy {
@IsString()
@IsNotEmpty()
table: string;
@IsString()
@IsNotEmpty()
columnName: string;
}
class Order {
@IsString()
@IsNotEmpty({ message: '::Sort column not selected' })
columnName: string;
@IsString()
@IsNotEmpty({ message: '::Sort table not selected' })
table: string;
@IsIn(['ASC', 'DESC'], { message: '::Sort direction not selected' })
direction: string;
}
export class TooljetDbJoinDto {
@ValidateNested()
@Type(() => Table)
@IsNotEmpty({ message: '::Join table is empty' })
from: Table;
@IsArray()
@ValidateNested({ each: true })
@Type(() => Field)
@IsNotEmpty({ message: '::Join fields are empty' })
fields: Field[];
@IsArray()
@ValidateNested({ each: true })
@Type(() => Join)
@IsNotEmpty({ message: '::Join parameters are empty' })
joins: Join[];
@ValidateNested()
@Type(() => Conditions)
@IsOptional()
conditions: Conditions;
@IsArray()
@ValidateNested({ each: true })
@Type(() => GroupBy)
@IsOptional()
group_by: GroupBy[];
@IsArray()
@ValidateNested({ each: true })
@Type(() => Order)
@IsOptional()
order_by: Order[];
@IsString()
@IsOptional()
limit: string;
@IsString()
@IsOptional()
offset: string;
}