-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
Copy pathOperation.java
executable file
·157 lines (138 loc) · 3.48 KB
/
Operation.java
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
/*Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
This source code is licensed under the Apache License Version 2.0.*/
package apijson.orm;
/**对请求 JSON 的操作
* @author Lemon
*/
public enum Operation {
/**
* 必须传的字段,结构是
* "key0,key1,key2..."
*/
MUST,
/**
* 不允许传的字段,结构是
* "key0,key1,key2..."
*/
REFUSE,
/**TODO 是否应该把数组类型写成 BOOLEANS, NUMBERS 等复数单词,以便抽取 enum ?扩展用 VERIFY 或 INSERT/UPDATE 远程函数等
* 验证是否符合预设的类型:
* BOOLEAN, NUMBER, DECIMAL, STRING, URL, DATE, TIME, DATETIME, OBJECT, ARRAY
* 或它们的数组
* BOOLEAN[], NUMBER[], DECIMAL[], STRING[], URL[], DATE[], TIME[], DATETIME[], OBJECT[], ARRAY[]
* 结构是
* {
* key0: value0,
* key1: value1,
* key2: value2
* ...
* }
* 例如
* {
* "id": "NUMBER", //id 类型必须为 NUMBER
* "pictureList": "URL[]", //pictureList 类型必须为 URL[]
* }
* @see {@link AbstractVerifier#verifyType(String, String, Object, boolean)}
*/
TYPE,
/**
* 验证是否符合预设的条件,结构是
* {
* key0: value0,
* key1: value1,
* key2: value2
* ...
* }
* 例如
* {
* "phone~": "PHONE", //phone 必须满足 PHONE 的格式,配置见 {@link AbstractVerifier#COMPILE_MAP}
* "status{}": [1,2,3], //status 必须在给出的范围内
* "content{L}": ">0,<=255", //content的长度 必须在给出的范围内
* "balance&{}":">0,<=10000" //必须满足 balance>0 & balance<=10000
* }
*/
VERIFY,
/**
* 验证是否存在,结构是
* "key0,key1,key2..."
* 多个字段用逗号隔开,联合校验
*/
EXIST,
/**
* 验证是否不存在,除了本身的记录,结构是
* "key0,key1,key2..."
* 多个字段用逗号隔开,联合校验
*/
UNIQUE,
/**
* 添加,当要被添加的对象不存在时,结构是
* {
* key0: value0,
* key1: value1,
* key2: value2
* ...
* }
*/
INSERT,
/**
* 强行放入,不存在时就添加,存在时就修改,结构是
* {
* key0: value0,
* key1: value1,
* key2: value2
* ...
* }
*/
UPDATE,
/**
* 替换,当要被替换的对象存在时,结构是
* {
* key0: value0,
* key1: value1,
* key2: value2
* ...
* }
*/
REPLACE,
/**
* 移除,当要被移除的对象存在时,结构是
* "key0,key1,key2..."
*/
REMOVE,
/**
* 监听事件,用于同步到其它表,结构是
* "key0": {}
* 例如 "name": { "UPDATE": { "Comment": { "userName@": "/name" } } }
* 当 User.name 被修改时,同步修改 Comment.userName
*
* 例如 "sex != 0 && sex != 1": "throw new Error('sex 必须在 [0, 1] 内!')"
* 自定义代码,当满足条件是执行后面的代码
*
* 还有
* "ELSE": ""
* 自定义代码,不处理,和不传一样
*/
IF,
// /** 直接用 IF 替代
// * 自定义代码,结构是 "code",例如
// * "var a = 1;
// * var b = a + 2;
// * if (b % 2 == 0) {
// * throw new Error('b % 2 == 0 !');
// * }
// * "
// *
// * 或 { "code": "JS", "code2": "LUA" }
// */
// CODE,
/**
* 允许批量增删改部分失败,结构是
* "Table[],key[],key:alias[]"
* 自动 ALLOW_PARTIAL_UPDATE_FAILED_TABLE_MAP.put,结构是 Boolean,例如 true
*/
ALLOW_PARTIAL_UPDATE_FAIL,
/**
* 强制要求必须有 id/id{}/id{}@ 条件,结构是 Boolean,例如 true
*/
IS_ID_CONDITION_MUST;
}