funifier-mcp 0.1.0 → 0.2.0

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 (111) hide show
  1. package/README.md +182 -351
  2. package/datasource-funifier-docs/knowledge/guides/aggregates.md +152 -0
  3. package/datasource-funifier-docs/knowledge/guides/database-access.md +132 -0
  4. package/datasource-funifier-docs/knowledge/guides/java-entities.md +373 -0
  5. package/datasource-funifier-docs/knowledge/guides/java-libraries.md +330 -0
  6. package/datasource-funifier-docs/knowledge/guides/java-managers.md +509 -0
  7. package/datasource-funifier-docs/knowledge/guides/triggers-guide.md +271 -0
  8. package/datasource-funifier-docs/knowledge/index.md +121 -0
  9. package/datasource-funifier-docs/knowledge/modules/achievement.md +46 -0
  10. package/datasource-funifier-docs/knowledge/modules/action-log.md +88 -0
  11. package/datasource-funifier-docs/knowledge/modules/action.md +80 -0
  12. package/datasource-funifier-docs/knowledge/modules/auth.md +104 -0
  13. package/datasource-funifier-docs/knowledge/modules/avatar.md +28 -0
  14. package/datasource-funifier-docs/knowledge/modules/backup.md +40 -0
  15. package/datasource-funifier-docs/knowledge/modules/challenge.md +91 -0
  16. package/datasource-funifier-docs/knowledge/modules/compact.md +40 -0
  17. package/datasource-funifier-docs/knowledge/modules/competition.md +149 -0
  18. package/datasource-funifier-docs/knowledge/modules/crossword.md +41 -0
  19. package/datasource-funifier-docs/knowledge/modules/csv-data.md +30 -0
  20. package/datasource-funifier-docs/knowledge/modules/custom-object.md +53 -0
  21. package/datasource-funifier-docs/knowledge/modules/database.md +241 -0
  22. package/datasource-funifier-docs/knowledge/modules/folder.md +111 -0
  23. package/datasource-funifier-docs/knowledge/modules/kpi-formulas.md +23 -0
  24. package/datasource-funifier-docs/knowledge/modules/lastmile.md +45 -0
  25. package/datasource-funifier-docs/knowledge/modules/leaderboard.md +98 -0
  26. package/datasource-funifier-docs/knowledge/modules/level.md +83 -0
  27. package/datasource-funifier-docs/knowledge/modules/lottery.md +112 -0
  28. package/datasource-funifier-docs/knowledge/modules/marketplace.md +27 -0
  29. package/datasource-funifier-docs/knowledge/modules/mystery.md +82 -0
  30. package/datasource-funifier-docs/knowledge/modules/notification.md +40 -0
  31. package/datasource-funifier-docs/knowledge/modules/patterns.md +1096 -0
  32. package/datasource-funifier-docs/knowledge/modules/player.md +101 -0
  33. package/datasource-funifier-docs/knowledge/modules/point.md +67 -0
  34. package/datasource-funifier-docs/knowledge/modules/public.md +253 -0
  35. package/datasource-funifier-docs/knowledge/modules/question.md +136 -0
  36. package/datasource-funifier-docs/knowledge/modules/quiz.md +163 -0
  37. package/datasource-funifier-docs/knowledge/modules/scheduler.md +58 -0
  38. package/datasource-funifier-docs/knowledge/modules/security.md +169 -0
  39. package/datasource-funifier-docs/knowledge/modules/staging.md +28 -0
  40. package/datasource-funifier-docs/knowledge/modules/static-repo.md +41 -0
  41. package/datasource-funifier-docs/knowledge/modules/story.md +42 -0
  42. package/datasource-funifier-docs/knowledge/modules/studio-page.md +180 -0
  43. package/datasource-funifier-docs/knowledge/modules/swap.md +132 -0
  44. package/datasource-funifier-docs/knowledge/modules/team.md +75 -0
  45. package/datasource-funifier-docs/knowledge/modules/trigger.md +189 -0
  46. package/datasource-funifier-docs/knowledge/modules/upload.md +155 -0
  47. package/datasource-funifier-docs/knowledge/modules/virtual-good.md +99 -0
  48. package/datasource-funifier-docs/knowledge/modules/webhook.md +41 -0
  49. package/datasource-funifier-docs/knowledge/modules/websocket.md +41 -0
  50. package/datasource-funifier-docs/knowledge/modules/widget.md +42 -0
  51. package/datasource-funifier-docs/process-gtm-saas.md +143 -0
  52. package/datasource-funifier-docs/process-instagram.md +88 -0
  53. package/datasource-funifier-docs/process.md +1826 -0
  54. package/datasource-funifier-docs/readme.md +132 -0
  55. package/dist/cli/config-writers.d.ts +15 -0
  56. package/dist/cli/config-writers.d.ts.map +1 -0
  57. package/dist/cli/config-writers.js +55 -0
  58. package/dist/cli/config-writers.js.map +1 -0
  59. package/dist/cli/config-writers.test.d.ts +2 -0
  60. package/dist/cli/config-writers.test.d.ts.map +1 -0
  61. package/dist/cli/config-writers.test.js +55 -0
  62. package/dist/cli/config-writers.test.js.map +1 -0
  63. package/dist/cli/copy.d.ts +6 -0
  64. package/dist/cli/copy.d.ts.map +1 -0
  65. package/dist/cli/copy.js +63 -0
  66. package/dist/cli/copy.js.map +1 -0
  67. package/dist/cli/copy.test.d.ts +2 -0
  68. package/dist/cli/copy.test.d.ts.map +1 -0
  69. package/dist/cli/copy.test.js +94 -0
  70. package/dist/cli/copy.test.js.map +1 -0
  71. package/dist/cli/init.d.ts +2 -0
  72. package/dist/cli/init.d.ts.map +1 -0
  73. package/dist/cli/init.js +167 -0
  74. package/dist/cli/init.js.map +1 -0
  75. package/dist/cli/paths.d.ts +7 -0
  76. package/dist/cli/paths.d.ts.map +1 -0
  77. package/dist/cli/paths.js +62 -0
  78. package/dist/cli/paths.js.map +1 -0
  79. package/dist/cli/paths.test.d.ts +2 -0
  80. package/dist/cli/paths.test.d.ts.map +1 -0
  81. package/dist/cli/paths.test.js +50 -0
  82. package/dist/cli/paths.test.js.map +1 -0
  83. package/dist/cli/platforms.d.ts +22 -0
  84. package/dist/cli/platforms.d.ts.map +1 -0
  85. package/dist/cli/platforms.js +50 -0
  86. package/dist/cli/platforms.js.map +1 -0
  87. package/dist/cli/prompts.d.ts +7 -0
  88. package/dist/cli/prompts.d.ts.map +1 -0
  89. package/dist/cli/prompts.js +49 -0
  90. package/dist/cli/prompts.js.map +1 -0
  91. package/dist/index.js +1 -1
  92. package/dist/index.js.map +1 -1
  93. package/dist/mcp/bundle.js +94 -49
  94. package/dist/mcp/index.js +18 -1
  95. package/dist/mcp/index.js.map +1 -1
  96. package/package.json +4 -2
  97. package/skills/funifier-create-action/SKILL.md +86 -86
  98. package/skills/funifier-create-aggregate/SKILL.md +39 -0
  99. package/skills/funifier-create-challenge/SKILL.md +87 -87
  100. package/skills/funifier-create-custom-page/SKILL.md +39 -0
  101. package/skills/funifier-create-leaderboard/SKILL.md +87 -87
  102. package/skills/funifier-create-level/SKILL.md +86 -86
  103. package/skills/funifier-create-point/SKILL.md +86 -86
  104. package/skills/funifier-create-quiz/SKILL.md +86 -86
  105. package/skills/funifier-create-scheduler/SKILL.md +39 -0
  106. package/skills/funifier-create-trigger/SKILL.md +39 -0
  107. package/skills/funifier-create-virtual-good/SKILL.md +86 -86
  108. package/skills/funifier-debug/SKILL.md +90 -90
  109. package/skills/funifier-help/SKILL.md +85 -85
  110. package/skills/funifier-implement-frontend/SKILL.md +89 -89
  111. package/skills/funifier-index/SKILL.md +50 -50
