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.
- package/.cursor/rules/funifier.mdc +91 -0
- package/.github/copilot-instructions.md +83 -0
- package/AGENTS.md +97 -0
- package/README.md +351 -351
- package/datasource-funifier-docs/knowledge/guides/aggregates.md +152 -0
- package/datasource-funifier-docs/knowledge/guides/database-access.md +132 -0
- package/datasource-funifier-docs/knowledge/guides/java-entities.md +373 -0
- package/datasource-funifier-docs/knowledge/guides/java-libraries.md +330 -0
- package/datasource-funifier-docs/knowledge/guides/java-managers.md +509 -0
- package/datasource-funifier-docs/knowledge/guides/triggers-guide.md +271 -0
- package/datasource-funifier-docs/knowledge/index.md +121 -0
- package/datasource-funifier-docs/knowledge/modules/achievement.md +46 -0
- package/datasource-funifier-docs/knowledge/modules/action-log.md +88 -0
- package/datasource-funifier-docs/knowledge/modules/action.md +80 -0
- package/datasource-funifier-docs/knowledge/modules/auth.md +104 -0
- package/datasource-funifier-docs/knowledge/modules/avatar.md +28 -0
- package/datasource-funifier-docs/knowledge/modules/backup.md +40 -0
- package/datasource-funifier-docs/knowledge/modules/challenge.md +91 -0
- package/datasource-funifier-docs/knowledge/modules/compact.md +40 -0
- package/datasource-funifier-docs/knowledge/modules/competition.md +149 -0
- package/datasource-funifier-docs/knowledge/modules/crossword.md +41 -0
- package/datasource-funifier-docs/knowledge/modules/csv-data.md +30 -0
- package/datasource-funifier-docs/knowledge/modules/custom-object.md +53 -0
- package/datasource-funifier-docs/knowledge/modules/database.md +241 -0
- package/datasource-funifier-docs/knowledge/modules/folder.md +111 -0
- package/datasource-funifier-docs/knowledge/modules/kpi-formulas.md +23 -0
- package/datasource-funifier-docs/knowledge/modules/lastmile.md +45 -0
- package/datasource-funifier-docs/knowledge/modules/leaderboard.md +98 -0
- package/datasource-funifier-docs/knowledge/modules/level.md +83 -0
- package/datasource-funifier-docs/knowledge/modules/lottery.md +112 -0
- package/datasource-funifier-docs/knowledge/modules/marketplace.md +27 -0
- package/datasource-funifier-docs/knowledge/modules/mystery.md +82 -0
- package/datasource-funifier-docs/knowledge/modules/notification.md +40 -0
- package/datasource-funifier-docs/knowledge/modules/patterns.md +1096 -0
- package/datasource-funifier-docs/knowledge/modules/player.md +101 -0
- package/datasource-funifier-docs/knowledge/modules/point.md +67 -0
- package/datasource-funifier-docs/knowledge/modules/public.md +253 -0
- package/datasource-funifier-docs/knowledge/modules/question.md +136 -0
- package/datasource-funifier-docs/knowledge/modules/quiz.md +163 -0
- package/datasource-funifier-docs/knowledge/modules/scheduler.md +58 -0
- package/datasource-funifier-docs/knowledge/modules/security.md +169 -0
- package/datasource-funifier-docs/knowledge/modules/staging.md +28 -0
- package/datasource-funifier-docs/knowledge/modules/static-repo.md +41 -0
- package/datasource-funifier-docs/knowledge/modules/story.md +42 -0
- package/datasource-funifier-docs/knowledge/modules/studio-page.md +180 -0
- package/datasource-funifier-docs/knowledge/modules/swap.md +132 -0
- package/datasource-funifier-docs/knowledge/modules/team.md +75 -0
- package/datasource-funifier-docs/knowledge/modules/trigger.md +189 -0
- package/datasource-funifier-docs/knowledge/modules/upload.md +155 -0
- package/datasource-funifier-docs/knowledge/modules/virtual-good.md +99 -0
- package/datasource-funifier-docs/knowledge/modules/webhook.md +41 -0
- package/datasource-funifier-docs/knowledge/modules/websocket.md +41 -0
- package/datasource-funifier-docs/knowledge/modules/widget.md +42 -0
- package/datasource-funifier-docs/process-gtm-saas.md +143 -0
- package/datasource-funifier-docs/process-instagram.md +88 -0
- package/datasource-funifier-docs/process.md +1826 -0
- package/datasource-funifier-docs/readme.md +132 -0
- package/dist/cli/config-writers.d.ts +15 -0
- package/dist/cli/config-writers.d.ts.map +1 -0
- package/dist/cli/config-writers.js +55 -0
- package/dist/cli/config-writers.js.map +1 -0
- package/dist/cli/config-writers.test.d.ts +2 -0
- package/dist/cli/config-writers.test.d.ts.map +1 -0
- package/dist/cli/config-writers.test.js +55 -0
- package/dist/cli/config-writers.test.js.map +1 -0
- package/dist/cli/copy.d.ts +6 -0
- package/dist/cli/copy.d.ts.map +1 -0
- package/dist/cli/copy.js +63 -0
- package/dist/cli/copy.js.map +1 -0
- package/dist/cli/copy.test.d.ts +2 -0
- package/dist/cli/copy.test.d.ts.map +1 -0
- package/dist/cli/copy.test.js +94 -0
- package/dist/cli/copy.test.js.map +1 -0
- package/dist/cli/init.d.ts +2 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +167 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/paths.d.ts +7 -0
- package/dist/cli/paths.d.ts.map +1 -0
- package/dist/cli/paths.js +62 -0
- package/dist/cli/paths.js.map +1 -0
- package/dist/cli/paths.test.d.ts +2 -0
- package/dist/cli/paths.test.d.ts.map +1 -0
- package/dist/cli/paths.test.js +50 -0
- package/dist/cli/paths.test.js.map +1 -0
- package/dist/cli/platforms.d.ts +22 -0
- package/dist/cli/platforms.d.ts.map +1 -0
- package/dist/cli/platforms.js +50 -0
- package/dist/cli/platforms.js.map +1 -0
- package/dist/cli/prompts.d.ts +7 -0
- package/dist/cli/prompts.d.ts.map +1 -0
- package/dist/cli/prompts.js +49 -0
- package/dist/cli/prompts.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/bundle.js +98 -50
- package/dist/mcp/index.js +18 -1
- package/dist/mcp/index.js.map +1 -1
- package/package.json +70 -65
- package/skills/funifier-create-action/SKILL.md +86 -86
- package/skills/funifier-create-aggregate/SKILL.md +126 -87
- package/skills/funifier-create-challenge/SKILL.md +87 -87
- package/skills/funifier-create-custom-page/SKILL.md +126 -87
- package/skills/funifier-create-leaderboard/SKILL.md +87 -87
- package/skills/funifier-create-level/SKILL.md +86 -86
- package/skills/funifier-create-point/SKILL.md +86 -86
- package/skills/funifier-create-quiz/SKILL.md +86 -86
- package/skills/funifier-create-scheduler/SKILL.md +126 -87
- package/skills/funifier-create-trigger/SKILL.md +127 -88
- package/skills/funifier-create-virtual-good/SKILL.md +86 -86
- package/skills/funifier-debug/SKILL.md +90 -90
- package/skills/funifier-help/SKILL.md +85 -85
- package/skills/funifier-implement-frontend/SKILL.md +89 -89
- package/skills/funifier-index/SKILL.md +50 -50
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Auth (Autenticação)
|
|
2
|
+
|
|
3
|
+
**Acesso Studio:** `/studio/auth`
|
|
4
|
+
**API Endpoint:** `/v3/auth`
|
|
5
|
+
|
|
6
|
+
## O que é
|
|
7
|
+
|
|
8
|
+
Gerenciamento de autenticação e critérios básicos de segurança. Permite configurar como será o processo de login dos jogadores, definindo exigência de senha, auto-criação de usuários, geração de tokens de acesso (incluindo tempo de expiração e revalidação). Também permite criar rotinas personalizadas de autenticação (Auth Module) para SSO, validação externa e logs de login.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- Para configurar login de jogadores
|
|
13
|
+
- Para gerar tokens de acesso
|
|
14
|
+
- Para implementar SSO com sistemas corporativos
|
|
15
|
+
- Para criar validações customizadas de autenticação
|
|
16
|
+
|
|
17
|
+
## Checklist de Configuração no Studio
|
|
18
|
+
|
|
19
|
+
- [ ] Definir se senha é obrigatória
|
|
20
|
+
- [ ] Configurar auto-criação de usuários
|
|
21
|
+
- [ ] Definir tempo de expiração do token
|
|
22
|
+
- [ ] Configurar módulo de autenticação customizado (se necessário)
|
|
23
|
+
|
|
24
|
+
## API Endpoints
|
|
25
|
+
|
|
26
|
+
### Autenticar Jogador
|
|
27
|
+
**Método:** POST
|
|
28
|
+
**Endpoint:** `/v3/auth/token`
|
|
29
|
+
|
|
30
|
+
**Exemplo de Body:**
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"apiKey": "YOUR_API_KEY",
|
|
34
|
+
"grant_type": "password",
|
|
35
|
+
"username": "tom",
|
|
36
|
+
"password": "123"
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Exemplo de Resposta:**
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"access_token": "eyJhbGciOiJIUzUxMiIsImNhbGciOiJHWklQIn0...",
|
|
44
|
+
"token_type": "Bearer",
|
|
45
|
+
"expires_in": 1695751444626
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Listar Módulos de Autenticação
|
|
50
|
+
**Método:** GET
|
|
51
|
+
**Endpoint:** `/v3/auth/module`
|
|
52
|
+
|
|
53
|
+
### Criar Módulo de Autenticação
|
|
54
|
+
**Método:** POST
|
|
55
|
+
**Endpoint:** `/v3/auth/module`
|
|
56
|
+
|
|
57
|
+
## Roles e Permissões (Scopes)
|
|
58
|
+
|
|
59
|
+
As permissões do token de jogador são controladas por **Roles** configuradas em `Studio > Security > Roles`. Cada Role define:
|
|
60
|
+
|
|
61
|
+
- **Role:** nome da role (ex: `player`) — atribuída automaticamente ao jogador no login
|
|
62
|
+
- **Timeout:** tempo de expiração do token (ex: `1d` = 1 dia)
|
|
63
|
+
- **Scope:** lista de permissões separadas por vírgula
|
|
64
|
+
|
|
65
|
+
### Scopes disponíveis
|
|
66
|
+
|
|
67
|
+
| Scope | Descrição |
|
|
68
|
+
|-------|-----------|
|
|
69
|
+
| `read_all` | Leitura em todos os endpoints |
|
|
70
|
+
| `write_all` | Escrita em todos os endpoints |
|
|
71
|
+
| `delete_all` | Exclusão em todos os endpoints |
|
|
72
|
+
| `write_player` | Escrita no endpoint `/v3/player` |
|
|
73
|
+
| `write_actionlog` | Escrita no endpoint `/v3/action_log` |
|
|
74
|
+
| `write_upload` | Escrita no endpoint `/v3/upload` |
|
|
75
|
+
| `write_database_<collection>` | Escrita em uma coleção específica do database (ex: `write_database_task__c`) |
|
|
76
|
+
| `delete_database_<collection>` | Exclusão em uma coleção específica do database |
|
|
77
|
+
| `database` | **⚠️ OBRIGATÓRIO** para acessar o endpoint `/v3/database` — sem esta palavra no scope, o endpoint retorna dados vazios silenciosamente (sem erro) |
|
|
78
|
+
|
|
79
|
+
### ⚠️ Nota importante sobre o endpoint Database
|
|
80
|
+
|
|
81
|
+
O endpoint `/v3/database` exige que a palavra **`database`** esteja presente no scope da role, **independentemente** de `write_all` ou `read_all` já estarem configurados. Sem ela, as operações de escrita retornam `201` mas **não persistem os dados**, e as operações de leitura retornam **corpo vazio** — tudo sem mensagem de erro.
|
|
82
|
+
|
|
83
|
+
### Exemplo de scope completo para apps com database
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
read_all, write_all, delete_all, database
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Configuração no Studio
|
|
90
|
+
|
|
91
|
+
1. Acesse `Studio > Security`
|
|
92
|
+
2. Na seção **Roles**, clique no botão `+` para criar uma nova role
|
|
93
|
+
3. Defina: Role = `player`, Timeout = `1d`, Scope = `read_all, write_all, delete_all, database`
|
|
94
|
+
4. Clique em **Salvar**
|
|
95
|
+
5. O jogador precisa **fazer login novamente** para obter um token com as novas permissões
|
|
96
|
+
|
|
97
|
+
## Validações e Testes
|
|
98
|
+
|
|
99
|
+
- [ ] Login retorna token válido
|
|
100
|
+
- [ ] Token expira no tempo configurado
|
|
101
|
+
- [ ] Jogador inválido recebe erro apropriado
|
|
102
|
+
- [ ] SSO funciona (se configurado)
|
|
103
|
+
- [ ] Role "player" está configurada com scope adequado
|
|
104
|
+
- [ ] Token do jogador tem permissão para os endpoints necessários
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Avatar (Avatar)
|
|
2
|
+
|
|
3
|
+
## O que é
|
|
4
|
+
|
|
5
|
+
Criação e customização de avatares para os jogadores. Permite aos jogadores criarem avatares personalizados, desbloqueando acessórios e itens de acordo com o desempenho na gamificação ou por compras na loja. Pode ser usado em ambientes 2D ou 3D.
|
|
6
|
+
|
|
7
|
+
## Quando usar
|
|
8
|
+
|
|
9
|
+
- Para personalização visual dos jogadores
|
|
10
|
+
- Para criar senso de identidade e pertencimento
|
|
11
|
+
- Para vincular recompensas a itens visuais
|
|
12
|
+
- Para ambientes virtuais com representação do jogador
|
|
13
|
+
|
|
14
|
+
## Dependências
|
|
15
|
+
|
|
16
|
+
- **Virtual Good** (opcional): acessórios podem ser vendidos na loja
|
|
17
|
+
|
|
18
|
+
## Checklist de Configuração
|
|
19
|
+
|
|
20
|
+
- [ ] Definir tipos de avatar disponíveis
|
|
21
|
+
- [ ] Criar acessórios e itens desbloqueáveis
|
|
22
|
+
- [ ] Vincular itens a desafios ou loja virtual
|
|
23
|
+
|
|
24
|
+
## Validações e Testes
|
|
25
|
+
|
|
26
|
+
- [ ] Avatar padrão é exibido para novos jogadores
|
|
27
|
+
- [ ] Acessórios desbloqueados aparecem disponíveis
|
|
28
|
+
- [ ] Personalização do avatar é salva corretamente
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Backup (Backup)
|
|
2
|
+
|
|
3
|
+
**Acesso Studio:** `/studio/backup`
|
|
4
|
+
**API Endpoint:** `/v3/backup`
|
|
5
|
+
|
|
6
|
+
## O que é
|
|
7
|
+
|
|
8
|
+
Backup e remoção controlada de dados antigos. Permite criar rotinas automáticas de backup de registros importantes, além de remover dados antigos de maneira controlada para manter a performance da plataforma.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- Para fazer backup de logs antigos antes de atualizações
|
|
13
|
+
- Para remover registros históricos e otimizar consultas
|
|
14
|
+
- Para manter performance em grandes volumes de dados
|
|
15
|
+
|
|
16
|
+
## Checklist de Configuração no Studio
|
|
17
|
+
|
|
18
|
+
- [ ] Definir quais coleções serão backupeadas
|
|
19
|
+
- [ ] Configurar frequência do backup
|
|
20
|
+
- [ ] Definir critério de remoção de dados antigos
|
|
21
|
+
|
|
22
|
+
## API Endpoints
|
|
23
|
+
|
|
24
|
+
### Listar Backups
|
|
25
|
+
**Método:** GET
|
|
26
|
+
**Endpoint:** `/v3/backup`
|
|
27
|
+
|
|
28
|
+
### Criar Backup
|
|
29
|
+
**Método:** POST
|
|
30
|
+
**Endpoint:** `/v3/backup`
|
|
31
|
+
|
|
32
|
+
### Deletar Backup
|
|
33
|
+
**Método:** DELETE
|
|
34
|
+
**Endpoint:** `/v3/backup/:id`
|
|
35
|
+
|
|
36
|
+
## Validações e Testes
|
|
37
|
+
|
|
38
|
+
- [ ] Backup é executado com sucesso
|
|
39
|
+
- [ ] Dados antigos são removidos conforme critério
|
|
40
|
+
- [ ] Performance melhora após limpeza
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Challenge (Desafio)
|
|
2
|
+
|
|
3
|
+
**Acesso Studio:** `/studio/challenge`
|
|
4
|
+
**API Endpoint:** `/v3/challenge`
|
|
5
|
+
|
|
6
|
+
## O que é
|
|
7
|
+
|
|
8
|
+
Configuração de desafios a serem completados por jogadores ou equipes. Permite criar desafios personalizados, definindo ações que o jogador precisa realizar e recompensas que receberá. Os desafios podem variar de simples tarefas a missões complexas compostas por múltiplas ações ou etapas.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- Em quase todo projeto de gamificação
|
|
13
|
+
- Para definir missões e objetivos para jogadores
|
|
14
|
+
- Para vincular ações a recompensas (pontos, itens, etc.)
|
|
15
|
+
- Para criar progressão e senso de conquista
|
|
16
|
+
|
|
17
|
+
## Dependências
|
|
18
|
+
|
|
19
|
+
- **Point**: tipos de ponto devem existir antes de criar challenges que os recompensam
|
|
20
|
+
- **Action**: ações devem existir antes de criar challenges que as referenciam
|
|
21
|
+
|
|
22
|
+
## Checklist de Configuração no Studio
|
|
23
|
+
|
|
24
|
+
- [ ] Definir título e descrição do desafio
|
|
25
|
+
- [ ] Definir regras (rules): qual ação, quantas vezes, filtros por atributo
|
|
26
|
+
- [ ] Definir recompensas (points): tipo de ponto e quantidade
|
|
27
|
+
- [ ] Definir frequência (uma vez, diário, semanal, ilimitado)
|
|
28
|
+
- [ ] Definir desbloqueio (quando fica disponível)
|
|
29
|
+
- [ ] Configurar notificações de conclusão
|
|
30
|
+
- [ ] Vincular técnicas de jogo (techniques)
|
|
31
|
+
|
|
32
|
+
## API Endpoints
|
|
33
|
+
|
|
34
|
+
### Listar Desafios
|
|
35
|
+
**Método:** GET
|
|
36
|
+
**Endpoint:** `/v3/challenge`
|
|
37
|
+
|
|
38
|
+
**Exemplo de Resposta:**
|
|
39
|
+
```json
|
|
40
|
+
[
|
|
41
|
+
{
|
|
42
|
+
"challenge": "Sell 10 books",
|
|
43
|
+
"description": "Sell 10 books to earn 25 xp and 5 coins",
|
|
44
|
+
"rules": [
|
|
45
|
+
{
|
|
46
|
+
"actionId": "sell",
|
|
47
|
+
"filters": [
|
|
48
|
+
{ "value": "book", "operator": 1, "param": "product" }
|
|
49
|
+
],
|
|
50
|
+
"total": 10
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
"points": [
|
|
54
|
+
{ "total": 25, "category": "xp" },
|
|
55
|
+
{ "total": 5, "category": "coin" }
|
|
56
|
+
],
|
|
57
|
+
"_id": "DTkhJHV"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Criar Desafio
|
|
63
|
+
**Método:** POST
|
|
64
|
+
**Endpoint:** `/v3/challenge`
|
|
65
|
+
|
|
66
|
+
**Exemplo de Body:**
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"challenge": "Watch Video",
|
|
70
|
+
"description": "Complete this challenge by watching a video, and earn 10 xp",
|
|
71
|
+
"rules": [
|
|
72
|
+
{ "actionId": "watch_video", "operator": 5, "total": 0 }
|
|
73
|
+
],
|
|
74
|
+
"points": [
|
|
75
|
+
{ "total": 10.0, "category": "xp", "operation": 0 }
|
|
76
|
+
],
|
|
77
|
+
"techniques": ["GT35"]
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Excluir Desafio
|
|
82
|
+
**Método:** DELETE
|
|
83
|
+
**Endpoint:** `/v3/challenge/:id`
|
|
84
|
+
|
|
85
|
+
## Validações e Testes
|
|
86
|
+
|
|
87
|
+
- [ ] Desafio aparece na lista GET /v3/challenge
|
|
88
|
+
- [ ] Ações referenciadas nas rules existem (GET /v3/action)
|
|
89
|
+
- [ ] Pontos referenciados nas recompensas existem (GET /v3/point)
|
|
90
|
+
- [ ] Ao registrar ação (POST /v3/action/log), o desafio progride corretamente
|
|
91
|
+
- [ ] Ao completar o desafio, jogador recebe os pontos definidos
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Compact (Compactação)
|
|
2
|
+
|
|
3
|
+
**Acesso Studio:** `/studio/compact`
|
|
4
|
+
**API Endpoint:** `/v3/compact`
|
|
5
|
+
|
|
6
|
+
## O que é
|
|
7
|
+
|
|
8
|
+
Compactação e otimização do armazenamento de dados. Configura rotinas para agrupar registros e reduzir o espaço ocupado por dados históricos, como achievements ou logs, melhorando o tempo de resposta das consultas e a performance geral.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- Para compactar registros de achievements acumulados
|
|
13
|
+
- Para otimizar coleções de acesso rápido
|
|
14
|
+
- Para reduzir volume de dados históricos
|
|
15
|
+
|
|
16
|
+
## Checklist de Configuração no Studio
|
|
17
|
+
|
|
18
|
+
- [ ] Definir coleções a compactar
|
|
19
|
+
- [ ] Configurar critérios de agrupamento
|
|
20
|
+
- [ ] Testar impacto na performance
|
|
21
|
+
|
|
22
|
+
## API Endpoints
|
|
23
|
+
|
|
24
|
+
### Listar Compactações
|
|
25
|
+
**Método:** GET
|
|
26
|
+
**Endpoint:** `/v3/compact`
|
|
27
|
+
|
|
28
|
+
### Criar Compactação
|
|
29
|
+
**Método:** POST
|
|
30
|
+
**Endpoint:** `/v3/compact`
|
|
31
|
+
|
|
32
|
+
### Deletar Compactação
|
|
33
|
+
**Método:** DELETE
|
|
34
|
+
**Endpoint:** `/v3/compact/:id`
|
|
35
|
+
|
|
36
|
+
## Validações e Testes
|
|
37
|
+
|
|
38
|
+
- [ ] Compactação é executada sem perda de dados
|
|
39
|
+
- [ ] Volume de dados é reduzido
|
|
40
|
+
- [ ] Consultas mantêm resultados corretos após compactação
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Competition (Competição)
|
|
2
|
+
|
|
3
|
+
**Acesso Studio:** `/studio/competition`
|
|
4
|
+
**API Endpoint:** `/v3/competition`
|
|
5
|
+
|
|
6
|
+
## O que é
|
|
7
|
+
|
|
8
|
+
Configuração de disputas diretas entre jogadores ou equipes. Permite criar competições com regras próprias, prêmios para diferentes posições e critérios de apuração customizáveis. Geralmente, o jogador ou equipe precisa se inscrever para participar.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- Para criar disputas temporais (ex: competição de vendas mensal)
|
|
13
|
+
- Para premiar os melhores colocados em um período
|
|
14
|
+
- Para engajar equipes com competições internas
|
|
15
|
+
|
|
16
|
+
## Dependências
|
|
17
|
+
|
|
18
|
+
- **Point** ou **Action**: métrica de avaliação deve existir
|
|
19
|
+
- **Player** ou **Team**: participantes devem existir
|
|
20
|
+
|
|
21
|
+
## Checklist de Configuração no Studio
|
|
22
|
+
|
|
23
|
+
- [ ] Definir título e descrição
|
|
24
|
+
- [ ] Definir período de apuração (period.expression)
|
|
25
|
+
- [ ] Definir número máximo de vencedores (maxWinners)
|
|
26
|
+
- [ ] Definir número máximo de participantes (maxPlayers)
|
|
27
|
+
- [ ] Definir critério de ranking (operation: tipo, item, ordenação)
|
|
28
|
+
- [ ] Definir custo de inscrição (requires) se aplicável
|
|
29
|
+
- [ ] Definir recompensas por posição (rewards com position_start/position_ends)
|
|
30
|
+
- [ ] Definir se é competição de equipes (teamCompetition)
|
|
31
|
+
- [ ] Ativar competição (active: true)
|
|
32
|
+
- [ ] Definir execução automática (autoExecute)
|
|
33
|
+
|
|
34
|
+
## API Endpoints
|
|
35
|
+
|
|
36
|
+
### Listar Competições
|
|
37
|
+
**Método:** GET
|
|
38
|
+
**Endpoint:** `/v3/competition`
|
|
39
|
+
|
|
40
|
+
### Criar Competição
|
|
41
|
+
**Método:** POST
|
|
42
|
+
**Endpoint:** `/v3/competition`
|
|
43
|
+
|
|
44
|
+
**Exemplo de Body:**
|
|
45
|
+
```json
|
|
46
|
+
{
|
|
47
|
+
"title": "Sales Race",
|
|
48
|
+
"description": "Leads the competition who has the highest amount of closed sales in the month.",
|
|
49
|
+
"period": {
|
|
50
|
+
"expression": "-0M-;+1M+"
|
|
51
|
+
},
|
|
52
|
+
"maxWinners": 1,
|
|
53
|
+
"maxPlayers": 100,
|
|
54
|
+
"minScore": 0,
|
|
55
|
+
"operation": {
|
|
56
|
+
"type": 1,
|
|
57
|
+
"achievement_type": 0,
|
|
58
|
+
"item": "sell",
|
|
59
|
+
"filters": [],
|
|
60
|
+
"sort": -1,
|
|
61
|
+
"sub": false
|
|
62
|
+
},
|
|
63
|
+
"requires": [
|
|
64
|
+
{
|
|
65
|
+
"total": 10,
|
|
66
|
+
"type": 0,
|
|
67
|
+
"item": "coin",
|
|
68
|
+
"operation": 1,
|
|
69
|
+
"extra": {},
|
|
70
|
+
"restrict": false,
|
|
71
|
+
"perPlayer": false
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"rewards": [
|
|
75
|
+
{
|
|
76
|
+
"total": 100,
|
|
77
|
+
"type": 0,
|
|
78
|
+
"item": "xp",
|
|
79
|
+
"operation": 0,
|
|
80
|
+
"extra": {
|
|
81
|
+
"position_start": 1,
|
|
82
|
+
"position_ends": 3
|
|
83
|
+
},
|
|
84
|
+
"restrict": false,
|
|
85
|
+
"perPlayer": false
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"notifications": [],
|
|
89
|
+
"active": true,
|
|
90
|
+
"teamCompetition": false,
|
|
91
|
+
"autoExecute": true,
|
|
92
|
+
"extra": {},
|
|
93
|
+
"techniques": ["GT26"],
|
|
94
|
+
"_id": "race"
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Deletar Competição
|
|
99
|
+
**Método:** DELETE
|
|
100
|
+
**Endpoint:** `/v3/competition/:id`
|
|
101
|
+
|
|
102
|
+
### Listar Participações (Joins)
|
|
103
|
+
**Método:** GET
|
|
104
|
+
**Endpoint:** `/v3/competition/join?competition=:id`
|
|
105
|
+
|
|
106
|
+
### Criar Participação (Join)
|
|
107
|
+
**Método:** POST
|
|
108
|
+
**Endpoint:** `/v3/competition/join`
|
|
109
|
+
|
|
110
|
+
**Exemplo de Body:**
|
|
111
|
+
```json
|
|
112
|
+
{
|
|
113
|
+
"competition": "race",
|
|
114
|
+
"player": "jerry"
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Deletar Participação
|
|
119
|
+
**Método:** DELETE
|
|
120
|
+
**Endpoint:** `/v3/competition/join`
|
|
121
|
+
|
|
122
|
+
**Exemplo de Body:**
|
|
123
|
+
```json
|
|
124
|
+
{
|
|
125
|
+
"competition": "race",
|
|
126
|
+
"player": "tom"
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Listar Líderes da Competição
|
|
131
|
+
**Método:** POST
|
|
132
|
+
**Endpoint:** `/v3/competition/leader/aggregate?id=:id`
|
|
133
|
+
|
|
134
|
+
### Executar Competição
|
|
135
|
+
**Método:** GET
|
|
136
|
+
**Endpoint:** `/v3/competition/:id/execute`
|
|
137
|
+
**Descrição:** Finaliza a competição, calcula resultados e premia os vencedores.
|
|
138
|
+
|
|
139
|
+
### Reverter Execução
|
|
140
|
+
**Método:** DELETE
|
|
141
|
+
**Endpoint:** `/v3/competition/:id/execute`
|
|
142
|
+
|
|
143
|
+
## Validações e Testes
|
|
144
|
+
|
|
145
|
+
- [ ] Competição aparece na lista GET /v3/competition
|
|
146
|
+
- [ ] Jogador consegue se inscrever (join)
|
|
147
|
+
- [ ] Lista de líderes retorna dados ordenados
|
|
148
|
+
- [ ] Ao executar, vencedores recebem recompensas
|
|
149
|
+
- [ ] Custo de inscrição é debitado corretamente
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Crossword (Palavras Cruzadas)
|
|
2
|
+
|
|
3
|
+
**Acesso Studio:** `/studio/crossword`
|
|
4
|
+
**API Endpoint:** `/v3/crossword`
|
|
5
|
+
|
|
6
|
+
## O que é
|
|
7
|
+
|
|
8
|
+
Configuração de jogos de palavras cruzadas. Permite criar jogos customizados, com dicas, posições e temas específicos para diferentes objetivos educacionais ou promocionais.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- Para onboarding de funcionários com termos técnicos
|
|
13
|
+
- Para campanhas de marketing temáticas
|
|
14
|
+
- Para jogos educacionais
|
|
15
|
+
- Para engajamento com vocabulário específico
|
|
16
|
+
|
|
17
|
+
## Checklist de Configuração no Studio
|
|
18
|
+
|
|
19
|
+
- [ ] Definir título do jogo
|
|
20
|
+
- [ ] Criar palavras com dicas e posições
|
|
21
|
+
- [ ] Configurar tema visual
|
|
22
|
+
|
|
23
|
+
## API Endpoints
|
|
24
|
+
|
|
25
|
+
### Listar Crosswords
|
|
26
|
+
**Método:** GET
|
|
27
|
+
**Endpoint:** `/v3/crossword`
|
|
28
|
+
|
|
29
|
+
### Criar Crossword
|
|
30
|
+
**Método:** POST
|
|
31
|
+
**Endpoint:** `/v3/crossword`
|
|
32
|
+
|
|
33
|
+
### Deletar Crossword
|
|
34
|
+
**Método:** DELETE
|
|
35
|
+
**Endpoint:** `/v3/crossword/:id`
|
|
36
|
+
|
|
37
|
+
## Validações e Testes
|
|
38
|
+
|
|
39
|
+
- [ ] Crossword aparece na lista
|
|
40
|
+
- [ ] Palavras e dicas estão corretas
|
|
41
|
+
- [ ] Jogador consegue interagir com o jogo
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# CSV Data (Dados CSV)
|
|
2
|
+
|
|
3
|
+
**API Endpoint:** `/v3/csv`
|
|
4
|
+
|
|
5
|
+
## O que é
|
|
6
|
+
|
|
7
|
+
Importação e exportação de dados no formato CSV. Permite importar ou exportar dados de forma fácil e segura, seja via upload manual ou FTP. Suporta arquivos criptografados para segurança no trânsito das informações.
|
|
8
|
+
|
|
9
|
+
## Quando usar
|
|
10
|
+
|
|
11
|
+
- Para importar listas de jogadores em massa
|
|
12
|
+
- Para exportar relatórios de desempenho
|
|
13
|
+
- Para migrar dados de sistemas externos
|
|
14
|
+
- Para importação segura via FTP com criptografia
|
|
15
|
+
|
|
16
|
+
## API Endpoints
|
|
17
|
+
|
|
18
|
+
### Importar CSV
|
|
19
|
+
**Método:** POST
|
|
20
|
+
**Endpoint:** `/v3/csv`
|
|
21
|
+
|
|
22
|
+
### Exportar CSV
|
|
23
|
+
**Método:** GET
|
|
24
|
+
**Endpoint:** `/v3/csv`
|
|
25
|
+
|
|
26
|
+
## Validações e Testes
|
|
27
|
+
|
|
28
|
+
- [ ] Importação processa arquivo corretamente
|
|
29
|
+
- [ ] Dados importados aparecem nas coleções corretas
|
|
30
|
+
- [ ] Exportação gera arquivo CSV válido
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# Custom Object (Objeto Customizado)
|
|
2
|
+
|
|
3
|
+
## O que é
|
|
4
|
+
|
|
5
|
+
Criação de objetos personalizados para necessidades específicas. Permite criar e gerenciar coleções personalizadas no banco de dados (sufixo `__c`), que podem ser acessadas via API, triggers, schedulers e páginas personalizadas. Ideal para quando os módulos padrão não atendem a todos os requisitos do projeto.
|
|
6
|
+
|
|
7
|
+
## Quando usar
|
|
8
|
+
|
|
9
|
+
- Para cadastrar entidades específicas do negócio (produtos, imóveis, etc.)
|
|
10
|
+
- Para criar listas customizadas (pontos turísticos, categorias, etc.)
|
|
11
|
+
- Para armazenar dados que não se encaixam nos módulos padrão
|
|
12
|
+
|
|
13
|
+
## API Endpoints
|
|
14
|
+
|
|
15
|
+
Objetos customizados são acessados via o módulo Database:
|
|
16
|
+
|
|
17
|
+
### Listar Objetos
|
|
18
|
+
**Método:** GET
|
|
19
|
+
**Endpoint:** `/v3/database/<nome>__c`
|
|
20
|
+
|
|
21
|
+
### Criar Objeto
|
|
22
|
+
**Método:** POST
|
|
23
|
+
**Endpoint:** `/v3/database/<nome>__c`
|
|
24
|
+
|
|
25
|
+
**Exemplo (coleção car__c):**
|
|
26
|
+
```json
|
|
27
|
+
{
|
|
28
|
+
"_id": "car001",
|
|
29
|
+
"name": "Civic",
|
|
30
|
+
"brand": "Honda",
|
|
31
|
+
"price": 50000
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Atualizar Objeto
|
|
36
|
+
**Método:** PUT
|
|
37
|
+
**Endpoint:** `/v3/database/<nome>__c`
|
|
38
|
+
|
|
39
|
+
### Excluir Objeto
|
|
40
|
+
**Método:** DELETE
|
|
41
|
+
**Endpoint:** `/v3/database/<nome>__c?q=_id:'car001'`
|
|
42
|
+
|
|
43
|
+
## Boas Práticas
|
|
44
|
+
|
|
45
|
+
- Sempre usar sufixo `__c` no nome da coleção
|
|
46
|
+
- Definir `_id` único para cada objeto
|
|
47
|
+
- Criar índices para campos usados em consultas frequentes
|
|
48
|
+
|
|
49
|
+
## Validações e Testes
|
|
50
|
+
|
|
51
|
+
- [ ] Coleção customizada aparece em GET /v3/database/collections
|
|
52
|
+
- [ ] CRUD funciona corretamente
|
|
53
|
+
- [ ] Triggers com entity `<nome>__c` funcionam
|