funifier-mcp 0.1.0 → 0.2.3

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 (114) hide show
  1. package/.cursor/rules/funifier.mdc +91 -0
  2. package/.github/copilot-instructions.md +83 -0
  3. package/AGENTS.md +97 -0
  4. package/README.md +351 -351
  5. package/datasource-funifier-docs/knowledge/guides/aggregates.md +152 -0
  6. package/datasource-funifier-docs/knowledge/guides/database-access.md +132 -0
  7. package/datasource-funifier-docs/knowledge/guides/java-entities.md +373 -0
  8. package/datasource-funifier-docs/knowledge/guides/java-libraries.md +330 -0
  9. package/datasource-funifier-docs/knowledge/guides/java-managers.md +509 -0
  10. package/datasource-funifier-docs/knowledge/guides/triggers-guide.md +271 -0
  11. package/datasource-funifier-docs/knowledge/index.md +121 -0
  12. package/datasource-funifier-docs/knowledge/modules/achievement.md +46 -0
  13. package/datasource-funifier-docs/knowledge/modules/action-log.md +88 -0
  14. package/datasource-funifier-docs/knowledge/modules/action.md +80 -0
  15. package/datasource-funifier-docs/knowledge/modules/auth.md +104 -0
  16. package/datasource-funifier-docs/knowledge/modules/avatar.md +28 -0
  17. package/datasource-funifier-docs/knowledge/modules/backup.md +40 -0
  18. package/datasource-funifier-docs/knowledge/modules/challenge.md +91 -0
  19. package/datasource-funifier-docs/knowledge/modules/compact.md +40 -0
  20. package/datasource-funifier-docs/knowledge/modules/competition.md +149 -0
  21. package/datasource-funifier-docs/knowledge/modules/crossword.md +41 -0
  22. package/datasource-funifier-docs/knowledge/modules/csv-data.md +30 -0
  23. package/datasource-funifier-docs/knowledge/modules/custom-object.md +53 -0
  24. package/datasource-funifier-docs/knowledge/modules/database.md +241 -0
  25. package/datasource-funifier-docs/knowledge/modules/folder.md +111 -0
  26. package/datasource-funifier-docs/knowledge/modules/kpi-formulas.md +23 -0
  27. package/datasource-funifier-docs/knowledge/modules/lastmile.md +45 -0
  28. package/datasource-funifier-docs/knowledge/modules/leaderboard.md +98 -0
  29. package/datasource-funifier-docs/knowledge/modules/level.md +83 -0
  30. package/datasource-funifier-docs/knowledge/modules/lottery.md +112 -0
  31. package/datasource-funifier-docs/knowledge/modules/marketplace.md +27 -0
  32. package/datasource-funifier-docs/knowledge/modules/mystery.md +82 -0
  33. package/datasource-funifier-docs/knowledge/modules/notification.md +40 -0
  34. package/datasource-funifier-docs/knowledge/modules/patterns.md +1096 -0
  35. package/datasource-funifier-docs/knowledge/modules/player.md +101 -0
  36. package/datasource-funifier-docs/knowledge/modules/point.md +67 -0
  37. package/datasource-funifier-docs/knowledge/modules/public.md +253 -0
  38. package/datasource-funifier-docs/knowledge/modules/question.md +136 -0
  39. package/datasource-funifier-docs/knowledge/modules/quiz.md +163 -0
  40. package/datasource-funifier-docs/knowledge/modules/scheduler.md +58 -0
  41. package/datasource-funifier-docs/knowledge/modules/security.md +169 -0
  42. package/datasource-funifier-docs/knowledge/modules/staging.md +28 -0
  43. package/datasource-funifier-docs/knowledge/modules/static-repo.md +41 -0
  44. package/datasource-funifier-docs/knowledge/modules/story.md +42 -0
  45. package/datasource-funifier-docs/knowledge/modules/studio-page.md +180 -0
  46. package/datasource-funifier-docs/knowledge/modules/swap.md +132 -0
  47. package/datasource-funifier-docs/knowledge/modules/team.md +75 -0
  48. package/datasource-funifier-docs/knowledge/modules/trigger.md +189 -0
  49. package/datasource-funifier-docs/knowledge/modules/upload.md +155 -0
  50. package/datasource-funifier-docs/knowledge/modules/virtual-good.md +99 -0
  51. package/datasource-funifier-docs/knowledge/modules/webhook.md +41 -0
  52. package/datasource-funifier-docs/knowledge/modules/websocket.md +41 -0
  53. package/datasource-funifier-docs/knowledge/modules/widget.md +42 -0
  54. package/datasource-funifier-docs/process-gtm-saas.md +143 -0
  55. package/datasource-funifier-docs/process-instagram.md +88 -0
  56. package/datasource-funifier-docs/process.md +1826 -0
  57. package/datasource-funifier-docs/readme.md +132 -0
  58. package/dist/cli/config-writers.d.ts +15 -0
  59. package/dist/cli/config-writers.d.ts.map +1 -0
  60. package/dist/cli/config-writers.js +55 -0
  61. package/dist/cli/config-writers.js.map +1 -0
  62. package/dist/cli/config-writers.test.d.ts +2 -0
  63. package/dist/cli/config-writers.test.d.ts.map +1 -0
  64. package/dist/cli/config-writers.test.js +55 -0
  65. package/dist/cli/config-writers.test.js.map +1 -0
  66. package/dist/cli/copy.d.ts +6 -0
  67. package/dist/cli/copy.d.ts.map +1 -0
  68. package/dist/cli/copy.js +63 -0
  69. package/dist/cli/copy.js.map +1 -0
  70. package/dist/cli/copy.test.d.ts +2 -0
  71. package/dist/cli/copy.test.d.ts.map +1 -0
  72. package/dist/cli/copy.test.js +94 -0
  73. package/dist/cli/copy.test.js.map +1 -0
  74. package/dist/cli/init.d.ts +2 -0
  75. package/dist/cli/init.d.ts.map +1 -0
  76. package/dist/cli/init.js +167 -0
  77. package/dist/cli/init.js.map +1 -0
  78. package/dist/cli/paths.d.ts +7 -0
  79. package/dist/cli/paths.d.ts.map +1 -0
  80. package/dist/cli/paths.js +62 -0
  81. package/dist/cli/paths.js.map +1 -0
  82. package/dist/cli/paths.test.d.ts +2 -0
  83. package/dist/cli/paths.test.d.ts.map +1 -0
  84. package/dist/cli/paths.test.js +50 -0
  85. package/dist/cli/paths.test.js.map +1 -0
  86. package/dist/cli/platforms.d.ts +22 -0
  87. package/dist/cli/platforms.d.ts.map +1 -0
  88. package/dist/cli/platforms.js +50 -0
  89. package/dist/cli/platforms.js.map +1 -0
  90. package/dist/cli/prompts.d.ts +7 -0
  91. package/dist/cli/prompts.d.ts.map +1 -0
  92. package/dist/cli/prompts.js +49 -0
  93. package/dist/cli/prompts.js.map +1 -0
  94. package/dist/index.js +1 -1
  95. package/dist/index.js.map +1 -1
  96. package/dist/mcp/bundle.js +98 -50
  97. package/dist/mcp/index.js +18 -1
  98. package/dist/mcp/index.js.map +1 -1
  99. package/package.json +70 -65
  100. package/skills/funifier-create-action/SKILL.md +86 -86
  101. package/skills/funifier-create-aggregate/SKILL.md +126 -87
  102. package/skills/funifier-create-challenge/SKILL.md +87 -87
  103. package/skills/funifier-create-custom-page/SKILL.md +126 -87
  104. package/skills/funifier-create-leaderboard/SKILL.md +87 -87
  105. package/skills/funifier-create-level/SKILL.md +86 -86
  106. package/skills/funifier-create-point/SKILL.md +86 -86
  107. package/skills/funifier-create-quiz/SKILL.md +86 -86
  108. package/skills/funifier-create-scheduler/SKILL.md +126 -87
  109. package/skills/funifier-create-trigger/SKILL.md +127 -88
  110. package/skills/funifier-create-virtual-good/SKILL.md +86 -86
  111. package/skills/funifier-debug/SKILL.md +90 -90
  112. package/skills/funifier-help/SKILL.md +85 -85
  113. package/skills/funifier-implement-frontend/SKILL.md +89 -89
  114. package/skills/funifier-index/SKILL.md +50 -50
