@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.
Files changed (60) hide show
  1. package/docs/README.md +630 -0
  2. package/package.json +7 -0
  3. package/src/modules/base_domains/index.js +10 -0
  4. package/src/modules/base_domains/properties.js +61 -0
  5. package/src/modules/conversions/index.js +12 -0
  6. package/src/modules/conversions/properties.js +47 -0
  7. package/src/modules/conversions/responses.js +57 -0
  8. package/src/modules/conversions/routes.js +120 -0
  9. package/src/modules/conversions_resume/index.js +10 -0
  10. package/src/modules/conversions_resume/properties.js +46 -0
  11. package/src/modules/domains/index.js +10 -0
  12. package/src/modules/domains/properties.js +75 -0
  13. package/src/modules/domains_redirects/index.js +10 -0
  14. package/src/modules/domains_redirects/properties.js +64 -0
  15. package/src/modules/experiments/index.js +10 -0
  16. package/src/modules/experiments/properties.js +129 -0
  17. package/src/modules/experiments_variations/index.js +10 -0
  18. package/src/modules/experiments_variations/properties.js +193 -0
  19. package/src/modules/integrations_accounts/index.js +11 -0
  20. package/src/modules/integrations_accounts/properties.js +140 -0
  21. package/src/modules/integrations_pages_elements/index.js +12 -0
  22. package/src/modules/integrations_pages_elements/properties.js +283 -0
  23. package/src/modules/pages/index.js +10 -0
  24. package/src/modules/pages/properties.js +170 -0
  25. package/src/modules/pages_blocks_folders/index.js +10 -0
  26. package/src/modules/pages_blocks_folders/properties.js +90 -0
  27. package/src/modules/pages_blocks_models/index.js +12 -0
  28. package/src/modules/pages_blocks_models/properties.js +91 -0
  29. package/src/modules/pages_editor_photos/index.js +10 -0
  30. package/src/modules/pages_editor_photos/properties.js +138 -0
  31. package/src/modules/pages_editor_photos_folders/index.js +10 -0
  32. package/src/modules/pages_editor_photos_folders/properties.js +92 -0
  33. package/src/modules/projects/index.js +10 -0
  34. package/src/modules/projects/properties.js +120 -0
  35. package/src/modules/projects_domains/index.js +10 -0
  36. package/src/modules/projects_domains/properties.js +65 -0
  37. package/src/modules/projects_users/index.js +10 -0
  38. package/src/modules/projects_users/properties.js +66 -0
  39. package/src/modules/templates/index.js +10 -0
  40. package/src/modules/templates/properties.js +86 -0
  41. package/src/modules/templates_blocks/index.js +10 -0
  42. package/src/modules/templates_blocks/properties.js +76 -0
  43. package/src/modules/templates_blocks_folders/index.js +11 -0
  44. package/src/modules/templates_blocks_folders/properties.js +54 -0
  45. package/src/modules/templates_categories/index.js +12 -0
  46. package/src/modules/templates_categories/properties.js +100 -0
  47. package/src/modules/templates_categories_links/index.js +12 -0
  48. package/src/modules/templates_categories_links/properties.js +63 -0
  49. package/src/modules/templates_groups/index.js +11 -0
  50. package/src/modules/templates_groups/properties.js +42 -0
  51. package/src/modules/views/index.js +12 -0
  52. package/src/modules/views/properties.js +44 -0
  53. package/src/modules/views/responses.js +57 -0
  54. package/src/modules/views/routes.js +56 -0
  55. package/src/modules/views_resume/index.js +10 -0
  56. package/src/modules/views_resume/properties.js +46 -0
  57. package/src/product.js +87 -0
  58. package/src/shared/parameters.js +19 -0
  59. package/src/shared/query.js +32 -0
  60. 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,7 @@
1
+ {
2
+ "name": "@greatapps/greatagents",
3
+ "version": "0.0.1",
4
+ "description": "Schemas para GreatAgents",
5
+ "main": "./src/product.js",
6
+ "type": "module"
7
+ }
@@ -0,0 +1,10 @@
1
+ import { properties } from "./properties.js";
2
+
3
+ export default {
4
+ product: "greatpages",
5
+ name: "base_domains",
6
+ cache: { ttlView: 30, ttlList: 0 },
7
+ params: [ "id_wl" ],
8
+ properties: properties,
9
+ routes: {}
10
+ };
@@ -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
+ };