@@ -0,0 +1,241 @@
1
+ # Database (Database)
2
+
3
+ **API Endpoint:** `/v3/database`
4
+
5
+ ## O que é
6
+
7
+ Acesso direto à base de dados para operações avançadas. Oferece ferramentas para criar índices, executar comandos aggregate (MongoDB), importar dados em lote, e muito mais. Permite extrair relatórios personalizados e realizar manipulações complexas diretamente no banco de dados da gamificação. Cada gamificação tem seu próprio banco de dados.
8
+
9
+ ## ⚠️ Requisito de Permissão Especial
10
+
11
+ O endpoint `/v3/database` exige que a palavra **`database`** esteja presente no scope da Role do token, **além** das permissões padrão (`read_all`, `write_all`, `delete_all`). Sem ela:
12
+
13
+ - **POST** retorna `201` mas **NÃO persiste os dados**
14
+ - **GET** retorna `200` com **corpo vazio**
15
+ - **Nenhuma mensagem de erro** é exibida
16
+
17
+ **Scope mínimo para usar database:** `read_all, write_all, delete_all, database`
18
+
19
+ Configurar em: `Studio > Security > Roles`
20
+
21
+ > **Nota:** O jogador precisa fazer login novamente após alteração da Role para obter um token com as novas permissões.
22
+
23
+ ## Quando usar
24
+
25
+ - Para consultas avançadas com aggregates MongoDB
26
+ - Para criar/gerenciar índices de performance
27
+ - Para operações CRUD em qualquer coleção
28
+ - Para inserção em massa (bulk)
29
+ - Para acessar coleções customizadas (sufixo __c)
30
+
31
+ ## API Endpoints
32
+
33
+ ### Listar Coleções
34
+ **Método:** GET
35
+ **Endpoint:** `/v3/database/collections`
36
+ **Descrição:** Lista todas as coleções existentes no banco.
37
+
38
+ ### Buscar Registro por ID
39
+ **Método:** GET
40
+ **Endpoint:** `/v3/database/:collection/:id`
41
+ **Query Params:**
42
+ - `strict=true` — Preserva tipos BSON (datas como `{ $date }`, etc.)
43
+ - Use `me` como ID para buscar dados do player autenticado
44
+
45
+ ### Listar Dados de uma Coleção (com filtro)
46
+ **Método:** GET
47
+ **Endpoint:** `/v3/database/:collection`
48
+ **Query Params:**
49
+ - `q` — Filtro MongoDB (sintaxe Mongo, NÃO JSON). Inserido dentro de `{ $match: { <q> } }`
50
+ - `strict=true` — Preserva tipos BSON
51
+ - `max_results` — Máximo de resultados (default: 100)
52
+
53
+ **Header:**
54
+ - `Range: items=0-19` — Paginação (Range-based)
55
+
56
+ **⚠️ IMPORTANTE:** O parâmetro correto de filtro é `q`, **NÃO** `_filter`. Parâmetros como `_filter`, `_sort`, `_limit` **NÃO existem** neste endpoint e são silenciosamente ignorados.
57
+
58
+ **Exemplos de `q`:**
59
+ ```
60
+ ?q=userId:"ricardo@funifier.com"
61
+ ?q=userId:"ricardo@funifier.com", type:"daily"
62
+ ?q=status:"active", price:{$gte:100}
63
+ ?q=_id:"abc123"
64
+ ```
65
+
66
+ **⚠️ Limitação:** O `GET` não suporta `$sort`. Internamente ele executa `{ $match: { <q> } }` via aggregate, sem estágios adicionais. Para queries com ordenação, use o endpoint `aggregate`.
67
+
68
+ ### Contar Registros
69
+ **Método:** GET
70
+ **Endpoint:** `/v3/database/count?collection=:collection&q=:query`
71
+ **Descrição:** Retorna `{ total: N }`.
72
+
73
+ ### Criar Registro (Upsert)
74
+ **Método:** POST
75
+ **Endpoint:** `/v3/database/:collection`
76
+ **Query Params:**
77
+ - `strict=true` — Para preservar tipos BSON na resposta
78
+
79
+ **Descrição:** Se `_id` não for fornecido, gera automaticamente um GUID curto. Executa triggers `before_create` e `after_create`.
80
+
81
+ **Exemplo de Body:**
82
+ ```json
83
+ {
84
+ "year": 2010,
85
+ "fuel": "gasoline",
86
+ "price": 50000,
87
+ "name": "Civic",
88
+ "description": "Honda Civic",
89
+ "brand": "honda"
90
+ }
91
+ ```
92
+
93
+ ### Atualizar Registro (Save/Upsert)
94
+ **Método:** PUT
95
+ **Endpoint:** `/v3/database/:collection`
96
+ **Query Params:**
97
+ - `strict=true` — Para preservar tipos BSON
98
+
99
+ **Descrição:** Usa `save()` do MongoDB (upsert por `_id`). Executa triggers `before_update` e `after_update`. Se `_id` não existir, gera um novo.
100
+
101
+ **⚠️ Player password safety:** Se a coleção for `player` e o token não tem permissão de ler senha, o PUT automaticamente preserva a senha existente (não sobrescreve com null).
102
+
103
+ **Exemplo de Body:**
104
+ ```json
105
+ {
106
+ "_id": "6553e49815865a7a732f5fc7",
107
+ "year": 2010,
108
+ "fuel": "gasoline",
109
+ "price": 50000,
110
+ "name": "Civic",
111
+ "description": "Honda Civic",
112
+ "brand": "honda"
113
+ }
114
+ ```
115
+
116
+ ### Excluir Registro(s)
117
+ **Método:** DELETE
118
+ **Endpoint:** `/v3/database/:collection?q=:query`
119
+
120
+ **Descrição:** O `q` precisa ter pelo menos 3 caracteres. Executa triggers `before_delete` e `after_delete` se total ≤ 20.000 registros. IDs são identificados antes da exclusão para passar aos triggers.
121
+
122
+ **Exemplos:**
123
+ ```
124
+ DELETE /v3/database/checkin__c?q=_id:"abc123"
125
+ DELETE /v3/database/signup__c?q=userId:"test@test.com"
126
+ ```
127
+
128
+ ### Executar Agregações
129
+ **Método:** POST
130
+ **Endpoint:** `/v3/database/:collection/aggregate`
131
+ **Query Params:**
132
+ - `q` — Filtro `$match` inicial (opcional, aplicado antes do pipeline)
133
+ - `strict=true` — Preserva tipos BSON
134
+ - `out` — Coleção destino para gravar resultados (deve terminar em `__c`)
135
+ - `out_operation=replace` — Limpa coleção destino antes de gravar
136
+
137
+ **Header:**
138
+ - `Range: items=0-19` — Paginação
139
+
140
+ **Descrição:** O `q` é aplicado como primeiro `$match`. Os estágios do body são adicionados em sequência após ele. Usa `allowDiskUse(true)` automaticamente.
141
+
142
+ **Exemplo — Query com filtro e ordenação:**
143
+ ```
144
+ POST /v3/database/body_checkin__c/aggregate?q=userId:"ricardo@funifier.com"&strict=true
145
+ Range: items=0-19
146
+
147
+ [
148
+ { "$sort": { "created": -1 } }
149
+ ]
150
+ ```
151
+
152
+ **Exemplo — Agregação completa:**
153
+ ```
154
+ POST /v3/database/action_log/aggregate?strict=true
155
+
156
+ [
157
+ { "$match": { "actionId": "sell", "userId": "jerry" } },
158
+ { "$group": { "_id": "$userId", "total": { "$sum": "$attributes.price" } } },
159
+ { "$sort": { "total": -1 } },
160
+ { "$limit": 10 }
161
+ ]
162
+ ```
163
+
164
+ ### Inserção em Massa (Bulk)
165
+ **Método:** POST
166
+ **Endpoint:** `/v3/database/:collection/bulk`
167
+ **Query Params:**
168
+ - `async=true` — Processamento assíncrono (para grandes volumes)
169
+
170
+ **Exemplo de Body:**
171
+ ```json
172
+ [
173
+ { "_id": "car001", "year": 2010, "price": 60000, "name": "Honda Civic", "brand": "honda" },
174
+ { "_id": "car002", "year": 2012, "price": 70000, "name": "Toyota Corolla", "brand": "toyota" }
175
+ ]
176
+ ```
177
+
178
+ ### Drop Collection
179
+ **Método:** DELETE
180
+ **Endpoint:** `/v3/database/:collection/drop`
181
+ **⚠️ CUIDADO:** Remove a coleção inteira!
182
+
183
+ ### Listar Índices
184
+ **Método:** GET
185
+ **Endpoint:** `/v3/database/:collection/index`
186
+
187
+ ### Criar Índice
188
+ **Método:** POST
189
+ **Endpoint:** `/v3/database/:collection/index`
190
+
191
+ **Exemplo de Body:**
192
+ ```json
193
+ { "fuel": 1 }
194
+ ```
195
+
196
+ ### Excluir Índice
197
+ **Método:** DELETE
198
+ **Endpoint:** `/v3/database/:collection/index/:index_name`
199
+
200
+ ## Paginação
201
+
202
+ Usa header `Range` no padrão HTTP Range:
203
+ ```
204
+ Range: items=0-9 (primeiros 10)
205
+ Range: items=10-19 (próximos 10)
206
+ Range: items=0-99 (primeiros 100)
207
+ ```
208
+
209
+ Resposta inclui header `Content-Range` com total de registros.
210
+
211
+ Default sem Range: retorna até 100 registros.
212
+
213
+ ## Strict Mode (BSON Types)
214
+
215
+ Quando `strict=true`:
216
+ - **Datas** são retornadas como `{ "$date": "2026-03-06T10:00:00.000Z" }` (ISO-8601)
217
+ - **Sem strict**, datas podem vir como timestamps numéricos ou strings
218
+
219
+ Para **gravar** datas tipadas, enviar como:
220
+ ```json
221
+ { "created": { "$date": "2026-03-06T10:00:00.000Z" } }
222
+ ```
223
+
224
+ > **Regra:** Sempre use `strict=true` em GETs para preservar tipos BSON. Sem ele, datas viram strings/números e quebram queries.
225
+
226
+ ## Criptografia de Campos (v4.0)
227
+
228
+ Se habilitada (Studio > Security > Field Encryption):
229
+ - Campos marcados são criptografados no POST/PUT e descriptografados no GET
230
+ - Requer token com permissão `readEncryptedValues`
231
+ - Usa AES com chave secreta do tenant
232
+
233
+ ## Validações e Testes
234
+
235
+ - [ ] Listar coleções retorna resultado
236
+ - [ ] CRUD funciona na coleção alvo
237
+ - [ ] Filtro `q` funciona corretamente
238
+ - [ ] Aggregate com `q` + pipeline retorna dados filtrados e ordenados
239
+ - [ ] Bulk insert registra múltiplos itens
240
+ - [ ] Índices são criados/removidos corretamente
241
+ - [ ] `strict=true` preserva tipos BSON
@@ -0,0 +1,111 @@
1
+ # Folder (Pasta)
2
+
3
+ **Acesso Studio:** `/studio/folder`
4
+ **API Endpoint:** `/v3/folder`
5
+
6
+ ## O que é
7
+
8
+ Organização de conteúdos e monitoramento do progresso em cursos ou trilhas. Permite criar pastas virtuais para agrupar conteúdos como quizzes, desafios, materiais de estudo e jogos, facilitando o acompanhamento do progresso dos jogadores em jornadas de aprendizagem ou trilhas gamificadas.
9
+
10
+ ## Quando usar
11
+
12
+ - Para estruturar cursos online
13
+ - Para criar trilhas de capacitação
14
+ - Para acompanhar progresso em treinamentos
15
+ - Para organizar conteúdos em hierarquias (módulos → aulas → conteúdos)
16
+
17
+ ## Checklist de Configuração no Studio
18
+
19
+ - [ ] Criar estrutura hierárquica de pastas
20
+ - [ ] Definir títulos das pastas
21
+ - [ ] Associar conteúdos às pastas (quizzes, desafios, textos)
22
+ - [ ] Definir tipos de conteúdo (folder_content_type)
23
+ - [ ] Configurar pasta-pai (parent) para hierarquia
24
+
25
+ ## API Endpoints
26
+
27
+ ### Listar Pastas
28
+ **Método:** GET
29
+ **Endpoint:** `/v3/database/folder`
30
+
31
+ ### Criar Pasta
32
+ **Método:** POST
33
+ **Endpoint:** `/v3/folder`
34
+
35
+ **Exemplo de Body:**
36
+ ```json
37
+ {
38
+ "title": "CoreDrives",
39
+ "parent": "D0MmmNf"
40
+ }
41
+ ```
42
+
43
+ ### Deletar Pasta
44
+ **Método:** DELETE
45
+ **Endpoint:** `/v3/folder/:id`
46
+
47
+ ### Obter Breadcrumb
48
+ **Método:** POST
49
+ **Endpoint:** `/v3/folder/breadcrumb`
50
+
51
+ **Exemplo de Body:**
52
+ ```json
53
+ {
54
+ "folder": "CD1"
55
+ }
56
+ ```
57
+
58
+ ### Listar Tipos de Conteúdo
59
+ **Método:** GET
60
+ **Endpoint:** `/v3/database/folder_content_type`
61
+
62
+ ### Criar/Atualizar Tipo de Conteúdo
63
+ **Método:** PUT
64
+ **Endpoint:** `/v3/database/folder_content_type`
65
+
66
+ **Exemplo de Body:**
67
+ ```json
68
+ {
69
+ "_id": "text",
70
+ "input": "formulary",
71
+ "form": [
72
+ { "name": "title", "type": "string", "title": "Title" },
73
+ { "name": "content", "type": "text", "title": "Content" }
74
+ ],
75
+ "title": "Text",
76
+ "entity": "text__c"
77
+ }
78
+ ```
79
+
80
+ ## Casos de Uso Comuns
81
+
82
+ - **Curso Online:** Pasta raiz "Curso de Vendas" → Subpastas "Módulo 1", "Módulo 2" → Conteúdos (textos, vídeos, quizzes)
83
+ - **Trilha de Capacitação:** Pastas representam etapas; cada etapa contém materiais e avaliações
84
+ - **Catálogo de Produtos:** Pastas como categorias; conteúdos como fichas de produto
85
+ - **Onboarding:** Pastas representam fases do onboarding; progresso monitora completude
86
+
87
+ ## Progresso do Jogador
88
+
89
+ O Folder monitora automaticamente o progresso do jogador dentro da árvore de diretórios. Isso permite:
90
+
91
+ - Saber que um jogador completou X% de um curso
92
+ - Registrar action logs ao progredir (aciona técnicas de jogos)
93
+ - Criar desafios vinculados à completude de um folder (ex: "Complete o curso para ganhar 500 XP")
94
+
95
+ ## Integração com Outras Técnicas
96
+
97
+ | Técnica | Integração |
98
+ |---------|-----------|
99
+ | **Challenge** | Desafio completado quando jogador termina todos os itens de um folder |
100
+ | **Quiz** | Quizzes podem ser conteúdos dentro de um folder |
101
+ | **Point** | Pontos concedidos ao progredir no folder |
102
+ | **Achievement** | Conquista desbloqueada ao completar 100% do folder |
103
+
104
+ ## Validações e Testes
105
+
106
+ - [ ] Pasta aparece na lista
107
+ - [ ] Hierarquia pai-filho funciona
108
+ - [ ] Breadcrumb retorna caminho correto
109
+ - [ ] Conteúdos são associados corretamente
110
+ - [ ] Progresso do jogador é calculado corretamente
111
+ - [ ] Action log é gerado ao progredir
@@ -0,0 +1,23 @@
1
+ # KPI Formulas (Fórmulas de KPI)
2
+
3
+ ## O que é
4
+
5
+ Configuração de regras e cálculos avançados para avaliar ações dos jogadores. Permite criar fórmulas customizadas para avaliação de desempenho e resultados, indo além das regras padrão dos outros módulos.
6
+
7
+ ## Quando usar
8
+
9
+ - Para cálculos avançados de desempenho que os módulos padrão não atendem
10
+ - Para fórmulas considerando múltiplos critérios (quantidade, valor, tempo)
11
+ - Para regras avançadas de rankings
12
+ - **Importante:** usar com critério, apenas quando recursos padrão não atendem
13
+
14
+ ## Checklist de Configuração
15
+
16
+ - [ ] Definir a fórmula de cálculo
17
+ - [ ] Vincular aos desafios ou rankings relevantes
18
+ - [ ] Testar com dados reais
19
+
20
+ ## Validações e Testes
21
+
22
+ - [ ] Fórmula retorna resultados esperados
23
+ - [ ] Cálculo funciona com diferentes combinações de dados
@@ -0,0 +1,45 @@
1
+ # LastMile (Última Milha)
2
+
3
+ **Acesso Studio:** `/studio/lastmile`
4
+ **API Endpoint:** `/v3/lastmile`
5
+
6
+ ## O que é
7
+
8
+ Envio de mensagens motivacionais quando o jogador está próximo de uma meta. Permite configurar mensagens automáticas para engajar e lembrar os jogadores sobre metas e desafios que estão prestes a serem concluídos, aumentando a taxa de finalização.
9
+
10
+ ## Quando usar
11
+
12
+ - Para lembrar jogadores que estão perto de completar desafios
13
+ - Para aumentar taxa de conclusão de metas
14
+ - Para enviar mensagens motivacionais personalizadas
15
+ - Para engajar jogadores que estão a 80-90% de uma meta
16
+
17
+ ## Dependências
18
+
19
+ - **Challenge**: desafios devem existir para monitorar progresso
20
+
21
+ ## Checklist de Configuração no Studio
22
+
23
+ - [ ] Definir condição de disparo (% de progresso)
24
+ - [ ] Definir mensagem motivacional
25
+ - [ ] Vincular ao desafio ou meta específica
26
+
27
+ ## API Endpoints
28
+
29
+ ### Listar LastMile
30
+ **Método:** GET
31
+ **Endpoint:** `/v3/lastmile`
32
+
33
+ ### Criar LastMile
34
+ **Método:** POST
35
+ **Endpoint:** `/v3/lastmile`
36
+
37
+ ### Deletar LastMile
38
+ **Método:** DELETE
39
+ **Endpoint:** `/v3/lastmile/:id`
40
+
41
+ ## Validações e Testes
42
+
43
+ - [ ] Configuração de LastMile aparece na lista
44
+ - [ ] Mensagem é disparada ao atingir % configurado
45
+ - [ ] Jogador recebe notificação corretamente
@@ -0,0 +1,98 @@
1
+ # Leaderboard (Ranking)
2
+
3
+ **Acesso Studio:** `/studio/leaderboard`
4
+ **API Endpoint:** `/v3/leaderboard`
5
+
6
+ ## O que é
7
+
8
+ Criação e gestão de rankings. Permite comparar o desempenho dos jogadores utilizando diferentes critérios, como pontos, tempo, ou métricas customizadas. Rankings podem ser individuais, por equipes, por período ou por status.
9
+
10
+ ## Quando usar
11
+
12
+ - Para criar competição saudável entre jogadores
13
+ - Para dar visibilidade ao desempenho
14
+ - Para motivar através de comparação social
15
+ - Para rankings semanais, mensais ou em tempo real
16
+
17
+ ## Dependências
18
+
19
+ - **Point** ou **Action**: o critério de ranking deve estar configurado
20
+
21
+ ## Checklist de Configuração no Studio
22
+
23
+ - [ ] Definir título e descrição
24
+ - [ ] Definir tipo de principal (0 = jogador, 1 = equipe)
25
+ - [ ] Definir operação (tipo de métrica, item, ordenação)
26
+ - [ ] Definir período (semanal, mensal, tempo real)
27
+ - [ ] Vincular técnicas de jogo
28
+
29
+ ## API Endpoints
30
+
31
+ ### Listar Leaderboards
32
+ **Método:** GET
33
+ **Endpoint:** `/v3/leaderboard`
34
+
35
+ **Exemplo de Resposta:**
36
+ ```json
37
+ [
38
+ {
39
+ "title": "Top Players",
40
+ "description": "Players with the most points xp in the week",
41
+ "principalType": 0,
42
+ "operation": {
43
+ "type": 3,
44
+ "achievement_type": 0,
45
+ "item": "xp",
46
+ "filters": [],
47
+ "sort": -1,
48
+ "sub": false
49
+ },
50
+ "period": {
51
+ "type": 0,
52
+ "timeAmount": 1,
53
+ "timeScale": 6
54
+ },
55
+ "techniques": ["GT03"],
56
+ "_id": "DTjTvZ5"
57
+ }
58
+ ]
59
+ ```
60
+
61
+ ### Criar Leaderboard
62
+ **Método:** POST
63
+ **Endpoint:** `/v3/leaderboard`
64
+ (Body igual ao exemplo de resposta acima)
65
+
66
+ ### Deletar Leaderboard
67
+ **Método:** DELETE
68
+ **Endpoint:** `/v3/leaderboard/:id`
69
+
70
+ ### Obter Lista de Líderes
71
+ **Método:** POST
72
+ **Endpoint:** `/v3/leaderboard/:id/leader/aggregate?period=&live=true`
73
+
74
+ **Exemplo de Resposta:**
75
+ ```json
76
+ [
77
+ {
78
+ "_id": "tom_D0zCMvq",
79
+ "total": 30,
80
+ "position": 1,
81
+ "move": "up",
82
+ "player": "tom",
83
+ "name": "Tom",
84
+ "boardId": "DTjTvZ5"
85
+ }
86
+ ]
87
+ ```
88
+
89
+ ### Resetar Cache
90
+ **Método:** GET
91
+ **Endpoint:** `/v3/leaderboard/reset`
92
+
93
+ ## Validações e Testes
94
+
95
+ - [ ] Leaderboard aparece na lista GET /v3/leaderboard
96
+ - [ ] Lista de líderes retorna jogadores ordenados
97
+ - [ ] Período está configurado corretamente
98
+ - [ ] Cache pode ser resetado com sucesso
@@ -0,0 +1,83 @@
1
+ # Level (Nível)
2
+
3
+ **Acesso Studio:** `/studio/level`
4
+ **API Endpoint:** `/v3/level`
5
+
6
+ ## O que é
7
+
8
+ Sistema de progressão por níveis. Permite definir a progressão dos jogadores com base em pontos acumulados ou outros critérios, atribuindo títulos ou benefícios a cada nível. Pode-se exigir desafios específicos para desbloquear certos níveis.
9
+
10
+ ## Quando usar
11
+
12
+ - Para criar senso de progressão e conquista
13
+ - Para desbloquear funcionalidades por nível
14
+ - Para segmentar jogadores por experiência
15
+ - Exemplos: Júnior → Pleno → Sênior; faixas coloridas
16
+
17
+ ## Dependências
18
+
19
+ - **Point**: a categoria de ponto usada para progressão deve existir antes
20
+ - **Configuração global**: definir qual ponto controla os níveis via `/v3/database/level_config`
21
+
22
+ ## Checklist de Configuração no Studio
23
+
24
+ - [ ] Definir _id do nível (ex: L0, L1, L2)
25
+ - [ ] Definir nome do nível (ex: "Apprentice", "Master")
26
+ - [ ] Definir descrição motivadora
27
+ - [ ] Definir minPoints (pontuação mínima crescente)
28
+ - [ ] Definir position (ordem sequencial, iniciando em 0)
29
+ - [ ] Configurar categoria de ponto global (level_config)
30
+
31
+ ## API Endpoints
32
+
33
+ ### Listar Níveis
34
+ **Método:** GET
35
+ **Endpoint:** `/v3/level`
36
+
37
+ ### Criar Nível
38
+ **Método:** POST
39
+ **Endpoint:** `/v3/level`
40
+
41
+ **Exemplo de Body:**
42
+ ```json
43
+ {
44
+ "level": "Apprentice",
45
+ "position": 0,
46
+ "description": "It indicates that you are learning and growing.",
47
+ "minPoints": 10,
48
+ "notifications": [],
49
+ "requirements": [],
50
+ "i18n": {},
51
+ "extra": {},
52
+ "techniques": ["GT85"],
53
+ "_id": "L0"
54
+ }
55
+ ```
56
+
57
+ ### Excluir Nível
58
+ **Método:** DELETE
59
+ **Endpoint:** `/v3/level/:id`
60
+
61
+ ### Configurar Ponto Global para Níveis
62
+ **Método:** PUT
63
+ **Endpoint:** `/v3/database/level_config`
64
+
65
+ **Exemplo de Body:**
66
+ ```json
67
+ {
68
+ "_id": "global",
69
+ "pointCategory": "xp"
70
+ }
71
+ ```
72
+
73
+ ### Atualizar Posições dos Níveis
74
+ **Método:** PUT
75
+ **Endpoint:** `/v3/level/position`
76
+ **Descrição:** Recalcula posições com base no minPoints.
77
+
78
+ ## Validações e Testes
79
+
80
+ - [ ] Níveis aparecem na lista GET /v3/level
81
+ - [ ] minPoints é crescente entre níveis
82
+ - [ ] level_config aponta para o ponto correto
83
+ - [ ] Ao ganhar pontos suficientes, jogador sobe de nível automaticamente