-
Notifications
You must be signed in to change notification settings - Fork 1
Home
- Introdução
- Requisitos para o desenvolvimento
- Validação
- Utilize um banco de dados noSQL
- API REST (RESOURCES)
- Compilar o client para consumir sua aplicação
- Contato
Os formulários(templates) são ferramentas úteis que ajudam a planejar eventos, enviar pesquisas, aplicar testes em alunos ou colher informações de modo direto e fácil.
Este Formulário deve conter um título e os seus campos(perguntas) para simplificar utilizaremos somente os input's.
Os campos podem ser validados com os seguintes atributos: requerido, somente leitura, quantidade de caracteres máxima, valor default(caso a pergunta tenha uma resposta default) ou um placeholder.
Para consumir sua aplicação utilize o client que é fornecido neste repositório.
### Requisitos para o desenvolvimento- Utilize um banco de dados noSQL baseado em documentos
- Desenvolva com tdd
- Utilize um gerenciador de dependência
- Automatize o build
- Coloque o código no GitHub
- Não fazer um fork deste repositório
- Um formulário deve conter título e ao menos um campo
- Um campo deve ter, obrigatoriamente, label e tipo
- Quando o tipo do campo for radio, obrigatoriamente deve ser preenchido o atributo radio
-
O cadastro gerado por um formulário deve ser validado de acordo com suas configurações.
Um campo pode ter as seguintes configurações: requerido, tamanho máximo, date, datetime, email, number, etc...
- O server deve retornar com status 400, com o json seguindo o seguinte padrão
{
"errors": [
{
"message": "O titulo não pode ser nulo",
"category": "<nodeDoCampo>"
},
{
"message": "O telefone deve conter no maximo x caracteres",
"category": "<nomeDoCampo>"
}
]
}
Exemplo de documento:
{
"_id": "51b8ac65e4b0b81dc2e743eb",
"title": "Título do formulário",
"fields": [{
"label": "Nome",
"type": "text",
"required": true,
"placeholder": "Nome:"
},{
"label": "Sexo",
"type": "radio",
"required": true,
"radios": [{
"label": "M",
"value": "masculino"
},{
"label": "F",
"value": "feminino"
}],
"value": 1
},{
"label": "E-mail",
"type": "email",
"required": false,
"placeholder": "Digite um e-mail"
},{
"label": "idade",
"type": "number",
"required": false
}],
"data": [
{
"nome": "Guilherme",
"sexo": "masculino",
"email": "guilherme@email.com",
"idade": 27
},
{
"nome": "Rafael",
"sexo": "masculino"
}
]
}
<tr>
<td><a href="#get-templates-id">GET /templates/:id</a></td>
<td><i>Devolve um formulário com todos os campos</i></td>
</tr>
<tr>
<td><a href="#post-templates">POST /templates</a></td>
<td><i>Adiciona um formulário</i></td>
</tr>
<tr>
<td><a href="#put-templates-id">PUT /templates/:id</a></td>
<td><i>Atualiza um template</i></td>
</tr>
<tr>
<td><a href="#delete-templates-id">DELETE /templates/:id</a></td>
<td><i>Remove um template</i></td>
</tr>
</tbody>
Recurso | Descrição |
---|---|
GET /templates | Devolve uma lista de formulários |
<tr>
<td><a href="#post-templates-id-data">POST /templates/:id/data/</a></td>
<td><i>Adiciona um dado num formulário</i></td>
</tr>
</tbody>
Recursos | Descrição |
---|---|
GET /templates/:id/data/ | Devolve uma lista dos dados preenchidos em um formulário template |
Devolve uma lista de formulários.
Url do recurso
http://<SEU-DOMINIO>:8080/coletor/templates
Exemplo de requisição
GET http://<SEU-DOMINIO>:8080/coletor/templates
[
{
"_id": "519a7d41c38f6b4eb02df70c",
"title": "Título do form",
"fields": [
{
"label": "nome"
},
{
"label": "email"
},
{
"label": "telefone"
}
],
"dataCount": "1000"
},
{
"_id": "995a7d41c38f6b4eb02df90a",
"title": "Título do form",
"fields": [
{
"label": "nome"
},
{
"label": "email"
},
{
"label": "telefone"
}
],
"dataCount": "1000"
}
]
Devolve um formulário com todos os campos
Url do recurso
http://<SEU-DOMINIO>:8080/coletor/templates/:id
Exemplo de requisição
GET http://<SEU-DOMINIO>:8080/coletor/templates/519a7d41c38f6b4eb02df70c
{
"_id": "519a7d41c38f6b4eb02df70c",
"title": "Formulário",
"fields": [{
"label": "nome",
"type": "text",
"required": true
}]
}
Adiciona um formulário
<tr>
<td>
fields<br/>
<i>requerido deve conter ao menos um field</i>
</td>
<td>
<i>Array</i><br/>
</td>
</tr>
<tr>
<td>
field.label<br/>
<i>requerido</i>
</td>
<td>
<i>String</i><br/>
<b>Ex value:</b> Nome
</td>
</tr>
<tr>
<td>
field.type<br/>
<i>requerido</i>
</td>
<td>
<i>String</i><br/>
valores: color, date, datetime, datetime-local, email, month, number, tel, time, url, week, checkbox, radio
<b>Ex value:</b> text
</td>
</tr>
<tr>
<td>
field.required<br/>
<i>opicional</i>
</td>
<td>
<i>booleano</i><br/>
se omitido por padrão é false.<br/>
<b>Ex value:</b> true
</td>
</tr>
<tr>
<td>
field.readOnly<br/>
<i>opicional</i>
</td>
<td>
<i>booleano</i><br/>
se omitido por padrão é false, caso seja true anula o required.<br/>
<b>Ex value:</b> true
</td>
</tr>
<tr>
<td>
field.value<br/>
<i>opicional</i>
</td>
<td>
<i>string</i><br/>
<b>Ex value:</b> Caio rolando da rocha
</td>
</tr>
<tr>
<td>
field.maxLength<br/>
<i>opicional</i>
</td>
<td>
<i>number</i><br/>
<b>Ex value:</b> 200
</td>
</tr>
<tr>
<td>
field.placeholder<br/>
<i>opicional</i>
</td>
<td>
<i>string</i><br/>
<b>Ex value:</b> Digite o nome:
</td>
</tr>
<tr>
<td>
field.radio<br/>
<i>opicional</i>
</td>
<td>
<i>array</i><br/>
requerido somente se o type for radio<br/>
<b>Ex value:</b> <pre>[
{
"label": "M",
"value": "masculino"
},
{
"label": "F",
"value": "feminino"
}
]
Atributos | Descrição |
---|---|
title requerido |
String Ex value: Formulário teste |
Url do recurso
http://<SEU-DOMINIO>:8080/coletor/templates
Exemplo de requisição
POST http://<SEU-DOMINIO>:8080/coletor/templates
Post Data
{
"title": "Nome do formulário",
"fields": [{
"label": "Sexo",
"type": "radio",
"required": true,
"readOnly": false,
"value": "masculino",
"radios": [
{
"label": "M",
"value": "masculino"
}, {
"label": "F",
"value": "feminino"
}
]
}]
}
{
"_id": "519a7d41c38f6b4eb02df70c",
"title": "Nome do formulário",
"fields": [{
"label": "Sexo",
"type": "radio",
"required": true,
"readOnly": false,
"value": "masculino",
"radios": [
{
"label": "M",
"value": "masculino"
}, {
"label": "F",
"value": "feminino"
}
]
}]
}
Url do recurso
http://<SEU-DOMINIO>:8080/coletor/templates/:id
Atualizar um template de formulário
Exemplo de requisição
PUT http://<SEU-DOMINIO>:8080/coletor/templates/519a7d41c38f6b4eb02df70c
Put Data
{
"title": "Alterando o titulo.",
"fields": [{
"label": "Sexo",
"type": "radio",
"required": true,
"readOnly": false,
"value": "masculino",
"radios": [
{
"label": "M",
"value": "masculino"
}, {
"label": "F",
"value": "feminino"
}
]
},{
"label": "Nome",
"type": "text",
"required": true
}]
}
{
"_id": "519a7d41c38f6b4eb02df70c",
"title": "Alterando o titulo.",
"fields": [{
"label": "Sexo",
"type": "radio",
"required": true,
"readOnly": false,
"value": "masculino",
"radios": [
{
"label": "M",
"value": "masculino"
}, {
"label": "F",
"value": "feminino"
}
]
},{
"label": "Nome",
"type": "text",
"required": true
}]
}
Url do recurso
http://<SEU-DOMINIO>:8080/coletor/templates/:id
Remove um template de formulário
Exemplo de requisição
DELETE http://<SEU-DOMINIO>:8080/coletor/templates/519a7d41c38f6b4eb02df70c
Url do recurso
http://<SEU-DOMINIO>:8080/coletor/templates/:id/data
Exemplo de requisição
GET http://<SEU-DOMINIO>:8080/coletor/templates/519a7d41c38f6b4eb02df70c/data
{
"fields": [
{"label": "id"},
{"label": "nome"},
{"label": "telefone"},
{"label": "email"},
{"label": "apelido"}
],
"data": [{
"nome": "nome1",
"telefone": "99999-999",
"email": "gfg@gmail.com",
"apelido": "apelido1"
},
{
"nome": "nome2",
"apelido": "apelido2",
"idade": 23
}]
}
Url do recurso
http://<SEU-DOMINIO>:8080/coletor/templates/:id/data
Exemplo de requisição
POST http://<SEU-DOMINIO>:8080/coletor/templates/519a7d41c38f6b4eb02df70c/data
Post Data
{
"nome": "Guilherme",
"telefone": "99999-9999",
"email": "email@gfg.com.br",
"apelido": "GFG"
}
-
Código do client
-
Pré-requisitos
Nodejs
npm install -g grunt-cli bower
Compass
gem install compass
-
Build
Execute os seguintes comandos:
npm install && bower install grunt
Para testar copie a pasta "dist" gerada pelo grunt, para dentro da sua aplicação.
Envie o projeto ou tire qualquer dúvidas no email:
guilherme.gregio@dafiti.com.br