funifier-mcp 0.3.17 → 0.3.19
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/.cursor/rules/funifier.mdc +3 -1
- package/.github/copilot-instructions.md +3 -1
- package/AGENTS.md +3 -1
- package/CHANGELOG.md +59 -0
- package/README.md +1 -1
- package/datasource-funifier-docs/.coverage.json +15 -5
- package/datasource-funifier-docs/.validation.json +77 -36
- package/datasource-funifier-docs/knowledge/guides/aggregates.md +13 -6
- package/datasource-funifier-docs/knowledge/guides/permission-audit.md +229 -0
- package/datasource-funifier-docs/knowledge/index.md +3 -2
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +3 -1
- package/dist/cli/init.js.map +1 -1
- package/dist/core/api-client.d.ts +2 -0
- package/dist/core/api-client.d.ts.map +1 -1
- package/dist/core/api-client.js +98 -47
- package/dist/core/api-client.js.map +1 -1
- package/dist/core/api-client.test.js +27 -0
- package/dist/core/api-client.test.js.map +1 -1
- package/dist/core/constants.d.ts +4 -0
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +8 -0
- package/dist/core/constants.js.map +1 -1
- package/dist/core/logger.d.ts +9 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +50 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/mcp/api-holder.test.d.ts +2 -0
- package/dist/mcp/api-holder.test.d.ts.map +1 -0
- package/dist/mcp/api-holder.test.js +45 -0
- package/dist/mcp/api-holder.test.js.map +1 -0
- package/dist/mcp/bundle.js +108 -105
- package/dist/mcp/check-update.d.ts +9 -0
- package/dist/mcp/check-update.d.ts.map +1 -1
- package/dist/mcp/check-update.js +35 -9
- package/dist/mcp/check-update.js.map +1 -1
- package/dist/mcp/check-update.test.js +36 -6
- package/dist/mcp/check-update.test.js.map +1 -1
- package/dist/mcp/doc-path.d.ts +11 -0
- package/dist/mcp/doc-path.d.ts.map +1 -0
- package/dist/mcp/doc-path.js +66 -0
- package/dist/mcp/doc-path.js.map +1 -0
- package/dist/mcp/doc-path.test.d.ts +2 -0
- package/dist/mcp/doc-path.test.d.ts.map +1 -0
- package/dist/mcp/doc-path.test.js +77 -0
- package/dist/mcp/doc-path.test.js.map +1 -0
- package/dist/mcp/index.js +19 -0
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/resources/documentation.d.ts.map +1 -1
- package/dist/mcp/resources/documentation.js +7 -3
- package/dist/mcp/resources/documentation.js.map +1 -1
- package/dist/mcp/tools/_audit.d.ts +103 -0
- package/dist/mcp/tools/_audit.d.ts.map +1 -0
- package/dist/mcp/tools/_audit.js +241 -0
- package/dist/mcp/tools/_audit.js.map +1 -0
- package/dist/mcp/tools/_audit.test.d.ts +2 -0
- package/dist/mcp/tools/_audit.test.d.ts.map +1 -0
- package/dist/mcp/tools/_audit.test.js +412 -0
- package/dist/mcp/tools/_audit.test.js.map +1 -0
- package/dist/mcp/tools/_backup.d.ts +37 -3
- package/dist/mcp/tools/_backup.d.ts.map +1 -1
- package/dist/mcp/tools/_backup.js +142 -11
- package/dist/mcp/tools/_backup.js.map +1 -1
- package/dist/mcp/tools/_backup.test.js +195 -0
- package/dist/mcp/tools/_backup.test.js.map +1 -1
- package/dist/mcp/tools/_char-guard.d.ts +2 -1
- package/dist/mcp/tools/_char-guard.d.ts.map +1 -1
- package/dist/mcp/tools/_char-guard.js +10 -3
- package/dist/mcp/tools/_char-guard.js.map +1 -1
- package/dist/mcp/tools/_fetch-current.d.ts +2 -1
- package/dist/mcp/tools/_fetch-current.d.ts.map +1 -1
- package/dist/mcp/tools/_fetch-current.js +2 -74
- package/dist/mcp/tools/_fetch-current.js.map +1 -1
- package/dist/mcp/tools/_registry.d.ts +183 -0
- package/dist/mcp/tools/_registry.d.ts.map +1 -0
- package/dist/mcp/tools/_registry.js +88 -0
- package/dist/mcp/tools/_registry.js.map +1 -0
- package/dist/mcp/tools/_registry.test.d.ts +2 -0
- package/dist/mcp/tools/_registry.test.d.ts.map +1 -0
- package/dist/mcp/tools/_registry.test.js +103 -0
- package/dist/mcp/tools/_registry.test.js.map +1 -0
- package/dist/mcp/tools/_scope-engine.d.ts +40 -0
- package/dist/mcp/tools/_scope-engine.d.ts.map +1 -0
- package/dist/mcp/tools/_scope-engine.js +197 -0
- package/dist/mcp/tools/_scope-engine.js.map +1 -0
- package/dist/mcp/tools/_scope-engine.test.d.ts +2 -0
- package/dist/mcp/tools/_scope-engine.test.d.ts.map +1 -0
- package/dist/mcp/tools/_scope-engine.test.js +241 -0
- package/dist/mcp/tools/_scope-engine.test.js.map +1 -0
- package/dist/mcp/tools/database.d.ts +4 -0
- package/dist/mcp/tools/database.d.ts.map +1 -1
- package/dist/mcp/tools/database.js +23 -4
- package/dist/mcp/tools/database.js.map +1 -1
- package/dist/mcp/tools/database.test.js +19 -0
- package/dist/mcp/tools/database.test.js.map +1 -1
- package/dist/mcp/tools/delete.d.ts.map +1 -1
- package/dist/mcp/tools/delete.js +3 -98
- package/dist/mcp/tools/delete.js.map +1 -1
- package/dist/mcp/tools/execute.d.ts.map +1 -1
- package/dist/mcp/tools/execute.js +36 -4
- package/dist/mcp/tools/execute.js.map +1 -1
- package/dist/mcp/tools/execute.test.d.ts +2 -0
- package/dist/mcp/tools/execute.test.d.ts.map +1 -0
- package/dist/mcp/tools/execute.test.js +87 -0
- package/dist/mcp/tools/execute.test.js.map +1 -0
- package/dist/mcp/tools/get.d.ts.map +1 -1
- package/dist/mcp/tools/get.js +4 -93
- package/dist/mcp/tools/get.js.map +1 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +42 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/list.d.ts.map +1 -1
- package/dist/mcp/tools/list.js +3 -91
- package/dist/mcp/tools/list.js.map +1 -1
- package/dist/mcp/tools/logs.d.ts.map +1 -1
- package/dist/mcp/tools/logs.js +5 -3
- package/dist/mcp/tools/logs.js.map +1 -1
- package/dist/mcp/tools/permissions.d.ts.map +1 -1
- package/dist/mcp/tools/permissions.js +68 -11
- package/dist/mcp/tools/permissions.js.map +1 -1
- package/dist/mcp/tools/permissions.test.js +268 -4
- package/dist/mcp/tools/permissions.test.js.map +1 -1
- package/dist/mcp/tools/read-doc.d.ts.map +1 -1
- package/dist/mcp/tools/read-doc.js +10 -28
- package/dist/mcp/tools/read-doc.js.map +1 -1
- package/dist/mcp/tools/save.d.ts.map +1 -1
- package/dist/mcp/tools/save.js +4 -81
- package/dist/mcp/tools/save.js.map +1 -1
- package/package.json +3 -2
- package/skills/funifier/SKILL.md +3 -1
- package/skills/funifier/references/audit-permissions.md +97 -0
- package/skills/funifier/references/configure-security.md +6 -0
- package/skills/funifier/references/create-action.md +7 -0
- package/skills/funifier/references/create-aggregate.md +99 -79
- package/skills/funifier/references/create-audit.md +8 -0
- package/skills/funifier/references/create-challenge.md +7 -0
- package/skills/funifier/references/create-competition.md +7 -0
- package/skills/funifier/references/create-crossword.md +6 -0
- package/skills/funifier/references/create-custom-object.md +6 -0
- package/skills/funifier/references/create-custom-page.md +6 -0
- package/skills/funifier/references/create-folder.md +7 -0
- package/skills/funifier/references/create-lastmile.md +6 -0
- package/skills/funifier/references/create-leaderboard.md +6 -0
- package/skills/funifier/references/create-level.md +7 -0
- package/skills/funifier/references/create-lottery.md +7 -0
- package/skills/funifier/references/create-mystery.md +6 -0
- package/skills/funifier/references/create-notification.md +6 -0
- package/skills/funifier/references/create-point.md +7 -0
- package/skills/funifier/references/create-quiz.md +7 -0
- package/skills/funifier/references/create-scheduler.md +6 -0
- package/skills/funifier/references/create-story.md +6 -0
- package/skills/funifier/references/create-swap.md +6 -0
- package/skills/funifier/references/create-trigger.md +8 -0
- package/skills/funifier/references/create-virtual-good.md +6 -0
- package/skills/funifier/references/create-webhook.md +6 -0
- package/skills/funifier/references/create-websocket.md +6 -0
- package/skills/funifier/references/create-widget.md +6 -0
- package/skills/funifier/references/date-handling.md +6 -0
- package/skills/funifier/references/debug.md +6 -0
- package/skills/funifier/references/help.md +6 -0
- package/skills/funifier/references/implement-frontend.md +7 -0
- package/skills/funifier/references/import-csv.md +6 -0
- package/skills/funifier/references/manage-indexes.md +6 -0
- package/skills/funifier/references/manage-player.md +7 -0
- package/skills/funifier/references/manage-team.md +6 -0
- package/skills/funifier/references/query-aggregate.md +111 -0
- package/skills/funifier/references/upload-file.md +6 -0
- package/datasource-funifier-docs/.search-index.json +0 -58758
- package/datasource-funifier-docs/.skills-map.json +0 -141
|
@@ -133,3 +133,9 @@ PUT /v3/database/studio_page { "_id": "...", "display": true, "title": "...",
|
|
|
133
133
|
|
|
134
134
|
Acesse `/studio/custom/<slug>` no browser para testar.
|
|
135
135
|
Para CRUD completo: crie página de lista (`display: true`) + formulário (`display: false`, slug com `/:id`).
|
|
136
|
+
|
|
137
|
+
## Verified References
|
|
138
|
+
|
|
139
|
+
| Claim | Status | Evidence |
|
|
140
|
+
|-------|--------|----------|
|
|
141
|
+
| DatabaseManager provides MongoDB connection access for aggregate-backed Studio custom pages | ✓ verified | Class:src/main/java/com/funifier/engine/database/DatabaseManager.java:DatabaseManager |
|
|
@@ -102,3 +102,10 @@ funifier_save type=folder-log payload=<json>
|
|
|
102
102
|
funifier_folder operation=progress { "folder": "<root_id>", "player": "player123" }
|
|
103
103
|
funifier_folder operation=inside { "folder": "<root_id>" }
|
|
104
104
|
```
|
|
105
|
+
|
|
106
|
+
## Verified References
|
|
107
|
+
|
|
108
|
+
| Claim | Status | Evidence |
|
|
109
|
+
|-------|--------|----------|
|
|
110
|
+
| Folder is the entity class for learning trail nodes with unlock_policy, parent, and position fields in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/folder/Folder.java:Folder |
|
|
111
|
+
| FolderManager handles folder tree traversal, progress computation, and cascade deletion in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/folder/FolderManager.java:FolderManager |
|
|
@@ -641,3 +641,9 @@ funifier_list type=lastmile
|
|
|
641
641
|
```
|
|
642
642
|
|
|
643
643
|
Simule progresso do jogador até 80% do desafio e verifique se a mensagem é disparada.
|
|
644
|
+
|
|
645
|
+
## Verified References
|
|
646
|
+
|
|
647
|
+
| Claim | Status | Evidence |
|
|
648
|
+
|-------|--------|----------|
|
|
649
|
+
| LastMile is the entity class for threshold-triggered motivational messages linked to challenge progress in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/lastmile/LastMile.java:LastMile |
|
|
@@ -124,3 +124,9 @@ funifier_list type=leaderboard search=<title>
|
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
If scores look wrong, reset cache: `GET /v3/leaderboard/reset`
|
|
127
|
+
|
|
128
|
+
## Verified References
|
|
129
|
+
|
|
130
|
+
| Claim | Status | Evidence |
|
|
131
|
+
|-------|--------|----------|
|
|
132
|
+
| LeaderBoardManager manages leaderboard ranking computation and cache reset in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/leader/LeaderBoardManager.java:LeaderBoardManager |
|
|
@@ -92,3 +92,10 @@ funifier_list type=level
|
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Confirme que os níveis estão em ordem crescente de `minPoints`.
|
|
95
|
+
|
|
96
|
+
## Verified References
|
|
97
|
+
|
|
98
|
+
| Claim | Status | Evidence |
|
|
99
|
+
|-------|--------|----------|
|
|
100
|
+
| Level is the entity class defining level thresholds and point item reference in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/level/Level.java:Level |
|
|
101
|
+
| LevelManager tracks player level progression and threshold evaluation | ✓ verified | Class:src/main/java/com/funifier/engine/level/LevelManager.java:LevelManager |
|
|
@@ -911,3 +911,10 @@ GET /v3/lottery/participants?lottery=<_id>
|
|
|
911
911
|
```
|
|
912
912
|
|
|
913
913
|
To undo: `DELETE /v3/lottery/:id/execute`
|
|
914
|
+
|
|
915
|
+
## Verified References
|
|
916
|
+
|
|
917
|
+
| Claim | Status | Evidence |
|
|
918
|
+
|-------|--------|----------|
|
|
919
|
+
| Lottery is the entity class for ticket-based prize draws with drawDate, choiceMethod, and maxWinners in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/lottery/Lottery.java:Lottery |
|
|
920
|
+
| LotteryManager handles ticket generation, draw execution, and winner selection in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/lottery/LotteryManager.java:LotteryManager |
|
|
@@ -767,3 +767,9 @@ funifier_save type=mystery payload=<json>
|
|
|
767
767
|
GET /v3/mystery/evaluate/<_id>?player=<player_id>
|
|
768
768
|
GET /v3/mystery/execute/<_id>?player=<player_id>
|
|
769
769
|
```
|
|
770
|
+
|
|
771
|
+
## Verified References
|
|
772
|
+
|
|
773
|
+
| Claim | Status | Evidence |
|
|
774
|
+
|-------|--------|----------|
|
|
775
|
+
| MysteryBox is the entity class for probability-based instant games with options, win_chart, and requirements in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/mystery/MysteryBox.java:MysteryBox |
|
|
@@ -73,3 +73,9 @@ funifier_list type=notification
|
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
Dispare o evento correspondente e verifique se a notificação é entregue.
|
|
76
|
+
|
|
77
|
+
## Verified References
|
|
78
|
+
|
|
79
|
+
| Claim | Status | Evidence |
|
|
80
|
+
|-------|--------|----------|
|
|
81
|
+
| Notification is the entity class for automated player feedback messages with event, scope, and content fields in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/notify/Notification.java:Notification |
|
|
@@ -93,3 +93,10 @@ funifier_list type=point search=<_id>
|
|
|
93
93
|
```
|
|
94
94
|
|
|
95
95
|
Do NOT use `funifier_logs` — that is only for triggers and schedulers.
|
|
96
|
+
|
|
97
|
+
## Verified References
|
|
98
|
+
|
|
99
|
+
| Claim | Status | Evidence |
|
|
100
|
+
|-------|--------|----------|
|
|
101
|
+
| PointCategory is the entity class with category, shortName, and techniques fields for defining point types | ✓ verified | Class:src/main/java/com/funifier/engine/point/PointCategory.java:PointCategory |
|
|
102
|
+
| PointManager manages point accumulation and balance queries in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/point/PointManager.java:PointManager |
|
|
@@ -96,3 +96,10 @@ POST /v3/quiz/start { "quiz": "<id>", "player": "<player_id>" }
|
|
|
96
96
|
POST /v3/question/log/bulk [{ "quiz": "<id>", "quiz_log": "<log_id>", "question": "<q_id>", "answer": ["1"], "player": "<player_id>" }]
|
|
97
97
|
POST /v3/quiz/finish { "quiz_log": "<log_id>" }
|
|
98
98
|
```
|
|
99
|
+
|
|
100
|
+
## Verified References
|
|
101
|
+
|
|
102
|
+
| Claim | Status | Evidence |
|
|
103
|
+
|-------|--------|----------|
|
|
104
|
+
| Quiz is the entity class storing questions and answer configuration in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/quiz/Quiz.java:Quiz |
|
|
105
|
+
| QuizManager handles quiz scoring, lifecycle, and player response processing | ✓ verified | Class:src/main/java/com/funifier/engine/quiz/QuizManager.java:QuizManager |
|
|
@@ -139,3 +139,9 @@ funifier_logs type=scheduler id=<_id>
|
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
Confirme que não há erros de compilação ou execução no stack trace.
|
|
142
|
+
|
|
143
|
+
## Verified References
|
|
144
|
+
|
|
145
|
+
| Claim | Status | Evidence |
|
|
146
|
+
|-------|--------|----------|
|
|
147
|
+
| SchedulerManager is the class that manages cron-based script execution in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/integration/scheduler/SchedulerManager.java:SchedulerManager |
|
|
@@ -93,3 +93,9 @@ POST /v3/swap/receive { "swap": "<swap_id>" }
|
|
|
93
93
|
POST /v3/swap/counter/offer { "swap": "<swap_id>", "buyer": "jerry", "offer": [{ "total": 1, "type": 0, "item": "coin" }] }
|
|
94
94
|
POST /v3/swap/counter/offer/accept { "offer": "<offer_id>" }
|
|
95
95
|
```
|
|
96
|
+
|
|
97
|
+
## Verified References
|
|
98
|
+
|
|
99
|
+
| Claim | Status | Evidence |
|
|
100
|
+
|-------|--------|----------|
|
|
101
|
+
| Swap is the entity class for player-to-player trade offers with seller, rewards, and requires fields in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/swap/Swap.java:Swap |
|
|
@@ -183,3 +183,11 @@ funifier_logs type=trigger id=<_id>
|
|
|
183
183
|
```
|
|
184
184
|
|
|
185
185
|
Confirme que não há erros de compilação ou execução. Se houver, leia o stack trace e corrija o script.
|
|
186
|
+
|
|
187
|
+
## Verified References
|
|
188
|
+
|
|
189
|
+
| Claim | Status | Evidence |
|
|
190
|
+
|-------|--------|----------|
|
|
191
|
+
| Achievement constants TYPE_POINT=0, TYPE_CHALLENGE=1, TYPE_VIRTUAL_GOOD=2, TYPE_LEVEL=3 are defined in the Achievement class | ✓ verified | Class:src/main/java/com/funifier/engine/achievement/Achievement.java:Achievement |
|
|
192
|
+
| ActionLog is the entity class for action triggers with fields actionId, userId, attributes (Map), time, and id | ✓ verified | Class:src/main/java/com/funifier/engine/action/ActionLog.java:ActionLog |
|
|
193
|
+
| TriggerManager is the class that manages trigger script execution and lifecycle in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/integration/trigger/TriggerManager.java:TriggerManager |
|
|
@@ -94,3 +94,9 @@ Para testar uma compra:
|
|
|
94
94
|
```
|
|
95
95
|
POST /v3/virtualgoods/purchase { "player": "<id>", "item": "<item_id>", "total": 1 }
|
|
96
96
|
```
|
|
97
|
+
|
|
98
|
+
## Verified References
|
|
99
|
+
|
|
100
|
+
| Claim | Status | Evidence |
|
|
101
|
+
|-------|--------|----------|
|
|
102
|
+
| CatalogManager is the class managing virtual goods catalog items, pricing, and purchase lifecycle in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/catalog/CatalogManager.java:CatalogManager |
|
|
@@ -70,3 +70,9 @@ funifier_list type=webhook
|
|
|
70
70
|
### 5. Testar
|
|
71
71
|
|
|
72
72
|
Dispare um evento (ex: log uma ação que gera conquista) e verifique se o endpoint externo recebeu o payload.
|
|
73
|
+
|
|
74
|
+
## Verified References
|
|
75
|
+
|
|
76
|
+
| Claim | Status | Evidence |
|
|
77
|
+
|-------|--------|----------|
|
|
78
|
+
| Webhook is the entity class for outbound event notifications to external HTTP endpoints in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/webhook/Webhook.java:Webhook |
|
|
@@ -69,3 +69,9 @@ funifier_list type=websocket
|
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
Conecte um cliente WebSocket e dispare um evento para confirmar que as mensagens chegam em tempo real.
|
|
72
|
+
|
|
73
|
+
## Verified References
|
|
74
|
+
|
|
75
|
+
| Claim | Status | Evidence |
|
|
76
|
+
|-------|--------|----------|
|
|
77
|
+
| WebSocket is the entity class for real-time bidirectional communication configuration in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/websocket/WebSocket.java:WebSocket |
|
|
@@ -74,3 +74,9 @@ Cole o código de embed na página destino (intranet, LMS, etc.) e verifique que
|
|
|
74
74
|
funifier_list type=widget
|
|
75
75
|
GET /v3/widget/<_id>
|
|
76
76
|
```
|
|
77
|
+
|
|
78
|
+
## Verified References
|
|
79
|
+
|
|
80
|
+
| Claim | Status | Evidence |
|
|
81
|
+
|-------|--------|----------|
|
|
82
|
+
| Widget is the entity class for embeddable visual gamification components with type, configuration, and display settings in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/widget/Widget.java:Widget |
|
|
@@ -170,3 +170,9 @@ Não coloque o parâmetro convertido para `Date` dentro de `{ "$date": "$param:s
|
|
|
170
170
|
- [ ] Em prepared aggregate, usar `"$param:nome"` exatamente como string.
|
|
171
171
|
- [ ] Para data absoluta em prepared aggregate, converter no `script` com `DateUtil.parse`, validar `null`, e substituir o `Date` diretamente em `$gte`/`$lte`.
|
|
172
172
|
- [ ] Testar aggregate direto antes de salvar como prepared aggregate.
|
|
173
|
+
|
|
174
|
+
## Verified References
|
|
175
|
+
|
|
176
|
+
| Claim | Status | Evidence |
|
|
177
|
+
|-------|--------|----------|
|
|
178
|
+
|
|
@@ -90,3 +90,9 @@ Leia o arquivo de doc específico para o módulo com problema:
|
|
|
90
90
|
- Scheduler → `funifier_read_doc path=modules/scheduler`
|
|
91
91
|
- Aggregate → `funifier_read_doc path=guides/aggregates`
|
|
92
92
|
- Security/Auth → `funifier_read_doc path=modules/security`
|
|
93
|
+
|
|
94
|
+
## Verified References
|
|
95
|
+
|
|
96
|
+
| Claim | Status | Evidence |
|
|
97
|
+
|-------|--------|----------|
|
|
98
|
+
| TriggerManager is the entry point for trigger script execution and error capture in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/integration/trigger/TriggerManager.java:TriggerManager |
|
|
@@ -79,3 +79,9 @@ Baseado na tabela acima, instrua o usuário a usar a skill específica.
|
|
|
79
79
|
### 4. Se não encontrar skill específica
|
|
80
80
|
|
|
81
81
|
Consulte `funifier_read_doc path=index` e leia o módulo relevante diretamente.
|
|
82
|
+
|
|
83
|
+
## Verified References
|
|
84
|
+
|
|
85
|
+
| Claim | Status | Evidence |
|
|
86
|
+
|-------|--------|----------|
|
|
87
|
+
| Achievement is the core entity class representing all gamification rewards in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/achievement/Achievement.java:Achievement |
|
|
@@ -122,3 +122,10 @@ await fetch('/v3/database/cycle__c?strict=true', {
|
|
|
122
122
|
### 5. Hospedar no Funifier (opcional)
|
|
123
123
|
|
|
124
124
|
Para arquivos estáticos, leia `funifier_read_doc path=modules/static-repo`.
|
|
125
|
+
|
|
126
|
+
## Verified References
|
|
127
|
+
|
|
128
|
+
| Claim | Status | Evidence |
|
|
129
|
+
|-------|--------|----------|
|
|
130
|
+
| PlayerManager handles player authentication and session management in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/player/PlayerManager.java:PlayerManager |
|
|
131
|
+
| ActionManager processes action event registration from frontend clients | ✓ verified | Class:src/main/java/com/funifier/engine/action/ActionManager.java:ActionManager |
|
|
@@ -83,3 +83,9 @@ Get the index name from `action=list`. The `_id_` index cannot be dropped.
|
|
|
83
83
|
| Unique email | `{"email": 1}` (uniqueness enforced by MongoDB, not this API) |
|
|
84
84
|
|
|
85
85
|
For a composite (e.g. `{player: 1, time: -1}` to back filter+sort in one plan), use the Groovy/trigger path shown in the Limitation section — not this tool.
|
|
86
|
+
|
|
87
|
+
## Verified References
|
|
88
|
+
|
|
89
|
+
| Claim | Status | Evidence |
|
|
90
|
+
|-------|--------|----------|
|
|
91
|
+
|
|
@@ -80,3 +80,10 @@ GET /v3/player/<_id>/status
|
|
|
80
80
|
```
|
|
81
81
|
GET /v3/team/<team_id>/member/add/<player_id>
|
|
82
82
|
```
|
|
83
|
+
|
|
84
|
+
## Verified References
|
|
85
|
+
|
|
86
|
+
| Claim | Status | Evidence |
|
|
87
|
+
|-------|--------|----------|
|
|
88
|
+
| Player is the entity class with _id, name, email, teams, extra fields in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/player/Player.java:Player |
|
|
89
|
+
| PlayerManager handles player CRUD, authentication, and status queries in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/player/PlayerManager.java:PlayerManager |
|
|
@@ -74,3 +74,9 @@ GET /v3/team/sales/status
|
|
|
74
74
|
```
|
|
75
75
|
GET /v3/team/sales/member/remove/tom
|
|
76
76
|
```
|
|
77
|
+
|
|
78
|
+
## Verified References
|
|
79
|
+
|
|
80
|
+
| Claim | Status | Evidence |
|
|
81
|
+
|-------|--------|----------|
|
|
82
|
+
| Team is the entity class for player groups with _id, name, members, owner fields in funifier-service | ✓ verified | Class:src/main/java/com/funifier/engine/team/Team.java:Team |
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# funifier-query-aggregate
|
|
2
|
+
|
|
3
|
+
Run an ad-hoc MongoDB aggregate (one-off query) on a Funifier collection via POST /v3/database/{collection}/aggregate — for reports and exploration, without saving a resource
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Before starting — find relevant docs
|
|
8
|
+
|
|
9
|
+
Use the `funifier_search_docs` MCP tool to load only what you need:
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
funifier_search_docs "aggregate mongodb pipeline query report ad-hoc consulta"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Then read the most relevant results with `funifier_read_doc path=<path>`.
|
|
16
|
+
|
|
17
|
+
## Primary docs for this skill
|
|
18
|
+
|
|
19
|
+
If search returns insufficient results, read these directly:
|
|
20
|
+
|
|
21
|
+
- `funifier_read_doc path=guides/aggregates`
|
|
22
|
+
- `funifier_read_doc path=guides/database-access`
|
|
23
|
+
- `funifier_read_doc path=modules/database`
|
|
24
|
+
|
|
25
|
+
## Steps
|
|
26
|
+
|
|
27
|
+
> **Aggregate ad-hoc** = uma consulta **pontual** executada direto numa coleção via `POST /v3/database/{collection}/aggregate`, com o pipeline no corpo. Sem `_id`, sem salvar, sem `$param`, sem `script`. Use para relatórios e exploração. Se você precisa de um pipeline **salvo, parametrizado e reutilizável** (dashboards, `POST /v3/find/<id>`), use a skill `funifier-create-aggregate` (prepared aggregate).
|
|
28
|
+
|
|
29
|
+
### 1. Definir a consulta
|
|
30
|
+
|
|
31
|
+
- Qual coleção tem os dados? (ver tabela abaixo)
|
|
32
|
+
- Qual o filtro (`$match`), agrupamento (`$group`), ordenação (`$sort`) e limite (`$limit`)?
|
|
33
|
+
- Precisa juntar coleções? (`$lookup` — ver relações abaixo)
|
|
34
|
+
|
|
35
|
+
### Coleções principais e relações (para `$lookup`)
|
|
36
|
+
|
|
37
|
+
| Coleção | Relação-chave |
|
|
38
|
+
|---|---|
|
|
39
|
+
| `player` | `_id` é a ponta de `userId`/`player` — `name`, `teams`, `extra` |
|
|
40
|
+
| `action_log` | `userId` → `player._id`; `actionId` → `action._id` — `attributes`, `time` |
|
|
41
|
+
| `achievement` | `player` → `player._id`; `item` → coleção do `type` (0=Point, 1=Challenge, 2=VirtualGood, 3=Level) |
|
|
42
|
+
| `challenge` | `_id` referenciado por `achievement.item` (type 1) |
|
|
43
|
+
| `catalog_item` | `_id` referenciado por `achievement.item` (type 2) |
|
|
44
|
+
| `point_category` | `_id` referenciado por `achievement.item` (type 0) |
|
|
45
|
+
|
|
46
|
+
> Em `achievement`, junte por `$player`/`$item` — **não** por `_id` (senão o `$lookup` volta vazio). Campos completos das coleções: `funifier_read_doc path=guides/java-entities`.
|
|
47
|
+
|
|
48
|
+
### 2. Operadores suportados
|
|
49
|
+
|
|
50
|
+
`$match`, `$group`, `$sort`, `$limit`, `$lookup`, `$project`, `$unwind`, `$addFields`, `$count`.
|
|
51
|
+
|
|
52
|
+
### 3. Filtros por data
|
|
53
|
+
|
|
54
|
+
A gramática de expressões de data Funifier (`{"$date": "-0M-"}` = início do mês, `-0M+` = fim, `-1d-`, ISO-8601, millis) é detalhada em `aggregates.md` §4 (**dono único** das expressões `$date`) — leia com `funifier_read_doc path=guides/aggregates`. Não reescreva a gramática aqui.
|
|
55
|
+
|
|
56
|
+
> ⚠️ **Use `?strict=true`** no endpoint ad-hoc ao filtrar por data: sem ele, `Date` degrada para número e o `$match` por data falha. Exemplo: `{ "$match": { "time": { "$gte": {"$date": "-0M-"}, "$lte": {"$date": "-0M+"} } } }`.
|
|
57
|
+
|
|
58
|
+
### 4. Antes de executar: índices e forma da query
|
|
59
|
+
|
|
60
|
+
1. Liste os campos que dirigem o plano: filtros de `$match`, campos de `$sort`, e `localField`/`foreignField` de cada `$lookup` (atenção ao `foreignField` na coleção `from`).
|
|
61
|
+
2. Cheque/crie índices: `funifier_index action=list collection=<coll>` para cada coleção tocada; crie os single-field faltantes com `funifier_index action=create`. Índice **composto** (ex.: `{player:1,time:-1}`) → o endpoint REST é single-field apenas; use o caminho Groovy `createIndex(...append...)` (ver skill `funifier-manage-indexes`). Não duplique a mecânica de índice aqui.
|
|
62
|
+
3. Boas práticas: `$match` o mais cedo possível · reduza documentos com `$project`/`$match` **antes** do `$lookup` · `$sort` seguido imediatamente de `$limit` · cuidado com explosão de documentos do `$unwind` · garanta o `$lookup.foreignField` indexado.
|
|
63
|
+
4. ⚠️ **Ad-hoc NÃO usa `allowDiskUse`** — um `$match`/`$sort` sem índice em coleção grande tende a ser lento ou falhar. (Prepared aggregate usa `allowDiskUse(true)`; ad-hoc não.)
|
|
64
|
+
|
|
65
|
+
### 5. Executar
|
|
66
|
+
|
|
67
|
+
Via MCP:
|
|
68
|
+
```
|
|
69
|
+
funifier_database action=aggregate collection=<coll> pipeline=<json-array>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Via API REST:
|
|
73
|
+
```
|
|
74
|
+
POST /v3/database/{collection}/aggregate?strict=true
|
|
75
|
+
<json-array do pipeline no corpo>
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
> O GET de listagem (`GET /v3/database/{collection}`) **não ordena** — para ordenar, use sempre `$sort` num aggregate.
|
|
79
|
+
|
|
80
|
+
### Exemplos
|
|
81
|
+
|
|
82
|
+
**Top 10 jogadores com mais XP no mês atual** (coleção `achievement`):
|
|
83
|
+
```json
|
|
84
|
+
[
|
|
85
|
+
{"$match": {"type": 0, "item": "xp", "time": {"$gte": {"$date": "-0M-"}, "$lte": {"$date": "-0M+"}}}},
|
|
86
|
+
{"$group": {"_id": "$player", "total": {"$sum": "$total"}}},
|
|
87
|
+
{"$sort": {"total": -1}},
|
|
88
|
+
{"$lookup": {"from": "player", "localField": "_id", "foreignField": "_id", "as": "p"}},
|
|
89
|
+
{"$unwind": "$p"},
|
|
90
|
+
{"$project": {"_id": 1, "player": "$p.name", "total": 1}},
|
|
91
|
+
{"$limit": 10}
|
|
92
|
+
]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Jogadores distintos que executaram ações ontem** (coleção `action_log`):
|
|
96
|
+
```json
|
|
97
|
+
[
|
|
98
|
+
{"$match": {"time": {"$gte": {"$date": "-1d-"}, "$lte": {"$date": "-1d+"}}}},
|
|
99
|
+
{"$group": {"_id": "$userId"}},
|
|
100
|
+
{"$lookup": {"from": "player", "localField": "_id", "foreignField": "_id", "as": "p"}},
|
|
101
|
+
{"$project": {"_id": 1, "playerName": {"$first": "$p.name"}}}
|
|
102
|
+
]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Mais exemplos prontos (médias, distintos, top-N por período) em `aggregates.md` §6 — `funifier_read_doc path=guides/aggregates`.
|
|
106
|
+
|
|
107
|
+
## Verified References
|
|
108
|
+
|
|
109
|
+
| Claim | Status | Evidence |
|
|
110
|
+
|-------|--------|----------|
|
|
111
|
+
|