@@ -0,0 +1,271 @@
1
+ # Triggers Funifier
2
+
3
+ Triggers são códigos JAVA executados dentro do FUNIFIER ENGINE quando um evento específico acontece na gamificação. Oferecem flexibilidade para manipular informações em tempo real, permitindo mudar o comportamento padrão das técnicas de jogos e funcionalidades da plataforma.
4
+
5
+ **Acesso Studio:** `/studio/trigger`
6
+ **API Endpoint:** `/v3/trigger`
7
+
8
+ ## Configuração de uma Trigger
9
+
10
+ Uma trigger é composta de três informações essenciais:
11
+ 1. **Evento** (`event`): quando a trigger deve ser executada
12
+ 2. **Entidade** (`entity`): que tipo de objeto está vinculado ao evento
13
+ 3. **Script** (`script`): código Java a ser executado
14
+
15
+ ```json
16
+ {
17
+ "name": "Make the player's name uppercase",
18
+ "_id": "DTv7uHc",
19
+ "description": "Before creating the player, change the letters of the name to uppercase",
20
+ "entity": "player",
21
+ "event": "before_create",
22
+ "script": "void trigger(event, entity, player, database){ entity.name = entity.name.toUpperCase(); }"
23
+ }
24
+ ```
25
+
26
+ ## Eventos e Entidades
27
+
28
+ ### Eventos
29
+
30
+ | Evento | Quando é acionado |
31
+ |--------|-------------------|
32
+ | `before_create` | Antes de criar no banco |
33
+ | `after_create` | Depois de criar no banco |
34
+ | `before_update` | Antes de atualizar |
35
+ | `after_delete` | Depois de deletar |
36
+ | `before_win` | Antes de conquistar |
37
+ | `after_win` | Depois de conquistar |
38
+
39
+ ### Combinações Comuns
40
+
41
+ | Evento | Entidade | Quando é acionado | Tipo do entity |
42
+ |--------|----------|-------------------|----------------|
43
+ | `before_create` | `player` | Antes de cadastrar jogador | Player |
44
+ | `after_create` | `player` | Depois de cadastrar jogador | Player |
45
+ | `before_update` | `player` | Antes de alterar jogador | Player |
46
+ | `after_delete` | `player` | Depois de remover jogador | Player |
47
+ | `after_create` | `challenge` | Depois de criar desafio | Challenge |
48
+ | `after_win` | `challenge` | Depois de completar desafio | Achievement |
49
+ | `before_create` | `action` | Antes de criar ação | Action |
50
+ | `before_win` | `action` | Antes de registrar action log | ActionLog |
51
+ | `after_win` | `level` | Depois de subir de nível | Achievement |
52
+ | `after_win` | `catalog_item` | Depois de comprar item | Achievement |
53
+ | `after_win` | `lottery` | Depois de ser sorteado | Achievement |
54
+ | `after_win` | `mystery_box` | Depois de ganhar prêmio surpresa | Achievement |
55
+ | `after_win` | `competition` | Depois de vencer competição | Achievement |
56
+ | `after_create` | `question_log` | Depois de responder pergunta | QuestionLog |
57
+ | `before_create` | `achievement` | Antes de registrar recompensa | Achievement |
58
+ | `before_create` | `<custom>__c` | Antes de criar objeto customizado | HashMap |
59
+
60
+ ## Parâmetros do Script
61
+
62
+ ```java
63
+ void trigger(event, entity, player, database) {
64
+ // event: String com o evento (ex: "before_create")
65
+ // entity: Objeto sendo manipulado (Player, ActionLog, Achievement, etc.)
66
+ // player: String com o ID do jogador
67
+ // database: Objeto para acessar o banco de dados
68
+ }
69
+ ```
70
+
71
+ ## Tipos de Objetos (entity)
72
+
73
+ ### Player
74
+ ```json
75
+ {"_id": "john", "name": "John Travolta", "email": "john@funifier.com", "image": {"small": {"url": "..."}, "medium": {"url": "..."}, "original": {"url": "..."}}, "teams": ["sales"], "extra": {"country": "USA", "department": "IT"}}
76
+ ```
77
+
78
+ ### ActionLog
79
+ ```json
80
+ {"_id": "64a5d92", "actionId": "sell", "userId": "john", "time": {"$date": "2023-07-05T20:57:33.303Z"}, "attributes": {"product": "book", "price": 120}}
81
+ ```
82
+
83
+ ### Achievement
84
+ ```json
85
+ {"_id": "64a5d2", "player": "john", "total": 25.0, "type": 0, "item": "xp", "time": {"$date": "2023-07-05T20:57:33.303Z"}}
86
+ ```
87
+ Tipos: `TYPE_POINT=0`, `TYPE_CHALLENGE=1`, `TYPE_VIRTUAL_GOOD=2`, `TYPE_LEVEL=3`
88
+
89
+ ### Challenge
90
+ ```json
91
+ {"challenge": "Watch Video", "active": true, "_id": "DTo8dS3", "rules": [{"actionId": "watch_video", "operator": 5, "total": 0}], "points": [{"total": 10.0, "category": "xp", "operation": 0}]}
92
+ ```
93
+
94
+ ### Action
95
+ ```json
96
+ {"_id": "sell", "action": "Sell", "attributes": [{"name": "product", "type": "String"}, {"name": "price", "type": "Number"}], "active": true}
97
+ ```
98
+
99
+ ## Managers Disponíveis
100
+
101
+ ### PlayerManager
102
+ ```java
103
+ Player p = manager.getPlayerManager().findById("john");
104
+ manager.getPlayerManager().insert(player);
105
+ manager.getPlayerManager().delete("john");
106
+ ```
107
+
108
+ ### ActionManager
109
+ ```java
110
+ Action a = manager.getActionManager().findActionById("sell");
111
+ manager.getActionManager().track(actionLog);
112
+ List<Achievement> results = manager.getActionManager().trackSynchronous(actionLog);
113
+ ```
114
+
115
+ ### CatalogManager
116
+ ```java
117
+ CatalogItem item = manager.getCatalogManager().findItemById("DTj7lVn");
118
+ manager.getCatalogManager().purchase(achievement, true);
119
+ manager.getCatalogManager().undoPurchase("id");
120
+ ```
121
+
122
+ ### LotteryManager
123
+ ```java
124
+ Lottery l = manager.getLotteryManager().find("DTj0x5z");
125
+ manager.getLotteryManager().insertTicket(ticket);
126
+ manager.getLotteryManager().execute("DTj0x5z");
127
+ ```
128
+
129
+ ### AchievementManager
130
+ ```java
131
+ Achievement a = new Achievement();
132
+ a.player = "john"; a.total = 10; a.type = 0; a.item = "xp";
133
+ a.time = new Date(); a._id = Guid.newShortGuid();
134
+ manager.getAchievementManager().addAchievement(a);
135
+ ```
136
+
137
+ ### Acesso ao Banco de Dados (Jongo)
138
+ ```java
139
+ // Salvar
140
+ manager.getJongoConnection().getCollection("email__c").save(payload);
141
+
142
+ // Buscar
143
+ Object result = manager.getJongoConnection().getCollection("player").findOne("{_id: 'john'}").as(Object.class);
144
+
145
+ // Deletar
146
+ manager.getJongoConnection().getCollection("car__c").remove("{_id: 'car001'}");
147
+ ```
148
+
149
+ ## Exemplos de Código
150
+
151
+ ### Exemplo 1: Duplicar pontos para jogadores de TI
152
+
153
+ ```java
154
+ /* "event": "before_create", "entity": "achievement" */
155
+ void trigger(event, entity, player, database) {
156
+ if(entity.type == Achievement.TYPE_POINT) {
157
+ Player currentPlayer = manager.getPlayerManager().findById(player);
158
+ if("IT".equals(currentPlayer.extra.department)) {
159
+ entity.total = entity.total * 2;
160
+ }
161
+ }
162
+ }
163
+ ```
164
+
165
+ ### Exemplo 2: Dar ponto para todos os amigos
166
+
167
+ ```java
168
+ /* "event": "before_create", "entity": "achievement" */
169
+ void trigger(event, entity, player, database) {
170
+ if(entity.type == Achievement.TYPE_POINT && entity.total >= 100) {
171
+ Player p = manager.getPlayerManager().findById(player);
172
+ for(String friend : p.friends) {
173
+ Achievement a = new Achievement();
174
+ a.player = friend; a.total = 1; a.type = 0;
175
+ a.item = entity.item; a.time = new Date();
176
+ a._id = Guid.newShortGuid();
177
+ manager.getAchievementManager().addAchievement(a);
178
+ }
179
+ }
180
+ }
181
+ ```
182
+
183
+ ### Exemplo 3: Enviar email de boas-vindas
184
+
185
+ ```java
186
+ /* "event": "after_create", "entity": "player" */
187
+ void trigger(event, entity, player, database) {
188
+ long total = manager.getPlayerManager().findTotal();
189
+ Email email = EmailBuilder
190
+ .startingBlank()
191
+ .from("Company", "your@company.com")
192
+ .to(entity.getName(), entity.email)
193
+ .withSubject("Welcome!")
194
+ .withPlainText("Welcome " + entity.name + ", you are member number " + total)
195
+ .buildEmail();
196
+ MailerBuilder.withSMTPServer("host", 587, "login", "password")
197
+ .buildMailer().sendMail(email);
198
+ }
199
+ ```
200
+
201
+ ### Exemplo 4: Requisição HTTP com Unirest
202
+
203
+ ```java
204
+ /* "event": "after_win", "entity": "catalog_item" */
205
+ void trigger(event, entity, player, database) {
206
+ Player buyer = manager.getPlayerManager().findById(entity.player);
207
+ CatalogItem item = manager.getCatalogManager().findItemById(entity.item);
208
+ HashMap zap = new HashMap();
209
+ zap.put("purchase", entity);
210
+ zap.put("buyer", buyer);
211
+ zap.put("item", item);
212
+ HttpResponse<String> response = Unirest.post("https://hooks.zapier.com/hooks/catch/80/b6/")
213
+ .header("Content-Type", "application/json")
214
+ .body(JsonUtil.toJson(zap))
215
+ .asString();
216
+ }
217
+ ```
218
+
219
+ ### Exemplo 5: Criar código de convite
220
+
221
+ ```java
222
+ /* "event": "before_create", "entity": "player" */
223
+ void trigger(event, entity, player, database) {
224
+ String code = Guid.shortTimeMillis();
225
+ entity.extra.put("code", code);
226
+ }
227
+ ```
228
+
229
+ ### Exemplo 6: Consultar objeto no banco
230
+
231
+ ```java
232
+ /* "event": "before_win", "entity": "action" */
233
+ void trigger(event, entity, player, database) {
234
+ String id = entity.attributes.product;
235
+ Object product = database.getCollection("product__c").findOne("{_id:#}", id).as(Object.class);
236
+ entity.attributes.put("price", product.price);
237
+ }
238
+ ```
239
+
240
+ ### Exemplo 7: Executar aggregate no banco
241
+
242
+ ```java
243
+ /* "event": "before_win", "entity": "action" */
244
+ void trigger(event, entity, player, database) {
245
+ org.jongo.MongoCollection collection = database.getCollection("achievement");
246
+ List<Object> highest = Arrays.asList(
247
+ collection.aggregate("{\"$match\": {\"type\": 0, \"item\": \"xp\"}}")
248
+ .and("{\"$group\": {\"_id\": \"$player\", \"total\": {\"$sum\": \"$total\"}}}")
249
+ .and("{\"$sort\": {\"total\": -1}}")
250
+ .and("{\"$limit\":1}")
251
+ .as(Object.class));
252
+ if(highest != null && highest.size() > 0) {
253
+ Object highestPointsPlayer = highest.get(0);
254
+ entity.attributes.put("highest", highestPointsPlayer.total);
255
+ }
256
+ }
257
+ ```
258
+
259
+ ## Bibliotecas Disponíveis
260
+
261
+ - **org.simplejavamail** - Envio de emails
262
+ - **com.mashape.unirest** - Requisições HTTP
263
+ - **org.jongo** - Acesso ao MongoDB
264
+ - **JsonUtil** - Conversão JSON
265
+ - **Guid** - Geração de IDs únicos
266
+ - **DateUtil** - Cálculos e expressões de data
267
+
268
+ > **Referência completa:** Para detalhes de todos os managers, entidades e bibliotecas disponíveis em Java, consulte:
269
+ > - `guides/java-managers.md` — Todos os managers e seus métodos
270
+ > - `guides/java-entities.md` — Entidades, campos e coleções MongoDB
271
+ > - `guides/java-libraries.md` — JsonUtil, Guid, DateUtil, Unirest, EmailBuilder, Jongo
@@ -0,0 +1,121 @@
1
+ # Funifier Knowledge Base — Index
2
+
3
+ Este ficheiro serve como **router** para localizar o módulo ou guia correto na base de conhecimento Funifier. Cada entrada indica o ficheiro, uma descrição curta e quando usar.
4
+
5
+ ---
6
+
7
+ ## Recursos Fundacionais da Plataforma
8
+
9
+ A Funifier funciona como um **backend de aplicações**. Independentemente do tipo de projeto (gamificação, app, portal, integração), os módulos abaixo são os recursos base disponíveis para construir qualquer aplicação:
10
+
11
+ | Recurso | Ficheiro | Para que serve |
12
+ |---------|----------|----------------|
13
+ | **Auth** | `modules/auth.md` | Login de jogadores, geração de tokens JWT, autenticação via API |
14
+ | **Player** | `modules/player.md` | Cadastro e gestão de utilizadores da aplicação |
15
+ | **Database** | `modules/database.md` | CRUD em qualquer coleção, queries MongoDB, aggregates |
16
+ | **Custom Object** | `modules/custom-object.md` | Criar tabelas/coleções próprias (sufixo `__c`) para dados de negócio |
17
+ | **Upload** | `modules/upload.md` | Upload de imagens e ficheiros (avatar, documentos, etc.) |
18
+ | **Trigger** | `modules/trigger.md` | Escrever funções Java que executam no servidor quando eventos acontecem |
19
+ | **Scheduler** | `modules/scheduler.md` | Agendar tarefas automáticas (cron jobs, rotinas periódicas) |
20
+ | **Public Endpoint** | `modules/public.md` | Criar APIs REST customizadas acessíveis sem autenticação |
21
+ | **Webhook** | `modules/webhook.md` | Enviar dados para sistemas externos quando eventos acontecem |
22
+ | **Patterns** | `modules/patterns.md` | Design patterns de implementação (signup, etc.) baseados em experiência real |
23
+
24
+ > **Nota para o agente:** Estes recursos estão sempre disponíveis. Ao planear qualquer funcionalidade, considere-os como ferramentas que pode combinar livremente — não são exclusivos de gamificação.
25
+
26
+ ---
27
+
28
+ ## Módulos Essenciais (Core)
29
+
30
+ | Módulo | Ficheiro | Descrição | Quando usar |
31
+ |--------|----------|-----------|-------------|
32
+ | Player | `modules/player.md` | Cadastro e gestão de jogadores | Criar, listar, atualizar ou remover jogadores; gerir campos extra e imagens |
33
+ | Action | `modules/action.md` | Definição de tipos de ações | Criar ações que os jogadores podem executar (ex: vender, assistir vídeo) |
34
+ | Action Log | `modules/action-log.md` | Registro de ações executadas | Registrar (track) que um jogador executou uma ação; consultar histórico |
35
+ | Point | `modules/point.md` | Categorias de pontos | Criar moedas/pontos (XP, coins, estrelas); configurar tipos de pontuação |
36
+ | Achievement | `modules/achievement.md` | Conquistas e recompensas | Consultar pontos ganhos, desafios completados, itens comprados; entender a estrutura de recompensas |
37
+ | Challenge | `modules/challenge.md` | Desafios e missões | Criar desafios com regras de ação e recompensas automáticas |
38
+ | Level | `modules/level.md` | Níveis de progressão | Configurar sistema de níveis baseado em pontos acumulados |
39
+ | Leaderboard | `modules/leaderboard.md` | Rankings e classificações | Criar rankings por pontos, ações ou atributos; rankings por período |
40
+ | Team | `modules/team.md` | Equipes e grupos | Organizar jogadores em equipes; rankings por equipe |
41
+ | Virtual Good | `modules/virtual-good.md` | Loja virtual e catálogo | Criar itens para compra com pontos; gerir catálogo e compras |
42
+
43
+ ## Módulos de Engajamento
44
+
45
+ | Módulo | Ficheiro | Descrição | Quando usar |
46
+ |--------|----------|-----------|-------------|
47
+ | Lottery | `modules/lottery.md` | Sorteios e rifas | Criar sorteios com tickets; executar sorteios automáticos ou manuais |
48
+ | Competition | `modules/competition.md` | Competições entre jogadores | Criar competições temporárias com rankings e prémios para os melhores |
49
+ | Mystery Box | `modules/mystery.md` | Caixas surpresa | Configurar prémios aleatórios com probabilidades definidas |
50
+ | Swap | `modules/swap.md` | Troca entre jogadores | Permitir que jogadores troquem itens ou pontos entre si |
51
+ | Question | `modules/question.md` | Perguntas e respostas | Criar perguntas com alternativas; registrar respostas dos jogadores |
52
+ | Quiz | `modules/quiz.md` | Questionários completos | Montar questionários agrupando múltiplas perguntas; avaliar desempenho |
53
+ | Crossword | `modules/crossword.md` | Palavras cruzadas | Criar jogos de palavras cruzadas como mecânica de engajamento |
54
+ | Story | `modules/story.md` | Narrativas e storytelling | Criar histórias interativas com cenas e escolhas do jogador |
55
+ | Avatar | `modules/avatar.md` | Avatares personalizáveis | Permitir que jogadores personalizem avatares com itens desbloqueáveis |
56
+ | Last Mile | `modules/lastmile.md` | Incentivo à conclusão | Criar mecânicas que incentivam jogadores a completar tarefas pendentes |
57
+
58
+ ## Módulos Técnicos e Infraestrutura
59
+
60
+ | Módulo | Ficheiro | Descrição | Quando usar |
61
+ |--------|----------|-----------|-------------|
62
+ | Trigger | `modules/trigger.md` | Código Java em eventos | Executar lógica customizada quando eventos acontecem (before/after create, win, etc.) |
63
+ | Scheduler | `modules/scheduler.md` | Tarefas agendadas | Executar código Java em intervalos regulares (cron jobs) |
64
+ | Webhook | `modules/webhook.md` | Notificações HTTP externas | Enviar dados para sistemas externos quando eventos acontecem na gamificação |
65
+ | Notification | `modules/notification.md` | Notificações push e in-app | Enviar notificações para jogadores via push, email ou in-app |
66
+ | WebSocket | `modules/websocket.md` | Comunicação em tempo real | Receber atualizações em tempo real no frontend via WebSocket |
67
+ | Public Endpoint | `modules/public.md` | APIs públicas customizadas | Criar endpoints REST customizados sem autenticação (para integrações) |
68
+ | Widget | `modules/widget.md` | Componentes visuais embeddáveis | Incorporar leaderboards, perfis e outros componentes em páginas externas |
69
+ | Studio Page | `modules/studio-page.md` | Páginas customizadas no Studio | Criar páginas HTML/JS dentro do painel administrativo |
70
+ | KPI Formulas | `modules/kpi-formulas.md` | Fórmulas e indicadores | Criar campos calculados e KPIs derivados de dados da gamificação |
71
+
72
+ ## Módulos de Dados e Armazenamento
73
+
74
+ | Módulo | Ficheiro | Descrição | Quando usar |
75
+ |--------|----------|-----------|-------------|
76
+ | Database | `modules/database.md` | Acesso direto ao MongoDB | Operações CRUD em coleções; executar aggregates via API |
77
+ | Custom Object | `modules/custom-object.md` | Coleções customizadas (`__c`) | Criar coleções de dados próprias (ex: `car__c`, `email__c`) |
78
+ | CSV Data | `modules/csv-data.md` | Importação/exportação CSV | Importar jogadores ou dados em massa via CSV; exportar relatórios |
79
+ | Upload | `modules/upload.md` | Upload de ficheiros | Fazer upload de imagens e ficheiros para o repositório Funifier |
80
+ | Static Repo | `modules/static-repo.md` | Repositório de ficheiros estáticos | Hospedar ficheiros estáticos (HTML, CSS, JS, imagens) na plataforma |
81
+
82
+ ## Módulos de Administração
83
+
84
+ | Módulo | Ficheiro | Descrição | Quando usar |
85
+ |--------|----------|-----------|-------------|
86
+ | Auth | `modules/auth.md` | Autenticação e tokens | Gerar tokens de acesso; configurar API keys; autenticação OAuth |
87
+ | Folder | `modules/folder.md` | Organização em pastas | Organizar módulos (ações, desafios, etc.) em pastas no Studio |
88
+ | Backup | `modules/backup.md` | Backup e restauração | Criar backups da gamificação; restaurar configurações |
89
+ | Compact | `modules/compact.md` | Compactação de dados | Compactar dados históricos para otimizar performance |
90
+ | Staging | `modules/staging.md` | Ambiente de homologação | Testar configurações em ambiente separado antes de produção |
91
+ | Marketplace | `modules/marketplace.md` | Templates de gamificação | Importar templates prontos do marketplace Funifier |
92
+
93
+ ---
94
+
95
+ ## Guias Transversais
96
+
97
+ | Guia | Ficheiro | Descrição | Quando usar |
98
+ |------|----------|-----------|-------------|
99
+ | Aggregates | `guides/aggregates.md` | Consultas avançadas MongoDB | Criar relatórios, dashboards, rankings customizados; usar expressões de data Funifier |
100
+ | Triggers | `guides/triggers-guide.md` | Guia completo de triggers | Referência de eventos, entidades, managers e exemplos de código Java |
101
+ | Database Access | `guides/database-access.md` | Acesso ao banco de dados | Referência de acesso via API REST e via código Java (Jongo) |
102
+ | Java Managers | `guides/java-managers.md` | Referência de managers Java | Métodos disponíveis em cada manager (PlayerManager, ActionManager, etc.) para uso em triggers, schedulers e public endpoints |
103
+ | Java Entities | `guides/java-entities.md` | Referência de entidades Java | Campos e tipos dos objetos (Player, Achievement, ActionLog, etc.) e mapeamento para coleções MongoDB |
104
+ | Java Libraries | `guides/java-libraries.md` | Bibliotecas e utilitários Java | JsonUtil, Guid, DateUtil, Unirest, EmailBuilder, Jongo — métodos e exemplos de uso |
105
+
106
+ ---
107
+
108
+ ## Como usar este index
109
+
110
+ 1. **Identifique a necessidade** do utilizador (ex: "quero criar um ranking")
111
+ 2. **Localize o módulo** na tabela acima (ex: Leaderboard)
112
+ 3. **Carregue o ficheiro** correspondente (ex: `modules/leaderboard.md`)
113
+ 4. **Siga o checklist** de configuração e use os exemplos de API
114
+
115
+ Para consultas que envolvem **múltiplos módulos**, carregue cada ficheiro individualmente conforme necessário.
116
+
117
+ Para **relatórios e queries avançadas**, consulte `guides/aggregates.md`.
118
+
119
+ Para **lógica customizada com código**, consulte `guides/triggers-guide.md` e `guides/database-access.md`.
120
+
121
+ Para **referência completa de recursos Java** (managers, entidades, bibliotecas), consulte `guides/java-managers.md`, `guides/java-entities.md` e `guides/java-libraries.md`.
@@ -0,0 +1,46 @@
1
+ # Achievement (Conquista)
2
+
3
+ **API Endpoint:** `/v3/achievement`
4
+
5
+ ## O que é
6
+
7
+ Registro das conquistas dos jogadores ao atingirem marcos relevantes. Todas as conquistas — como completar desafios, subir de nível, ganhar pontos ou adquirir itens — são registradas neste módulo. Ele automatiza o reconhecimento dos marcos alcançados, mas permite ajustes manuais.
8
+
9
+ ## Quando usar
10
+
11
+ - Para consultar conquistas dos jogadores
12
+ - Para criar relatórios de desempenho
13
+ - Para usar em aggregates e dashboards
14
+ - Para triggers que reagem a conquistas
15
+
16
+ ## Estrutura do Objeto
17
+
18
+ ```json
19
+ {
20
+ "_id": "64a5d2",
21
+ "player": "john",
22
+ "total": 25.0,
23
+ "type": 0,
24
+ "item": "xp",
25
+ "time": {"$date": "2023-07-05T20:57:33.303Z"}
26
+ }
27
+ ```
28
+
29
+ **Tipos de Achievement (campo type):**
30
+ - `0` = Point (ponto ganho)
31
+ - `1` = Challenge (desafio completado)
32
+ - `2` = Virtual Good (item comprado)
33
+ - `3` = Level (nível atingido)
34
+
35
+ ## API Endpoints
36
+
37
+ ### Listar Conquistas
38
+ **Método:** GET
39
+ **Endpoint:** `/v3/achievement`
40
+
41
+ ## Validações e Testes
42
+
43
+ - [ ] Ao completar desafio, achievement tipo 1 é criado
44
+ - [ ] Ao ganhar pontos, achievement tipo 0 é criado
45
+ - [ ] Ao comprar item, achievement tipo 2 é criado
46
+ - [ ] Ao subir de nível, achievement tipo 3 é criado
@@ -0,0 +1,88 @@
1
+ # Action Log (Registro de Ação)
2
+
3
+ **API Endpoint:** `/v3/action/log`
4
+
5
+ ## O que é
6
+
7
+ Registro detalhado de todas as ações executadas pelos jogadores. Armazena cada ação realizada, com detalhes como quem executou, qual ação foi feita e quando ocorreu. Esse registro alimenta todos os outros módulos da plataforma.
8
+
9
+ ## Quando usar
10
+
11
+ - Para registrar que um jogador executou uma ação
12
+ - Para alimentar desafios, rankings e recompensas
13
+ - Para importar ações em lote de sistemas externos
14
+ - Para rastrear comportamento dos jogadores
15
+
16
+ ## Dependências
17
+
18
+ - **Action**: a ação referenciada deve existir
19
+ - **Player**: o jogador referenciado deve existir
20
+
21
+ ## API Endpoints
22
+
23
+ ### Listar ActionLogs
24
+ **Método:** GET
25
+ **Endpoint:** `/v3/action/log`
26
+
27
+ **Exemplo de Resposta:**
28
+ ```json
29
+ [
30
+ {
31
+ "_id": "6509e4e28325771ffaa4506e",
32
+ "actionId": "sell",
33
+ "userId": "jerry",
34
+ "time": 1695147234712,
35
+ "attributes": {
36
+ "product": "bike",
37
+ "price": 1200
38
+ }
39
+ }
40
+ ]
41
+ ```
42
+
43
+ ### Registrar ActionLog
44
+ **Método:** POST
45
+ **Endpoint:** `/v3/action/log`
46
+
47
+ **Exemplo de Body:**
48
+ ```json
49
+ {
50
+ "actionId": "sell",
51
+ "userId": "jerry",
52
+ "attributes": {
53
+ "product": "bike",
54
+ "price": 1200
55
+ }
56
+ }
57
+ ```
58
+
59
+ ### Registrar Múltiplos ActionLogs
60
+ **Método:** POST
61
+ **Endpoint:** `/v3/action/log/bulk`
62
+
63
+ **Exemplo de Body:**
64
+ ```json
65
+ [
66
+ {
67
+ "actionId": "sell",
68
+ "userId": "jerry",
69
+ "attributes": { "product": "bike", "price": 1200 }
70
+ },
71
+ {
72
+ "actionId": "sell",
73
+ "userId": "tom",
74
+ "attributes": { "product": "book", "price": 25 }
75
+ }
76
+ ]
77
+ ```
78
+
79
+ ### Excluir ActionLog
80
+ **Método:** DELETE
81
+ **Endpoint:** `/v3/action/log/:id`
82
+
83
+ ## Validações e Testes
84
+
85
+ - [ ] ActionLog aparece na lista com dados corretos
86
+ - [ ] Ao registrar action log, desafios relacionados progridem
87
+ - [ ] Bulk insert registra múltiplas ações corretamente
88
+ - [ ] Atributos são armazenados conforme definido na ação
@@ -0,0 +1,80 @@
1
+ # Action (Ação)
2
+
3
+ **Acesso Studio:** `/studio/action`
4
+ **API Endpoint:** `/v3/action`
5
+
6
+ ## O que é
7
+
8
+ Cadastro das diferentes ações que os jogadores podem realizar na gamificação. Permite criar e configurar todas as ações possíveis dentro da experiência gamificada, como "vender", "comprar", "comentar", "compartilhar", entre outras. As ações são a base da estratégia de engajamento, pois definem o que é possível fazer na gamificação e servem para disparar regras e recompensas. É possível adicionar atributos extras a cada ação, por exemplo, "produto" e "valor" na ação de venda.
9
+
10
+ ## Quando usar
11
+
12
+ - Em todo projeto de gamificação (obrigatório)
13
+ - Para definir os comportamentos que serão rastreados
14
+ - Para criar a base de eventos que disparam desafios e recompensas
15
+
16
+ ## Checklist de Configuração no Studio
17
+
18
+ - [ ] Definir o _id da ação (letras minúsculas, sem espaços ou acentos)
19
+ - [ ] Definir o nome amigável da ação (inicial maiúscula)
20
+ - [ ] Definir atributos extras se necessário (name + type: String, Number ou Boolean)
21
+ - [ ] Ativar a ação (active: true)
22
+ - [ ] Boas práticas: criar ações genéricas e usar atributos para detalhar contexto
23
+
24
+ ## API Endpoints
25
+
26
+ ### Listar Ações
27
+ **Método:** GET
28
+ **Endpoint:** `/v3/action`
29
+ **Descrição:** Retorna a lista de ações configuradas na gamificação.
30
+
31
+ **Exemplo de Resposta:**
32
+ ```json
33
+ [
34
+ {
35
+ "action": "Sell",
36
+ "attributes": [
37
+ { "name": "product", "type": "String" },
38
+ { "name": "price", "type": "Number" }
39
+ ],
40
+ "active": true,
41
+ "_id": "sell"
42
+ }
43
+ ]
44
+ ```
45
+
46
+ ### Criar Ação
47
+ **Método:** POST
48
+ **Endpoint:** `/v3/action`
49
+ **Descrição:** Cria uma nova ação com nome, atributos e status de ativação.
50
+
51
+ **Exemplo de Body:**
52
+ ```json
53
+ {
54
+ "_id": "sell",
55
+ "active": true,
56
+ "action": "Sell",
57
+ "attributes": [
58
+ { "name": "product", "type": "String" },
59
+ { "name": "price", "type": "Number" }
60
+ ]
61
+ }
62
+ ```
63
+
64
+ ### Excluir Ação
65
+ **Método:** DELETE
66
+ **Endpoint:** `/v3/action/:id`
67
+ **Descrição:** Remove uma ação da gamificação.
68
+
69
+ ## Boas Práticas
70
+
71
+ - Crie ações genéricas como "comprar", "vender", "responder", "visitar"
72
+ - Use os atributos para detalhar o contexto da ação (ex: produto, local, valor)
73
+ - Evite criar uma ação diferente para cada variação. Exemplo errado: "comprar sapato", "comprar camisa". Exemplo certo: ação "comprar" com atributo "produto"
74
+
75
+ ## Validações e Testes
76
+
77
+ - [ ] Ação aparece na lista GET /v3/action
78
+ - [ ] Ação tem _id único e sem caracteres especiais
79
+ - [ ] Atributos estão com tipos corretos (String, Number, Boolean)
80
+ - [ ] Ação está ativa (active: true)