@greatapps/greatagents 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/README.md +630 -0
- package/package.json +7 -0
- package/src/modules/base_domains/index.js +10 -0
- package/src/modules/base_domains/properties.js +61 -0
- package/src/modules/conversions/index.js +12 -0
- package/src/modules/conversions/properties.js +47 -0
- package/src/modules/conversions/responses.js +57 -0
- package/src/modules/conversions/routes.js +120 -0
- package/src/modules/conversions_resume/index.js +10 -0
- package/src/modules/conversions_resume/properties.js +46 -0
- package/src/modules/domains/index.js +10 -0
- package/src/modules/domains/properties.js +75 -0
- package/src/modules/domains_redirects/index.js +10 -0
- package/src/modules/domains_redirects/properties.js +64 -0
- package/src/modules/experiments/index.js +10 -0
- package/src/modules/experiments/properties.js +129 -0
- package/src/modules/experiments_variations/index.js +10 -0
- package/src/modules/experiments_variations/properties.js +193 -0
- package/src/modules/integrations_accounts/index.js +11 -0
- package/src/modules/integrations_accounts/properties.js +140 -0
- package/src/modules/integrations_pages_elements/index.js +12 -0
- package/src/modules/integrations_pages_elements/properties.js +283 -0
- package/src/modules/pages/index.js +10 -0
- package/src/modules/pages/properties.js +170 -0
- package/src/modules/pages_blocks_folders/index.js +10 -0
- package/src/modules/pages_blocks_folders/properties.js +90 -0
- package/src/modules/pages_blocks_models/index.js +12 -0
- package/src/modules/pages_blocks_models/properties.js +91 -0
- package/src/modules/pages_editor_photos/index.js +10 -0
- package/src/modules/pages_editor_photos/properties.js +138 -0
- package/src/modules/pages_editor_photos_folders/index.js +10 -0
- package/src/modules/pages_editor_photos_folders/properties.js +92 -0
- package/src/modules/projects/index.js +10 -0
- package/src/modules/projects/properties.js +120 -0
- package/src/modules/projects_domains/index.js +10 -0
- package/src/modules/projects_domains/properties.js +65 -0
- package/src/modules/projects_users/index.js +10 -0
- package/src/modules/projects_users/properties.js +66 -0
- package/src/modules/templates/index.js +10 -0
- package/src/modules/templates/properties.js +86 -0
- package/src/modules/templates_blocks/index.js +10 -0
- package/src/modules/templates_blocks/properties.js +76 -0
- package/src/modules/templates_blocks_folders/index.js +11 -0
- package/src/modules/templates_blocks_folders/properties.js +54 -0
- package/src/modules/templates_categories/index.js +12 -0
- package/src/modules/templates_categories/properties.js +100 -0
- package/src/modules/templates_categories_links/index.js +12 -0
- package/src/modules/templates_categories_links/properties.js +63 -0
- package/src/modules/templates_groups/index.js +11 -0
- package/src/modules/templates_groups/properties.js +42 -0
- package/src/modules/views/index.js +12 -0
- package/src/modules/views/properties.js +44 -0
- package/src/modules/views/responses.js +57 -0
- package/src/modules/views/routes.js +56 -0
- package/src/modules/views_resume/index.js +10 -0
- package/src/modules/views_resume/properties.js +46 -0
- package/src/product.js +87 -0
- package/src/shared/parameters.js +19 -0
- package/src/shared/query.js +32 -0
- package/src/shared/responses.js +124 -0
package/docs/README.md
ADDED
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
# Documentação de Schemas
|
|
2
|
+
|
|
3
|
+
## Índice
|
|
4
|
+
|
|
5
|
+
- [Introdução](#introdução)
|
|
6
|
+
- [Estrutura Básica](#estrutura-básica)
|
|
7
|
+
- [Elementos Principais](#elementos-principais)
|
|
8
|
+
- [Definição de Propriedades](#definição-de-propriedades)
|
|
9
|
+
- [Atributos Básicos](#atributos-básicos)
|
|
10
|
+
- [Propriedades Automáticas](#propriedades-automáticas)
|
|
11
|
+
- [Validações](#validações)
|
|
12
|
+
- [Opções Predefinidas](#opções-predefinidas)
|
|
13
|
+
- [Referências](#referências)
|
|
14
|
+
- [Interface de Usuário](#interface-de-usuário)
|
|
15
|
+
- [Configuração de Arquivos](#configuração-de-arquivos)
|
|
16
|
+
- [Tipos de Dados](#tipos-de-dados)
|
|
17
|
+
- [String](#string)
|
|
18
|
+
- [Number](#number)
|
|
19
|
+
- [Boolean](#boolean)
|
|
20
|
+
- [Date](#date)
|
|
21
|
+
- [Object](#object)
|
|
22
|
+
- [Array](#array)
|
|
23
|
+
- [Image](#image)
|
|
24
|
+
- [Componentes de Interface](#componentes-de-interface)
|
|
25
|
+
- [Recursos Avançados](#recursos-avançados)
|
|
26
|
+
- [Valores Dinâmicos](#valores-dinâmicos)
|
|
27
|
+
- [Filtros Dinâmicos](#filtros-dinâmicos)
|
|
28
|
+
- [Propriedades Aninhadas](#propriedades-aninhadas)
|
|
29
|
+
- [Definição de Rotas](#definição-de-rotas)
|
|
30
|
+
- [Estrutura de Rotas](#estrutura-de-rotas)
|
|
31
|
+
- [Parâmetros de Rota](#parâmetros-de-rota)
|
|
32
|
+
- [Métodos HTTP](#métodos-http)
|
|
33
|
+
- [Parâmetros de Consulta](#parâmetros-de-consulta)
|
|
34
|
+
- [Respostas](#respostas)
|
|
35
|
+
|
|
36
|
+
## Introdução
|
|
37
|
+
|
|
38
|
+
Este documento descreve como criar e configurar schemas para produtos Great. Os schemas definem a estrutura de dados, validações, relacionamentos, interfaces de usuário e rotas de API para as coleções do sistema.
|
|
39
|
+
|
|
40
|
+
Sempre que atualizar um schema, atualize também o r1-api-postgresql e r3-api para refletir as mudanças.
|
|
41
|
+
|
|
42
|
+
## Estrutura Básica
|
|
43
|
+
|
|
44
|
+
Um schema possui a seguinte estrutura básica:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"product": "greatagents",
|
|
49
|
+
"name": "nome_do_module",
|
|
50
|
+
"summary": "Descrição breve da coleção",
|
|
51
|
+
"params": ["parametro1", "parametro2"],
|
|
52
|
+
"description": "Descrição detalhada da coleção",
|
|
53
|
+
"properties": {
|
|
54
|
+
"propriedade1": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"required": true,
|
|
57
|
+
// outras configurações
|
|
58
|
+
},
|
|
59
|
+
"propriedade2": {
|
|
60
|
+
"type": "number",
|
|
61
|
+
// outras configurações
|
|
62
|
+
}
|
|
63
|
+
// mais propriedades
|
|
64
|
+
},
|
|
65
|
+
"routes": {
|
|
66
|
+
// definição de rotas
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Elementos Principais
|
|
72
|
+
|
|
73
|
+
| Elemento | Descrição |
|
|
74
|
+
|----------|-----------|
|
|
75
|
+
| `product` | Identifica o produto ao qual a coleção pertence (geralmente "greatagents") |
|
|
76
|
+
| `name` | Nome do módulo |
|
|
77
|
+
| `summary` | Descrição breve da finalidade da coleção |
|
|
78
|
+
| `params` | Array de parâmetros obrigatórios para filtrar a coleção (opcional) |
|
|
79
|
+
| `description` | Descrição detalhada da coleção |
|
|
80
|
+
| `properties` | Objeto contendo todas as propriedades da coleção |
|
|
81
|
+
| `routes` | Objeto contendo todas as rotas da API relacionadas à coleção |
|
|
82
|
+
|
|
83
|
+
## Definição de Propriedades
|
|
84
|
+
|
|
85
|
+
Cada propriedade é definida como um objeto com diversos atributos:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
"nome_propriedade": {
|
|
89
|
+
"type": "string",
|
|
90
|
+
"required": true,
|
|
91
|
+
"default": "valor_padrao",
|
|
92
|
+
"filterable": true,
|
|
93
|
+
"searchable": true,
|
|
94
|
+
"updatable": false,
|
|
95
|
+
"description": "Descrição da propriedade",
|
|
96
|
+
"options": [],
|
|
97
|
+
"reference": {},
|
|
98
|
+
"interface": {}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Atributos Básicos
|
|
103
|
+
|
|
104
|
+
| Atributo | Tipo | Descrição |
|
|
105
|
+
|----------|------|-----------|
|
|
106
|
+
| `type` | String | Tipo de dado (string, number, boolean, date, object, array, image) |
|
|
107
|
+
| `required` | Boolean | Define se o campo é obrigatório |
|
|
108
|
+
| `default` | Any | Valor padrão para o campo |
|
|
109
|
+
| `updatable` | Boolean | Define se o campo pode ser atualizado após criação |
|
|
110
|
+
| `creatable` | Boolean | Define se o campo pode ser definido na criação |
|
|
111
|
+
| `filterable` | Boolean | Define se o campo pode ser usado em filtros |
|
|
112
|
+
| `searchable` | Boolean | Define se o campo pode ser usado em buscas textuais |
|
|
113
|
+
| `unique` | Boolean | Define se o valor deve ser único na coleção |
|
|
114
|
+
| `description` | String | Descrição do propósito do campo |
|
|
115
|
+
| `autoIncrement` | Boolean | Define se o campo é auto-incrementado |
|
|
116
|
+
| `index` | Boolean | Define se o campo deve ser indexado |
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
### Propriedades Automáticas
|
|
120
|
+
|
|
121
|
+
As seguintes propriedades serão criadas e configuradas automaticamente no banco de dados, mesmo que não sejam explicitamente definidas no schema:
|
|
122
|
+
|
|
123
|
+
| Propriedade | Tipo | Descrição |
|
|
124
|
+
|-------------|------|-----------|
|
|
125
|
+
| `id` | Number | Identificador único do registro, auto-incrementado |
|
|
126
|
+
| `deleted` | Boolean | Indica se o registro foi marcado como excluído (exclusão lógica) |
|
|
127
|
+
| `datetime_alt` | Date | Data e hora da última alteração do registro |
|
|
128
|
+
| `datetime_del` | Date | Data e hora da exclusão lógica do registro |
|
|
129
|
+
| `datetime_add` | Date | Data e hora da criação do registro |
|
|
130
|
+
|
|
131
|
+
Estas propriedades são gerenciadas automaticamente pelo sistema:
|
|
132
|
+
|
|
133
|
+
- `id`: Gerado automaticamente na criação do registro
|
|
134
|
+
- `deleted`: Definido como `false` por padrão, atualizado para `true` quando o registro é excluído logicamente
|
|
135
|
+
- `datetime_alt`: Atualizado automaticamente sempre que o registro é modificado
|
|
136
|
+
- `datetime_del`: Preenchido automaticamente quando o registro é excluído logicamente
|
|
137
|
+
- `datetime_add`: Preenchido automaticamente com a data e hora atual na criação do registro
|
|
138
|
+
|
|
139
|
+
Não é necessário definir estas propriedades explicitamente em seus schemas, mas se desejar personalizar algum aspecto delas (como adicionar filtros ou índices), você pode incluí-las normalmente.
|
|
140
|
+
|
|
141
|
+
### Validações
|
|
142
|
+
|
|
143
|
+
| Atributo | Tipo | Descrição |
|
|
144
|
+
|----------|------|-----------|
|
|
145
|
+
| `minLength` | Number | Comprimento mínimo para strings |
|
|
146
|
+
| `maxLength` | Number | Comprimento máximo para strings |
|
|
147
|
+
| `min` | Number | Valor mínimo para números |
|
|
148
|
+
| `max` | Number | Valor máximo para números |
|
|
149
|
+
| `match` | String | Expressão regular para validação de strings |
|
|
150
|
+
| `options` | Array | Lista de valores permitidos |
|
|
151
|
+
| `format` | String | Formato específico (email, url, json, etc.) |
|
|
152
|
+
| `value` | Any | Valor fixo |
|
|
153
|
+
| `default` | Any | Valor padrão |
|
|
154
|
+
|
|
155
|
+
Exemplo de validações:
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
"email": {
|
|
159
|
+
"type": "string",
|
|
160
|
+
"required": true,
|
|
161
|
+
"minLength": 5,
|
|
162
|
+
"maxLength": 100,
|
|
163
|
+
"match": "^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$",
|
|
164
|
+
"unique": true,
|
|
165
|
+
"format": "email"
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Opções Predefinidas
|
|
170
|
+
|
|
171
|
+
Para propriedades que possuem valores predefinidos, utilize o atributo `options`:
|
|
172
|
+
|
|
173
|
+
```json
|
|
174
|
+
"options": [
|
|
175
|
+
{
|
|
176
|
+
"value": "valor1",
|
|
177
|
+
"icon": "icone_opcional",
|
|
178
|
+
"title": {
|
|
179
|
+
"pt-br": "Título em Português",
|
|
180
|
+
"en": "Título em Inglês"
|
|
181
|
+
},
|
|
182
|
+
"description": "Descrição opcional",
|
|
183
|
+
"style": "Estilo opcional"
|
|
184
|
+
},
|
|
185
|
+
// Mais opções...
|
|
186
|
+
]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Exemplo de propriedade com opções:
|
|
190
|
+
|
|
191
|
+
```json
|
|
192
|
+
"payment_method": {
|
|
193
|
+
"type": "number",
|
|
194
|
+
"options": [
|
|
195
|
+
{
|
|
196
|
+
"value": 1,
|
|
197
|
+
"title": {
|
|
198
|
+
"pt-br": "Cartão de Crédito",
|
|
199
|
+
"en": "Credit Card"
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
"value": 2,
|
|
204
|
+
"title": {
|
|
205
|
+
"pt-br": "Boleto Bancário",
|
|
206
|
+
"en": "Bank Slip"
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
"interface": {
|
|
211
|
+
"label": {
|
|
212
|
+
"pt-br": "Forma de Pagamento",
|
|
213
|
+
"en": "Payment Method"
|
|
214
|
+
},
|
|
215
|
+
"component": "select"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Referências
|
|
221
|
+
|
|
222
|
+
Para criar relacionamentos entre coleções:
|
|
223
|
+
|
|
224
|
+
```json
|
|
225
|
+
"reference": {
|
|
226
|
+
"name": "nome_da_colecao",
|
|
227
|
+
"field": "campo_id",
|
|
228
|
+
"filter": { "campo": "valor" },
|
|
229
|
+
"label": "campo_exibido",
|
|
230
|
+
"value": "campo_valor",
|
|
231
|
+
"disabled": false
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
| Atributo | Descrição |
|
|
236
|
+
|----------|-----------|
|
|
237
|
+
| `name` | Nome da coleção referenciada |
|
|
238
|
+
| `field` | Campo na coleção referenciada (geralmente "id") |
|
|
239
|
+
| `filter` | Filtro aplicado à coleção referenciada |
|
|
240
|
+
| `label` | Campo usado como rótulo na interface |
|
|
241
|
+
| `value` | Campo usado como valor |
|
|
242
|
+
| `disabled` | Define se a referência é editável |
|
|
243
|
+
|
|
244
|
+
Exemplo de propriedade com referência:
|
|
245
|
+
|
|
246
|
+
```json
|
|
247
|
+
"id_product": {
|
|
248
|
+
"type": "number",
|
|
249
|
+
"filterable": true,
|
|
250
|
+
"reference": {
|
|
251
|
+
"name": "products",
|
|
252
|
+
"field": "id",
|
|
253
|
+
"label": "name",
|
|
254
|
+
"value": "id"
|
|
255
|
+
},
|
|
256
|
+
"interface": {
|
|
257
|
+
"label": {
|
|
258
|
+
"pt-br": "Produto",
|
|
259
|
+
"en": "Product"
|
|
260
|
+
},
|
|
261
|
+
"component": "select"
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Interface de Usuário
|
|
267
|
+
|
|
268
|
+
Configurações para a interface de usuário:
|
|
269
|
+
|
|
270
|
+
```json
|
|
271
|
+
"interface": {
|
|
272
|
+
"label": {
|
|
273
|
+
"pt-br": "Nome",
|
|
274
|
+
"en": "Name"
|
|
275
|
+
},
|
|
276
|
+
"description": {
|
|
277
|
+
"pt-br": "Informe seu nome",
|
|
278
|
+
"en": "Enter your name"
|
|
279
|
+
},
|
|
280
|
+
"placeholder": {
|
|
281
|
+
"pt-br": "Nome",
|
|
282
|
+
"en": "Name"
|
|
283
|
+
},
|
|
284
|
+
"component": "input",
|
|
285
|
+
"disabled": false,
|
|
286
|
+
"format": "email",
|
|
287
|
+
"mask": "phone",
|
|
288
|
+
"class": "classe_css_opcional"
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
| Atributo | Descrição |
|
|
293
|
+
|----------|-----------|
|
|
294
|
+
| `label` | Rótulo do campo (com suporte a múltiplos idiomas) |
|
|
295
|
+
| `description` | Descrição/ajuda do campo |
|
|
296
|
+
| `placeholder` | Texto de placeholder |
|
|
297
|
+
| `component` | Tipo de componente (input, select, radio, checkbox, textarea, date, image) |
|
|
298
|
+
| `disabled` | Define se o campo está desabilitado |
|
|
299
|
+
| `format` | Formato especial (email, url, cep, cpf, cnpj, currency, password) |
|
|
300
|
+
| `mask` | Máscara de entrada (phone, cep, cpf, cnpj, int, card, card_date) |
|
|
301
|
+
| `class` | Classes CSS adicionais (ex: "editor", "color-picker") |
|
|
302
|
+
|
|
303
|
+
### Configuração de Arquivos
|
|
304
|
+
|
|
305
|
+
Para propriedades do tipo `image`, utilize o atributo `file`:
|
|
306
|
+
|
|
307
|
+
```json
|
|
308
|
+
"photo": {
|
|
309
|
+
"type": "image",
|
|
310
|
+
"file": {
|
|
311
|
+
"types": ["png", "jpg", "jpeg", "gif", "svg", "webp"],
|
|
312
|
+
"storage": "nome-do-bucket",
|
|
313
|
+
"width": 160,
|
|
314
|
+
"height": 160
|
|
315
|
+
},
|
|
316
|
+
"interface": {
|
|
317
|
+
"label": {
|
|
318
|
+
"pt-br": "Foto",
|
|
319
|
+
"en": "Photo"
|
|
320
|
+
},
|
|
321
|
+
"component": "image"
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
| Atributo | Descrição |
|
|
327
|
+
|----------|-----------|
|
|
328
|
+
| `types` | Array com os tipos de arquivo permitidos |
|
|
329
|
+
| `storage` | Nome do bucket de armazenamento |
|
|
330
|
+
| `width` | Largura da imagem |
|
|
331
|
+
| `height` | Altura da imagem |
|
|
332
|
+
|
|
333
|
+
## Tipos de Dados
|
|
334
|
+
|
|
335
|
+
### String
|
|
336
|
+
|
|
337
|
+
```json
|
|
338
|
+
"name": {
|
|
339
|
+
"type": "string",
|
|
340
|
+
"required": true,
|
|
341
|
+
"minLength": 2,
|
|
342
|
+
"maxLength": 100,
|
|
343
|
+
"searchable": true
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
### Number
|
|
348
|
+
|
|
349
|
+
```json
|
|
350
|
+
"age": {
|
|
351
|
+
"type": "number",
|
|
352
|
+
"min": 18,
|
|
353
|
+
"max": 120,
|
|
354
|
+
"default": 18
|
|
355
|
+
}
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Boolean
|
|
359
|
+
|
|
360
|
+
```json
|
|
361
|
+
"active": {
|
|
362
|
+
"type": "boolean",
|
|
363
|
+
"default": true,
|
|
364
|
+
"filterable": true
|
|
365
|
+
}
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Date
|
|
369
|
+
|
|
370
|
+
```json
|
|
371
|
+
"birth_date": {
|
|
372
|
+
"type": "date",
|
|
373
|
+
"filterable": true
|
|
374
|
+
}
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
### Object
|
|
378
|
+
|
|
379
|
+
```json
|
|
380
|
+
"address": {
|
|
381
|
+
"type": "object",
|
|
382
|
+
"properties": {
|
|
383
|
+
"street": { "type": "string" },
|
|
384
|
+
"number": { "type": "string" },
|
|
385
|
+
"city": { "type": "string" }
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Array
|
|
391
|
+
|
|
392
|
+
```json
|
|
393
|
+
"tags": {
|
|
394
|
+
"type": "array",
|
|
395
|
+
}
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Image
|
|
399
|
+
|
|
400
|
+
```json
|
|
401
|
+
"photo": {
|
|
402
|
+
"type": "image",
|
|
403
|
+
"file": {
|
|
404
|
+
"types": ["png", "jpg", "jpeg"],
|
|
405
|
+
"storage": "user-photos",
|
|
406
|
+
"width": 200,
|
|
407
|
+
"height": 200
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
## Componentes de Interface
|
|
413
|
+
|
|
414
|
+
| Componente | Descrição | Exemplo |
|
|
415
|
+
|------------|-----------|---------|
|
|
416
|
+
| `input` | Campo de entrada de texto | `"component": "input"` |
|
|
417
|
+
| `select` | Menu de seleção | `"component": "select"` |
|
|
418
|
+
| `radio` | Botões de opção | `"component": "radio"` |
|
|
419
|
+
| `checkbox` | Caixas de seleção | `"component": "checkbox"` |
|
|
420
|
+
| `textarea` | Área de texto | `"component": "textarea"` |
|
|
421
|
+
| `date` | Seletor de data | `"component": "date"` |
|
|
422
|
+
| `image` | Seletor de imagem | `"component": "image"` |
|
|
423
|
+
|
|
424
|
+
### Formatos e Máscaras
|
|
425
|
+
|
|
426
|
+
| Formato/Máscara | Descrição |
|
|
427
|
+
|-----------------|-----------|
|
|
428
|
+
| `email` | Formato de e-mail |
|
|
429
|
+
| `url` | Formato de URL |
|
|
430
|
+
| `cep` | Máscara de CEP |
|
|
431
|
+
| `cpf` | Máscara de CPF |
|
|
432
|
+
| `cnpj` | Máscara de CNPJ |
|
|
433
|
+
| `phone` | Máscara de telefone |
|
|
434
|
+
| `int` | Máscara de número inteiro |
|
|
435
|
+
| `currency` | Formato de moeda |
|
|
436
|
+
| `password` | Campo de senha |
|
|
437
|
+
|
|
438
|
+
## Recursos Avançados
|
|
439
|
+
|
|
440
|
+
### Valores Dinâmicos
|
|
441
|
+
|
|
442
|
+
O sistema suporta valores dinâmicos para alguns atributos:
|
|
443
|
+
|
|
444
|
+
- `"default": "$id"` - Utiliza o ID do documento
|
|
445
|
+
- `"default": "Date()"` - Utiliza a data atual
|
|
446
|
+
|
|
447
|
+
### Filtros Dinâmicos
|
|
448
|
+
|
|
449
|
+
É possível usar valores dinâmicos em filtros de referência:
|
|
450
|
+
|
|
451
|
+
```json
|
|
452
|
+
"reference": {
|
|
453
|
+
"name": "accounts",
|
|
454
|
+
"filter": { "id_wl": "$id_wl" },
|
|
455
|
+
"label": "name",
|
|
456
|
+
"value": "id"
|
|
457
|
+
}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
## Definição de Rotas
|
|
461
|
+
|
|
462
|
+
### Estrutura de Rotas
|
|
463
|
+
|
|
464
|
+
As rotas são definidas no atributo `routes` do schema:
|
|
465
|
+
|
|
466
|
+
```json
|
|
467
|
+
"routes": {
|
|
468
|
+
"/pt-br/:id_wl/account/:id_account/name/action/:param": {
|
|
469
|
+
"parameters": {
|
|
470
|
+
// parâmetros de rota
|
|
471
|
+
},
|
|
472
|
+
"get": {
|
|
473
|
+
// configuração do método GET
|
|
474
|
+
},
|
|
475
|
+
"post": {
|
|
476
|
+
// configuração do método POST
|
|
477
|
+
},
|
|
478
|
+
"put": {
|
|
479
|
+
// configuração do método PUT
|
|
480
|
+
},
|
|
481
|
+
"delete": {
|
|
482
|
+
// configuração do método DELETE
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
### Parâmetros de Rota
|
|
489
|
+
|
|
490
|
+
Os parâmetros de rota são definidos no atributo `parameters`:
|
|
491
|
+
|
|
492
|
+
São obrigatórios.
|
|
493
|
+
|
|
494
|
+
```json
|
|
495
|
+
"parameters": {
|
|
496
|
+
"id_wl": {
|
|
497
|
+
"type": "string",
|
|
498
|
+
"example": "1",
|
|
499
|
+
"description": "ID do whitelabel"
|
|
500
|
+
},
|
|
501
|
+
"id_account": {
|
|
502
|
+
"type": "string",
|
|
503
|
+
"example": "1",
|
|
504
|
+
"description": "ID da conta"
|
|
505
|
+
},
|
|
506
|
+
"id_page": {
|
|
507
|
+
"type": "string",
|
|
508
|
+
"example": "10984"
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
### Métodos HTTP
|
|
514
|
+
|
|
515
|
+
Cada rota pode suportar um ou mais métodos HTTP (GET, POST, PUT, DELETE):
|
|
516
|
+
|
|
517
|
+
```json
|
|
518
|
+
"get": {
|
|
519
|
+
"summary": "Obter dados",
|
|
520
|
+
"description": "Descrição detalhada da operação",
|
|
521
|
+
"query": {
|
|
522
|
+
// parâmetros de consulta
|
|
523
|
+
},
|
|
524
|
+
"responses": {
|
|
525
|
+
// respostas possíveis
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
### Parâmetros de Consulta
|
|
531
|
+
|
|
532
|
+
Os parâmetros de consulta são definidos no atributo `query`:
|
|
533
|
+
|
|
534
|
+
São opcionais.
|
|
535
|
+
|
|
536
|
+
```json
|
|
537
|
+
"query": {
|
|
538
|
+
"date_start": {
|
|
539
|
+
"type": "string",
|
|
540
|
+
"example": "2024-07-01",
|
|
541
|
+
"description": "Data inicial (formato YYYY-MM-DD)",
|
|
542
|
+
"required": true
|
|
543
|
+
},
|
|
544
|
+
"date_end": {
|
|
545
|
+
"type": "string",
|
|
546
|
+
"example": "2024-07-25",
|
|
547
|
+
"description": "Data final (formato YYYY-MM-DD)",
|
|
548
|
+
"required": true
|
|
549
|
+
},
|
|
550
|
+
"sort": {
|
|
551
|
+
"type": "string",
|
|
552
|
+
"example": "datetime_resume:desc",
|
|
553
|
+
"description": "Campo e direção de ordenação",
|
|
554
|
+
"default": "datetime_resume:desc"
|
|
555
|
+
},
|
|
556
|
+
"page": {
|
|
557
|
+
"type": "number",
|
|
558
|
+
"example": 1,
|
|
559
|
+
"description": "Número da página",
|
|
560
|
+
"default": 1
|
|
561
|
+
},
|
|
562
|
+
"limit": {
|
|
563
|
+
"type": "number",
|
|
564
|
+
"example": 100,
|
|
565
|
+
"description": "Número máximo de registros",
|
|
566
|
+
"default": 50
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
### Respostas
|
|
572
|
+
|
|
573
|
+
As respostas são definidas no atributo `responses`:
|
|
574
|
+
|
|
575
|
+
```json
|
|
576
|
+
"responses": {
|
|
577
|
+
"200": {
|
|
578
|
+
"description": "Sucesso",
|
|
579
|
+
"content": {
|
|
580
|
+
"application/json": {}
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
"400": {
|
|
584
|
+
"description": "Requisição inválida"
|
|
585
|
+
},
|
|
586
|
+
"401": {
|
|
587
|
+
"description": "Não autorizado"
|
|
588
|
+
},
|
|
589
|
+
"403": {
|
|
590
|
+
"description": "Acesso proibido"
|
|
591
|
+
},
|
|
592
|
+
"404": {
|
|
593
|
+
"description": "Não encontrado"
|
|
594
|
+
},
|
|
595
|
+
"500": {
|
|
596
|
+
"description": "Erro interno do servidor"
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
```
|
|
600
|
+
|
|
601
|
+
## Boas Práticas
|
|
602
|
+
|
|
603
|
+
1. **Nomenclatura**: Use nomes descritivos para propriedades
|
|
604
|
+
- Prefixe IDs de referência com `id_` (ex: `id_account`, `id_page`)
|
|
605
|
+
- Use nomes em inglês e em snake_case (ex: `first_name`, `birth_date`)
|
|
606
|
+
|
|
607
|
+
2. **Validações**: Sempre defina validações apropriadas para garantir a integridade dos dados
|
|
608
|
+
- Defina `minLength` e `maxLength` para strings
|
|
609
|
+
- Defina `min` e `max` para números
|
|
610
|
+
- Use `match` para validar formatos específicos (email, URL, etc.)
|
|
611
|
+
|
|
612
|
+
3. **Internacionalização**: Forneça labels em múltiplos idiomas quando possível
|
|
613
|
+
- Sempre inclua pelo menos português (`pt-br`) e inglês (`en`)
|
|
614
|
+
|
|
615
|
+
4. **Documentação**: Adicione campos `summary` e `description` para descrever a finalidade da coleção
|
|
616
|
+
- Use `description` em propriedades para explicar seu propósito
|
|
617
|
+
|
|
618
|
+
5. **Referências**: Use referências para manter relacionamentos entre coleções
|
|
619
|
+
- Aplique filtros apropriados para limitar as opções
|
|
620
|
+
|
|
621
|
+
6. **Defaults**: Defina valores padrão quando apropriado
|
|
622
|
+
- Use valores dinâmicos quando necessário (`$id`, `Date()`)
|
|
623
|
+
|
|
624
|
+
7. **Filtros e Busca**:
|
|
625
|
+
- Marque como `filterable` campos que serão usados em consultas frequentes
|
|
626
|
+
- Marque como `searchable` campos que serão usados em buscas textuais
|
|
627
|
+
|
|
628
|
+
8. **Organização**:
|
|
629
|
+
- Agrupe propriedades relacionadas
|
|
630
|
+
- Mantenha a consistência entre schemas similares
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
export const properties = {
|
|
2
|
+
id: {
|
|
3
|
+
type: "number",
|
|
4
|
+
filterable: true,
|
|
5
|
+
unique: true,
|
|
6
|
+
autoIncrement: true,
|
|
7
|
+
index: true
|
|
8
|
+
},
|
|
9
|
+
id_wl: {
|
|
10
|
+
type: "number",
|
|
11
|
+
required: true,
|
|
12
|
+
updatable: false,
|
|
13
|
+
filterable: true,
|
|
14
|
+
index: true,
|
|
15
|
+
interface: {
|
|
16
|
+
label: {
|
|
17
|
+
"pt-br": "Whitelabel",
|
|
18
|
+
"en": "Whitelabel"
|
|
19
|
+
},
|
|
20
|
+
component: "select",
|
|
21
|
+
disabled: true
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
domain: {
|
|
25
|
+
type: "string",
|
|
26
|
+
required: true,
|
|
27
|
+
searchable: true,
|
|
28
|
+
filterable: true,
|
|
29
|
+
maxLength: 255,
|
|
30
|
+
interface: {
|
|
31
|
+
label: {
|
|
32
|
+
"pt-br": "Domínio",
|
|
33
|
+
"en": "Domain"
|
|
34
|
+
},
|
|
35
|
+
component: "input",
|
|
36
|
+
placeholder: {
|
|
37
|
+
"pt-br": "exemplo.com",
|
|
38
|
+
"en": "example.com"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
deleted: {
|
|
43
|
+
type: "boolean",
|
|
44
|
+
default: false,
|
|
45
|
+
filterable: true
|
|
46
|
+
},
|
|
47
|
+
datetime_alt: {
|
|
48
|
+
type: "date",
|
|
49
|
+
filterable: true,
|
|
50
|
+
updatable: true
|
|
51
|
+
},
|
|
52
|
+
datetime_del: {
|
|
53
|
+
type: "date",
|
|
54
|
+
filterable: true
|
|
55
|
+
},
|
|
56
|
+
datetime_add: {
|
|
57
|
+
type: "date",
|
|
58
|
+
filterable: true,
|
|
59
|
+
updatable: false
|
|
60
|
+
}
|
|
61
|
+
};
|