Commit a05d7fd31e8718daf0be388ed5ea2b83f1580989

Authored by andre.guimaraes
1 parent 55db20f5
Exists in master

Cria README.md e arquivos .apidoc

- Cria README.md para documentar o projeto no SPB
- Move documentação apidoc para arquivos .apidoc
- Adiciona mensagem de erro em serviço que ainda não foi implementado
README.md 0 → 100644
@@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
  1 +# Templates-broker - API de manutenção e fornecimento de templates.
  2 +O Templates-broker é uma API para fornecimento de templates para geração de conteúdo dinâmico, podendo ser utilizado para gerar documentos, e-mails, relatórios, páginas e mais. A ideia é que a estrutura do template não faça parte da aplicação, podendo ser editada a qualquer momento e compartilhada com outras aplicações. O acesso ao template é feito através de uma chave de identificação e o preenchimento deverá ser feito pelo cliente.
  3 +
  4 +O broker não faz nenhum tipo de tratamento sobre o conteúdo do template e diversas engines podem ser utilizadas, mas inicialmente ele foi desenvolvido para ser utilizado com templates feitos em **[mustache](https://mustache.github.io/)**. O suporte a diversas linguagens faz com que o mustache seja uma ótima opção.
  5 +
  6 +Os templates são armazenados em banco e a cada atualização a versão anterior é adicionada ao histórico. Os templates podem ser alterados e recuperados sem que haja qualquer indisponibilidade das aplicações.
  7 +
  8 +## Requisitos
  9 +- Código-fonte do Broker pode ser baixado a partir do link https://softwarepublico.gov.br/gitlab/ans/templates-broker/tags](https://softwarepublico.gov.br/gitlab/ans/templates-broker/tags "Clique e acesse")
  10 +- [Apache Maven](https://maven.apache.org/) para baixar as dependências e compilar o pacote.
  11 +- Servidor [JBoss EAP 7.0.4](https://developers.redhat.com/products/eap/download/) ou [Wildfly 10](http://wildfly.org/downloads/).
  12 +- Banco relacional, o Broker foi desenvolvido usando Oracle 12g, mas com pouco esforço pode utilizar o MySQL.
  13 +- Conexão com a internet para que o Maven acesse os repositórios hospedeiros das dependências.
  14 +- Ferramenta [apiDoc](http://apidocjs.com/) para gerar a documentação da API.
  15 +
  16 +## Procedimentos para instalação
  17 +### Configurar as propriedades do datasource no JBoss.
  18 +O datasource `jdbc/templates` é declarado no arquivo `templates-ds.xml`, o funcionamento do datasource depende da declaração de algumas **System Properties** no JBoss.
  19 +
  20 +| Chave | Valor |
  21 +| ------------------------------------- | ----------------------------- |
  22 +| br.gov.ans.templates.db.connectionUrl | String de conexão com o banco |
  23 +| br.gov.ans.templates.db.password | Senha do usuário USUARIO_GETD |
  24 +
  25 +Abaixo um exemplo de declaração de propriedades feita no arquivo `standalone.xml`.
  26 +```xml
  27 +<!-- Geralmente no início do arquivo, após as extensions -->
  28 +<system-properties>
  29 + <!-- Outras propriedades ... -->
  30 + <property name="br.gov.ans.templates.db.connectionUrl" value="STRING_CONEXAO_BD_BROKER"/>
  31 + <property name="br.gov.ans.templates.db.password" value="SENHA_USUARIO_USUARIO_GETD"/>
  32 +</system-properties>
  33 +```
  34 +
  35 +### Criar security-domain no JBoss
  36 +É necessário que haja um security-domain registrado com o nome `ans-ws-auth`, o mesmo pode utilizar um banco de dados[^1] ou o LDAP. É importante destacar que o Broker trabalha com autorização baseada em papéis(RBAC[^2]) e que os usuários precisam ter seus papéis atribuídos.
  37 +[^1]: https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.0/html/how_to_configure_identity_management/configuring_a_security_domain_to_use_a_database
  38 +[^2]: https://en.wikipedia.org/wiki/Role-based_access_control
  39 +
  40 +### Implantar pacote gerado pelo Maven
  41 +Após a realização de todos os passos anteriores, teremos o JBoss pronto para receber o pacote do Templates-Broker. O deploy pode ser feito de diversas maneiras e não é o foco desse manual.
  42 +
  43 +Para essa etapa é necessário ter o Maven instalado e configurado. Ao realizar o primeiro build devemos desabilitar os testes automatizados, os testes dependem de uma instância ativa e impedirão a geração do pacote.
  44 +
  45 +### Gerar documentação da API
  46 +Após a implantação é **fundamental** que a documentação da API seja disponibilizada para os clientes do Broker. A documentação do Broker foi escrita utilizando a ferramenta [apiDoc](http://apidocjs.com/) e os fontes estão no diretório `/src/main/resources/apidoc/`. Será preciso fazer a instalação do apiDoc[^3] e executar o comando abaixo na raiz do projeto.
  47 +[^3]: http://apidocjs.com/#install
  48 +
  49 +```console
  50 +apidoc -f ".*\\.apidoc$" -i src/main/resources/apidoc/ -o <CAMINHO_ONDE_DOCUMENTACAO_SERA_GERADA>
  51 +```
  52 +
  53 +A documentação gerada deve ser disponibilizada em um local onde possa ser facilmente acessada pelos clientes.
  54 +
  55 +## Autenticação e Autorização
  56 +A autenticação no Templates-Broker é feita através do HTTP Basic e a autorização é baseada em roles/papéis que são atribuídas ao usuário. Os sistemas que utilizarão o broker precisarão de um usuário, esse usuário deve ser previamente cadastrado em uma fonte de dados e receber a role correspondente às suas necessidades. Esses dados serão verificados pelo security-domain `ans-ws-auth` que foi configurado no JBoss.
  57 +
  58 +### Roles/Papéis ###
  59 +Existem duas roles de acesso ao Broker, uma com acesso administrativo e outra somente para consulta. As roles precisam ter o nome idêntico ao definido no Broker, caso haja divergência o acesso será negado pelo [JAAS](https://en.wikipedia.org/wiki/Java_Authentication_and_Authorization_Service).
  60 +
  61 +| Role | Descrição |
  62 +| --------------------- | ------------------------- |
  63 +| RO_ADMIN_TEMPLATE | Perfil de administração |
  64 +| RO_USUARIO_TEMPLATE | Perfil de consulta |
src/main/java/br/gov/ans/templates/rest/ColaboradorResource.java
1 package br.gov.ans.templates.rest; 1 package br.gov.ans.templates.rest;
2 2
  3 +import javax.inject.Inject;
3 import javax.ws.rs.GET; 4 import javax.ws.rs.GET;
4 import javax.ws.rs.Path; 5 import javax.ws.rs.Path;
5 import javax.ws.rs.PathParam; 6 import javax.ws.rs.PathParam;
6 import javax.ws.rs.core.Response; 7 import javax.ws.rs.core.Response;
7 8
  9 +import org.apache.commons.lang3.NotImplementedException;
  10 +
  11 +import br.gov.ans.utils.MessageUtils;
  12 +
8 @Path("colaboradores") 13 @Path("colaboradores")
9 public class ColaboradorResource { 14 public class ColaboradorResource {
10 15
  16 + @Inject
  17 + private MessageUtils messages;
  18 +
11 @GET 19 @GET
12 @Path("{colaborador}/templates") 20 @Path("{colaborador}/templates")
13 public Response getTemplates(@PathParam("colaborador") String colaborador){ 21 public Response getTemplates(@PathParam("colaborador") String colaborador){
14 - return null; 22 + throw new NotImplementedException(messages.getMessage("erro.servico.nao.implementado"));
15 } 23 }
16 24
17 } 25 }
src/main/java/br/gov/ans/templates/rest/TemplateResource.java
@@ -56,52 +56,7 @@ public class TemplateResource { @@ -56,52 +56,7 @@ public class TemplateResource {
56 56
57 @Inject 57 @Inject
58 private MessageUtils messages; 58 private MessageUtils messages;
59 -  
60 - /**  
61 - * @api {get} /templates Listar templates  
62 - * @apiName listTemplates  
63 - * @apiGroup Template  
64 - * @apiVersion 1.0.0  
65 - * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE  
66 - *  
67 - * @apiDescription Consulta os templates disponíveis.  
68 - *  
69 - * @apiParam (Query Parameters) {String} [filtro] Valor utilizado para filtrar os templates.  
70 - * @apiParam (Query Parameters) {String} [itens = 20] Quantidade de templates que serão exibidos  
71 - * @apiParam (Query Parameters) {String} [pag = 1] Número da página  
72 - *  
73 - * @apiExample Exemplo de requisição:  
74 - * curl -i http://<host>/templates-broker/service/templates  
75 - *  
76 - * @apiSuccess (Sucesso - 200) {List} resultado Lista com os templates encontrados.  
77 - * @apiSuccess (Sucesso - 200) {Template} resultado.template Objeto representando o template.  
78 - * @apiSuccess (Sucesso - 200) {String} resultado.template.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.  
79 - * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de cadastro do template.  
80 - * @apiSuccess (Sucesso - 200) {String} resultado.template.descricao Descrição do template.  
81 - * @apiSuccess (Sucesso - 200) {String} resultado.template.exemplo Exemplo de request para preenchimento do template.  
82 - * @apiSuccess (Sucesso - 200) {String} resultado.template.nome Identificador do template  
83 - * @apiSuccess (Sucesso - 200) {String} resultado.template.responsavel Analista responsável pelo template.  
84 - * @apiSuccess (Sucesso - 200) {Boolean} resultado.template.restrito Flag identificando se a atualização deste template é restrita.  
85 - *  
86 - * @apiSuccessExample {json} Success-Response:  
87 - * HTTP/1.1 200 OK  
88 - * {  
89 - * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",  
90 - * "dataCadastro": "2017-03-14T16:57:47.405-03:00",  
91 - * "descricao": "Template de confirmação de cadastro.",  
92 - * "exemplo": "{"fulano":"André Guimarães"}",  
93 - * "nome": "confirmacao-cadastro",  
94 - * "responsavel": "andre.guimaraes",  
95 - * "restrito": false  
96 - * }  
97 - *  
98 - * @apiErrorExample {json} Error-Response:  
99 - * HTTP/1.1 500 Internal Server Error  
100 - * {  
101 - * "error":"Mensagem de erro."  
102 - * "code":"código do erro"  
103 - * }  
104 - */ 59 +
105 @GET 60 @GET
106 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 61 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
107 public Response listTemplates(@QueryParam("filtro") String filtro, @QueryParam("pag") String pagina, @QueryParam("itens") String tamanhoPagina) throws BusinessException, ResourceNotFoundException{ 62 public Response listTemplates(@QueryParam("filtro") String filtro, @QueryParam("pag") String pagina, @QueryParam("itens") String tamanhoPagina) throws BusinessException, ResourceNotFoundException{
@@ -118,48 +73,6 @@ public class TemplateResource { @@ -118,48 +73,6 @@ public class TemplateResource {
118 return Response.ok().entity(entity).header("total_registros", totalRegistros).build(); 73 return Response.ok().entity(entity).header("total_registros", totalRegistros).build();
119 } 74 }
120 75
121 - /**  
122 - * @api {get} /templates/:template Consultar template  
123 - * @apiName getTemplate  
124 - * @apiGroup Template  
125 - * @apiVersion 1.0.0  
126 - * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE  
127 - *  
128 - * @apiDescription Consulta um template.  
129 - *  
130 - * @apiParam (Path Parameters) {String} template Identificador do template  
131 - *  
132 - * @apiExample Exemplo de requisição:  
133 - * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro  
134 - *  
135 - * @apiSuccess (Sucesso - 200) {Template} template Objeto representando o template.  
136 - * @apiSuccess (Sucesso - 200) {String} template.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.  
137 - * @apiSuccess (Sucesso - 200) {String} template.dataCadastro Data de cadastro do template.  
138 - * @apiSuccess (Sucesso - 200) {String} template.descricao Descrição do template.  
139 - * @apiSuccess (Sucesso - 200) {String} template.exemplo Exemplo de request para preenchimento do template.  
140 - * @apiSuccess (Sucesso - 200) {String} template.nome Identificador do template.  
141 - * @apiSuccess (Sucesso - 200) {String} template.responsavel Analista responsável pelo template.  
142 - * @apiSuccess (Sucesso - 200) {Boolean} template.restrito Flag identificando se a atualização deste template é restrita.  
143 - *  
144 - * @apiSuccessExample {json} Success-Response:  
145 - * HTTP/1.1 200 OK  
146 - * {  
147 - * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",  
148 - * "dataCadastro": "2017-03-14T16:57:47.405-03:00",  
149 - * "descricao": "Template de confirmação de cadastro.",  
150 - * "exemplo": "{"fulano":"André Guimarães"}",  
151 - * "nome": "confirmacao-cadastro",  
152 - * "responsavel": "andre.guimaraes",  
153 - * "restrito": false,  
154 - * }  
155 - *  
156 - * @apiErrorExample {json} Error-Response:  
157 - * HTTP/1.1 500 Internal Server Error  
158 - * {  
159 - * "error":"Mensagem de erro."  
160 - * "code":"código do erro"  
161 - * }  
162 - */  
163 @GET 76 @GET
164 @Path("{template}") 77 @Path("{template}")
165 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 78 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -172,34 +85,7 @@ public class TemplateResource { @@ -172,34 +85,7 @@ public class TemplateResource {
172 85
173 return template; 86 return template;
174 } 87 }
175 -  
176 - /**  
177 - * @api {get} /templates/:template/corpo Recuperar corpo  
178 - * @apiName getCorpoTemplate  
179 - * @apiGroup Template  
180 - * @apiVersion 1.0.0  
181 - * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE  
182 - *  
183 - * @apiDescription Recupera o corpo de um template para utilização.  
184 - *  
185 - * @apiParam (Path Parameters) {String} template Identificador do template  
186 - *  
187 - * @apiExample Exemplo de requisição:  
188 - * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro  
189 - *  
190 - * @apiSuccess (Sucesso - 200) {String} corpo String com o corpo do template pronto para utilização.  
191 - *  
192 - * @apiSuccessExample {json} Success-Response:  
193 - * HTTP/1.1 200 OK  
194 - * Prezado {{fulano}}, seu cadastro foi realizado com sucesso.  
195 - *  
196 - * @apiErrorExample {json} Error-Response:  
197 - * HTTP/1.1 500 Internal Server Error  
198 - * {  
199 - * "error":"Mensagem de erro."  
200 - * "code":"código do erro"  
201 - * }  
202 - */ 88 +
203 @GET 89 @GET
204 @Path("{template}/corpo") 90 @Path("{template}/corpo")
205 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 91 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -207,48 +93,6 @@ public class TemplateResource { @@ -207,48 +93,6 @@ public class TemplateResource {
207 return new String(getTemplate(nomeTemplate).getCorpo()); 93 return new String(getTemplate(nomeTemplate).getCorpo());
208 } 94 }
209 95
210 - /**  
211 - * @api {post} /templates Adicionar template  
212 - * @apiName createTemplate  
213 - * @apiGroup Template  
214 - * @apiVersion 1.0.0  
215 - * @apiPermission RO_ADMIN_TEMPLATE  
216 - *  
217 - * @apiDescription Cria um novo template.  
218 - *  
219 - * @apiParam (Request Body) {Template} template Objeto de representação do template.  
220 - * @apiParam (Request Body) {String} corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.  
221 - * @apiParam (Request Body) {String} descricao Descrição do template.  
222 - * @apiParam (Request Body) {String} exemplo Exemplo de request para preenchimento do template.  
223 - * @apiParam (Request Body) {String} nome Identificador do template.  
224 - * @apiParam (Request Body) {String} responsavel Analista responsável pelo template.  
225 - * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template é restrita.  
226 - *  
227 - * @apiExample Exemplo de requisição:  
228 - * endpoint: [POST] http://<host>/templates-broker/service/templates/confirmacao-cadastro  
229 - *  
230 - * body:  
231 - * {  
232 - * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",  
233 - * "descricao": "Template de confirmação de cadastro.",  
234 - * "exemplo": "{"fulano":"André Guimarães"}",  
235 - * "nome": "confirmacao-cadastro",  
236 - * "responsavel": "andre.guimaraes",  
237 - * "restrito": true,  
238 - * }  
239 - *  
240 - * @apiSuccess (Sucesso - 201) {header} Location Caminho para o recurso criado.  
241 - *  
242 - * @apiSuccessExample {json} Success-Response:  
243 - * HTTP/1.1 201 Created  
244 - *  
245 - * @apiErrorExample {json} Error-Response:  
246 - * HTTP/1.1 500 Internal Server Error  
247 - * {  
248 - * "error":"Mensagem de erro."  
249 - * "code":"código do erro"  
250 - * }  
251 - */  
252 @POST 96 @POST
253 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 97 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
254 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 98 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -268,52 +112,7 @@ public class TemplateResource { @@ -268,52 +112,7 @@ public class TemplateResource {
268 112
269 return Response.created(getResourcePath(uriInfo, entity.getNome())).build(); 113 return Response.created(getResourcePath(uriInfo, entity.getNome())).build();
270 } 114 }
271 -  
272 - /**  
273 - * @api {put} /templates/:template Atualizar template  
274 - * @apiName editTemplate  
275 - * @apiGroup Template  
276 - * @apiVersion 1.0.0  
277 - * @apiPermission RO_ADMIN_TEMPLATE  
278 - *  
279 - * @apiDescription Atualiza um template.  
280 - *  
281 - * @apiParam (Path Parameters) {String} template Identificador do template  
282 - *  
283 - * @apiParam (Request Body) {Template} template Objeto de representação do template.  
284 - * @apiParam (Request Body) {String} corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.  
285 - * @apiParam (Request Body) {String} descricao Descrição do template.  
286 - * @apiParam (Request Body) {String} exemplo Exemplo de request para preenchimento do template.  
287 - * @apiParam (Request Body) {String} nome Identificador do template.  
288 - * @apiParam (Request Body) {String} responsavel Analista responsável pelo template.  
289 - * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template é restrita.  
290 - *  
291 - * @apiExample Exemplo de requisição:  
292 - * endpoint: [PUT] http://<host>/templates-broker/service/templates/confirmacao-cadastro  
293 - *  
294 - * body:  
295 - * {  
296 - * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",  
297 - * "descricao": "Template de confirmação de cadastro.",  
298 - * "exemplo": "{"fulano":"André Guimarães"}",  
299 - * "nome": "confirmacao-cadastro",  
300 - * "responsavel": "andre.guimaraes",  
301 - * "restrito": true,  
302 - * }  
303 - *  
304 - *  
305 - * @apiSuccess (Sucesso - 200) {header} Location Caminho para o recurso editado.  
306 - *  
307 - * @apiSuccessExample {json} Success-Response:  
308 - * HTTP/1.1 200 OK  
309 - *  
310 - * @apiErrorExample {json} Error-Response:  
311 - * HTTP/1.1 500 Internal Server Error  
312 - * {  
313 - * "error":"Mensagem de erro."  
314 - * "code":"código do erro"  
315 - * }  
316 - */ 115 +
317 @PUT 116 @PUT
318 @Path("{template}") 117 @Path("{template}")
319 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 118 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -341,31 +140,7 @@ public class TemplateResource { @@ -341,31 +140,7 @@ public class TemplateResource {
341 140
342 return Response.ok().contentLocation(getResourcePath(uriInfo, template.getNome())).build(); 141 return Response.ok().contentLocation(getResourcePath(uriInfo, template.getNome())).build();
343 } 142 }
344 -  
345 - /**  
346 - * @api {delete} /templates/:template Excluir template  
347 - * @apiName deleteTemplate  
348 - * @apiGroup Template  
349 - * @apiVersion 1.0.0  
350 - * @apiPermission RO_ADMIN_TEMPLATE  
351 - *  
352 - * @apiDescription Exclui determinado template.  
353 - *  
354 - * @apiParam (Path Parameters) {String} template Identificador do template  
355 - *  
356 - * @apiExample Exemplo de requisição:  
357 - * curl -X DELETE http://<host>/templates-broker/service/templates/confirmacao-cadastro  
358 - *  
359 - * @apiSuccessExample {json} Success-Response:  
360 - * HTTP/1.1 200 OK  
361 - *  
362 - * @apiErrorExample {json} Error-Response:  
363 - * HTTP/1.1 500 Internal Server Error  
364 - * {  
365 - * "error":"Mensagem de erro."  
366 - * "code":"código do erro"  
367 - * }  
368 - */ 143 +
369 @DELETE 144 @DELETE
370 @Path("{template}") 145 @Path("{template}")
371 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 146 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -378,43 +153,7 @@ public class TemplateResource { @@ -378,43 +153,7 @@ public class TemplateResource {
378 153
379 return Response.ok().build(); 154 return Response.ok().build();
380 } 155 }
381 -  
382 - /**  
383 - * @api {get} /templates/:template/colaboradores Listar colaboradores  
384 - * @apiName getColaboradores  
385 - * @apiGroup Colaborador  
386 - * @apiVersion 1.0.0  
387 - * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE  
388 - *  
389 - * @apiDescription Consulta os colaboradores do template.  
390 - *  
391 - * @apiParam (Path Parameters) {String} template Identificador do template  
392 - *  
393 - * @apiParam (Query Parameters) {String} [itens = 20] Quantidade de templates que serão exibidos  
394 - * @apiParam (Query Parameters) {String} [pag = 1] Número da página  
395 - *  
396 - * @apiExample Exemplo de requisição:  
397 - * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores  
398 - *  
399 - * @apiSuccess (Sucesso - 200) {List} resultado Lista com os colaboradores do template.  
400 - * @apiSuccess (Sucesso - 200) {Colaborador} resultado.colaborador Objeto representando um colaborador.  
401 - * @apiSuccess (Sucesso - 200) {String} resultado.colaborador.usuario Identificador do colaborador.  
402 - * @apiSuccess (Sucesso - 200) {Boolean} resultado.colaborador.editor Flag que determina se o colaborador tem o poder para editar o template.  
403 - *  
404 - * @apiSuccessExample {json} Success-Response:  
405 - * HTTP/1.1 200 OK  
406 - * {  
407 - * "editor": true,  
408 - * "usuario": "andre.guimaraes",  
409 - * }  
410 - *  
411 - * @apiErrorExample {json} Error-Response:  
412 - * HTTP/1.1 500 Internal Server Error  
413 - * {  
414 - * "error":"Mensagem de erro."  
415 - * "code":"código do erro"  
416 - * }  
417 - */ 156 +
418 @GET 157 @GET
419 @Path("{template}/colaboradores") 158 @Path("{template}/colaboradores")
420 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 159 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -432,78 +171,13 @@ public class TemplateResource { @@ -432,78 +171,13 @@ public class TemplateResource {
432 return Response.ok().entity(entity).header("total_registros", totalRegistros).build(); 171 return Response.ok().entity(entity).header("total_registros", totalRegistros).build();
433 } 172 }
434 173
435 - /**  
436 - * @api {get} /templates/:template/colaboradores/:colaborador Consultar colaborador  
437 - * @apiName getColaborador  
438 - * @apiGroup Colaborador  
439 - * @apiVersion 1.0.0  
440 - * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE  
441 - *  
442 - * @apiDescription Consulta um colaborador.  
443 - *  
444 - * @apiParam (Path Parameters) {String} template Identificador do template  
445 - * @apiParam (Path Parameters) {String} colaborador Identificador do colaborador  
446 - *  
447 - * @apiExample Exemplo de requisição:  
448 - * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores/andre.guimaraes  
449 - *  
450 - * @apiSuccess (Sucesso - 200) {Colaborador} colaborador Objeto representando um colaborador.  
451 - * @apiSuccess (Sucesso - 200) {String} colaborador.usuario Identificador do colaborador.  
452 - * @apiSuccess (Sucesso - 200) {Boolean} colaborador.editor Flag que determina se o colaborador tem o poder para editar o template.  
453 - *  
454 - * @apiSuccessExample {json} Success-Response:  
455 - * HTTP/1.1 200 OK  
456 - * {  
457 - * "editor": true,  
458 - * "usuario": "andre.guimaraes"  
459 - * }  
460 - *  
461 - * @apiErrorExample {json} Error-Response:  
462 - * HTTP/1.1 500 Internal Server Error  
463 - * {  
464 - * "error":"Mensagem de erro."  
465 - * "code":"código do erro"  
466 - * }  
467 - */  
468 @GET 174 @GET
469 @Path("{template}/colaboradores/{colaborador}") 175 @Path("{template}/colaboradores/{colaborador}")
470 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 176 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
471 public Colaborador getColaborador(@PathParam("template") String template, @PathParam("colaborador") String colaborador) throws ResourceNotFoundException{ 177 public Colaborador getColaborador(@PathParam("template") String template, @PathParam("colaborador") String colaborador) throws ResourceNotFoundException{
472 return daoColaborador.getColaborador(getTemplate(template).getId(), colaborador); 178 return daoColaborador.getColaborador(getTemplate(template).getId(), colaborador);
473 } 179 }
474 -  
475 - /**  
476 - * @api {post} /templates/:template/colaboradores Adicionar colaborador  
477 - * @apiName addColaborador  
478 - * @apiGroup Colaborador  
479 - * @apiVersion 1.0.0  
480 - * @apiPermission RO_ADMIN_TEMPLATE  
481 - *  
482 - * @apiDescription Adiciona um colaborador ao template.  
483 - *  
484 - * @apiParam (Path Parameters) {String} template Identificador do template  
485 - *  
486 - * @apiExample Exemplo de requisição:  
487 - * endpoint: [POST] http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores  
488 - *  
489 - * body:  
490 - * {  
491 - * "usuario": "andre.guimaraes",  
492 - * "editor": true  
493 - * }  
494 - *  
495 - * @apiSuccess (Sucesso - 201) {header} Location Caminho para o recurso criado.  
496 - *  
497 - * @apiSuccessExample {json} Success-Response:  
498 - * HTTP/1.1 201 Created  
499 - *  
500 - * @apiErrorExample {json} Error-Response:  
501 - * HTTP/1.1 500 Internal Server Error  
502 - * {  
503 - * "error":"Mensagem de erro."  
504 - * "code":"código do erro"  
505 - * }  
506 - */ 180 +
507 @POST 181 @POST
508 @Path("{template}/colaboradores") 182 @Path("{template}/colaboradores")
509 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 183 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -517,32 +191,7 @@ public class TemplateResource { @@ -517,32 +191,7 @@ public class TemplateResource {
517 191
518 return Response.ok().contentLocation(getResourcePath(uriInfo, colaborador.getUsuario())).build(); 192 return Response.ok().contentLocation(getResourcePath(uriInfo, colaborador.getUsuario())).build();
519 } 193 }
520 -  
521 - /**  
522 - * @api {delete} /templates/:template/colaboradores/:colaborador Remover colaborador  
523 - * @apiName removeColaborador  
524 - * @apiGroup Colaborador  
525 - * @apiVersion 1.0.0  
526 - * @apiPermission RO_ADMIN_TEMPLATE  
527 - *  
528 - * @apiDescription Remove colaborador de um template.  
529 - *  
530 - * @apiParam (Path Parameters) {String} template Identificador do template  
531 - * @apiParam (Path Parameters) {String} colaborador Identificador do colaborador  
532 - *  
533 - * @apiExample Exemplo de requisição:  
534 - * curl -X DELETE http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores/andre.guimaraes  
535 - *  
536 - * @apiSuccessExample {json} Success-Response:  
537 - * HTTP/1.1 200 OK  
538 - *  
539 - * @apiErrorExample {json} Error-Response:  
540 - * HTTP/1.1 500 Internal Server Error  
541 - * {  
542 - * "error":"Mensagem de erro."  
543 - * "code":"código do erro"  
544 - * }  
545 - */ 194 +
546 @DELETE 195 @DELETE
547 @Path("{template}/colaboradores/{colaborador}") 196 @Path("{template}/colaboradores/{colaborador}")
548 public Response removeColaborador(@PathParam("template") String template,@PathParam("colaborador") String nomeColaborador) throws ResourceNotFoundException{ 197 public Response removeColaborador(@PathParam("template") String template,@PathParam("colaborador") String nomeColaborador) throws ResourceNotFoundException{
@@ -554,46 +203,7 @@ public class TemplateResource { @@ -554,46 +203,7 @@ public class TemplateResource {
554 203
555 return Response.ok().build(); 204 return Response.ok().build();
556 } 205 }
557 -  
558 - /**  
559 - * @api {get} /templates/:template/versoes Listar versões  
560 - * @apiName getVersoes  
561 - * @apiGroup Template  
562 - * @apiVersion 1.0.0  
563 - * @apiPermission RO_ADMIN_TEMPLATE, RO_ADMIN_TEMPLATE  
564 - *  
565 - * @apiDescription Lista as versões de um template  
566 - *  
567 - * @apiParam (Path Parameters) {String} template Identificador do template  
568 - *  
569 - * @apiExample Exemplo de requisição:  
570 - * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro/versoes  
571 - *  
572 - * @apiSuccess (Sucesso - 200) {List} resultado Lista com as versões do template.  
573 - * @apiSuccess (Sucesso - 200) {Versao} resultado.versao Objeto representando uma versão do template.  
574 - * @apiSuccess (Sucesso - 200) {String} resultado.versao.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.  
575 - * @apiSuccess (Sucesso - 200) {Date} resultado.versao.data Data da versão.  
576 - * @apiSuccess (Sucesso - 200) {String} resultado.versao.descricao Descrição do template.  
577 - * @apiSuccess (Sucesso - 200) {String} resultado.versao.exemplo Exemplo de request para preenchimento do template.  
578 - * @apiSuccess (Sucesso - 200) {String} resultado.versao.responsavel Identificador do colaborador responsável.  
579 - *  
580 - * @apiSuccessExample {json} Success-Response:  
581 - * HTTP/1.1 200 OK  
582 - * {  
583 - * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",  
584 - * "data":"2017-03-14T16:57:47.405-03:00",  
585 - * "descricao": "Template de confirmação de cadastro.",  
586 - * "exemplo": "{"fulano":"André Guimarães"}",  
587 - * "responsavel": "andre.guimaraes",  
588 - * }  
589 - *  
590 - * @apiErrorExample {json} Error-Response:  
591 - * HTTP/1.1 500 Internal Server Error  
592 - * {  
593 - * "error":"Mensagem de erro."  
594 - * "code":"código do erro"  
595 - * }  
596 - */ 206 +
597 @GET 207 @GET
598 @Path("{template}/versoes/") 208 @Path("{template}/versoes/")
599 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 209 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -610,31 +220,6 @@ public class TemplateResource { @@ -610,31 +220,6 @@ public class TemplateResource {
610 return Response.ok().entity(entity).build(); 220 return Response.ok().entity(entity).build();
611 } 221 }
612 222
613 -  
614 - /**  
615 - * @api {delete} /templates/excluidos/:template Recuperar template  
616 - * @apiName undeleteTemplate  
617 - * @apiGroup Template  
618 - * @apiVersion 1.0.0  
619 - * @apiPermission RO_ADMIN_TEMPLATE  
620 - *  
621 - * @apiDescription Recupera um template excluído.  
622 - *  
623 - * @apiParam (Path Parameters) {String} template Identificador do template  
624 - *  
625 - * @apiExample Exemplo de requisição:  
626 - * curl -X DELETE http://<host>/templates-broker/service/templates/excluidos/admp-template-novo-usuario  
627 - *  
628 - * @apiSuccessExample {json} Success-Response:  
629 - * HTTP/1.1 200 OK  
630 - *  
631 - * @apiErrorExample {json} Error-Response:  
632 - * HTTP/1.1 500 Internal Server Error  
633 - * {  
634 - * "error":"Mensagem de erro."  
635 - * "code":"código do erro"  
636 - * }  
637 - */  
638 @DELETE 223 @DELETE
639 @Path("excluidos/{template}") 224 @Path("excluidos/{template}")
640 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 225 @Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@@ -647,54 +232,7 @@ public class TemplateResource { @@ -647,54 +232,7 @@ public class TemplateResource {
647 232
648 return Response.ok().build(); 233 return Response.ok().build();
649 } 234 }
650 -  
651 - /**  
652 - * @api {get} /templates Listar templates excluídos  
653 - * @apiName listTemplatesExcluidos  
654 - * @apiGroup Template  
655 - * @apiVersion 1.0.0  
656 - * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE  
657 - *  
658 - * @apiDescription Consulta os templates que foram excluídos.  
659 - *  
660 - * @apiParam (Query Parameters) {String} [filtro] Valor utilizado para filtrar os templates.  
661 - * @apiParam (Query Parameters) {String} [itens = 20] Quantidade de templates que serão exibidos  
662 - * @apiParam (Query Parameters) {String} [pag = 1] Número da página  
663 - *  
664 - * @apiExample Exemplo de requisição:  
665 - * curl -i http://<host>/templates-broker/service/templates  
666 - *  
667 - * @apiSuccess (Sucesso - 200) {List} resultado Lista com os templates encontrados.  
668 - * @apiSuccess (Sucesso - 200) {Template} resultado.template Objeto representando o template.  
669 - * @apiSuccess (Sucesso - 200) {String} resultado.template.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.  
670 - * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de cadastro do template.  
671 - * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de exclusao do template.  
672 - * @apiSuccess (Sucesso - 200) {String} resultado.template.descricao Descrição do template.  
673 - * @apiSuccess (Sucesso - 200) {String} resultado.template.exemplo Exemplo de request para preenchimento do template.  
674 - * @apiSuccess (Sucesso - 200) {String} resultado.template.nome Identificador do template  
675 - * @apiSuccess (Sucesso - 200) {String} resultado.template.responsavel Analista responsável pelo template.  
676 - * @apiSuccess (Sucesso - 200) {Boolean} resultado.template.restrito Flag identificando se a atualização deste template é restrita.  
677 - *  
678 - * @apiSuccessExample {json} Success-Response:  
679 - * HTTP/1.1 200 OK  
680 - * {  
681 - * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",  
682 - * "dataCadastro": "2017-03-14T16:57:47.405-03:00",  
683 - * "descricao": "Template de confirmação de cadastro.",  
684 - * "exemplo": "{"fulano":"André Guimarães"}",  
685 - * "nome": "confirmacao-cadastro",  
686 - * "responsavel": "andre.guimaraes",  
687 - * "restrito": false,  
688 - * "dataExclusao":"2017-08-14T16:57:47.405-03:00"  
689 - * }  
690 - *  
691 - * @apiErrorExample {json} Error-Response:  
692 - * HTTP/1.1 500 Internal Server Error  
693 - * {  
694 - * "error":"Mensagem de erro."  
695 - * "code":"código do erro"  
696 - * }  
697 - */ 235 +
698 @GET 236 @GET
699 @Path("excluidos") 237 @Path("excluidos")
700 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 238 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
src/main/resources/apidoc/template.apidoc 0 → 100644
@@ -0,0 +1,473 @@ @@ -0,0 +1,473 @@
  1 + /**
  2 + * @api {get} /templates Listar templates
  3 + * @apiName listTemplates
  4 + * @apiGroup Template
  5 + * @apiVersion 1.0.0
  6 + * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE
  7 + *
  8 + * @apiDescription Consulta os templates disponíveis.
  9 + *
  10 + * @apiParam (Query Parameters) {String} [filtro] Valor utilizado para filtrar os templates.
  11 + * @apiParam (Query Parameters) {String} [itens = 20] Quantidade de templates que serão exibidos
  12 + * @apiParam (Query Parameters) {String} [pag = 1] Número da página
  13 + *
  14 + * @apiExample Exemplo de requisição:
  15 + * curl -i http://<host>/templates-broker/service/templates
  16 + *
  17 + * @apiSuccess (Sucesso - 200) {List} resultado Lista com os templates encontrados.
  18 + * @apiSuccess (Sucesso - 200) {Template} resultado.template Objeto representando o template.
  19 + * @apiSuccess (Sucesso - 200) {String} resultado.template.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.
  20 + * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de cadastro do template.
  21 + * @apiSuccess (Sucesso - 200) {String} resultado.template.descricao Descrição do template.
  22 + * @apiSuccess (Sucesso - 200) {String} resultado.template.exemplo Exemplo de request para preenchimento do template.
  23 + * @apiSuccess (Sucesso - 200) {String} resultado.template.nome Identificador do template
  24 + * @apiSuccess (Sucesso - 200) {String} resultado.template.responsavel Analista responsável pelo template.
  25 + * @apiSuccess (Sucesso - 200) {Boolean} resultado.template.restrito Flag identificando se a atualização deste template é restrita.
  26 + *
  27 + * @apiSuccessExample {json} Success-Response:
  28 + * HTTP/1.1 200 OK
  29 + * {
  30 + * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",
  31 + * "dataCadastro": "2017-03-14T16:57:47.405-03:00",
  32 + * "descricao": "Template de confirmação de cadastro.",
  33 + * "exemplo": "{"fulano":"André Guimarães"}",
  34 + * "nome": "confirmacao-cadastro",
  35 + * "responsavel": "andre.guimaraes",
  36 + * "restrito": false
  37 + * }
  38 + *
  39 + * @apiErrorExample {json} Error-Response:
  40 + * HTTP/1.1 500 Internal Server Error
  41 + * {
  42 + * "error":"Mensagem de erro."
  43 + * "code":"código do erro"
  44 + * }
  45 + */
  46 +
  47 + /**
  48 + * @api {get} /templates/:template Consultar template
  49 + * @apiName getTemplate
  50 + * @apiGroup Template
  51 + * @apiVersion 1.0.0
  52 + * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE
  53 + *
  54 + * @apiDescription Consulta um template.
  55 + *
  56 + * @apiParam (Path Parameters) {String} template Identificador do template
  57 + *
  58 + * @apiExample Exemplo de requisição:
  59 + * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro
  60 + *
  61 + * @apiSuccess (Sucesso - 200) {Template} template Objeto representando o template.
  62 + * @apiSuccess (Sucesso - 200) {String} template.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.
  63 + * @apiSuccess (Sucesso - 200) {String} template.dataCadastro Data de cadastro do template.
  64 + * @apiSuccess (Sucesso - 200) {String} template.descricao Descrição do template.
  65 + * @apiSuccess (Sucesso - 200) {String} template.exemplo Exemplo de request para preenchimento do template.
  66 + * @apiSuccess (Sucesso - 200) {String} template.nome Identificador do template.
  67 + * @apiSuccess (Sucesso - 200) {String} template.responsavel Analista responsável pelo template.
  68 + * @apiSuccess (Sucesso - 200) {Boolean} template.restrito Flag identificando se a atualização deste template é restrita.
  69 + *
  70 + * @apiSuccessExample {json} Success-Response:
  71 + * HTTP/1.1 200 OK
  72 + * {
  73 + * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",
  74 + * "dataCadastro": "2017-03-14T16:57:47.405-03:00",
  75 + * "descricao": "Template de confirmação de cadastro.",
  76 + * "exemplo": "{"fulano":"André Guimarães"}",
  77 + * "nome": "confirmacao-cadastro",
  78 + * "responsavel": "andre.guimaraes",
  79 + * "restrito": false,
  80 + * }
  81 + *
  82 + * @apiErrorExample {json} Error-Response:
  83 + * HTTP/1.1 500 Internal Server Error
  84 + * {
  85 + * "error":"Mensagem de erro."
  86 + * "code":"código do erro"
  87 + * }
  88 + */
  89 +
  90 + /**
  91 + * @api {get} /templates/:template/corpo Recuperar corpo
  92 + * @apiName getCorpoTemplate
  93 + * @apiGroup Template
  94 + * @apiVersion 1.0.0
  95 + * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE
  96 + *
  97 + * @apiDescription Recupera o corpo de um template para utilização.
  98 + *
  99 + * @apiParam (Path Parameters) {String} template Identificador do template
  100 + *
  101 + * @apiExample Exemplo de requisição:
  102 + * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro
  103 + *
  104 + * @apiSuccess (Sucesso - 200) {String} corpo String com o corpo do template pronto para utilização.
  105 + *
  106 + * @apiSuccessExample {json} Success-Response:
  107 + * HTTP/1.1 200 OK
  108 + * Prezado {{fulano}}, seu cadastro foi realizado com sucesso.
  109 + *
  110 + * @apiErrorExample {json} Error-Response:
  111 + * HTTP/1.1 500 Internal Server Error
  112 + * {
  113 + * "error":"Mensagem de erro."
  114 + * "code":"código do erro"
  115 + * }
  116 + */
  117 +
  118 + /**
  119 + * @api {post} /templates Adicionar template
  120 + * @apiName createTemplate
  121 + * @apiGroup Template
  122 + * @apiVersion 1.0.0
  123 + * @apiPermission RO_ADMIN_TEMPLATE
  124 + *
  125 + * @apiDescription Cria um novo template.
  126 + *
  127 + * @apiParam (Request Body) {Template} template Objeto de representação do template.
  128 + * @apiParam (Request Body) {String} corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.
  129 + * @apiParam (Request Body) {String} descricao Descrição do template.
  130 + * @apiParam (Request Body) {String} exemplo Exemplo de request para preenchimento do template.
  131 + * @apiParam (Request Body) {String} nome Identificador do template.
  132 + * @apiParam (Request Body) {String} responsavel Analista responsável pelo template.
  133 + * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template é restrita.
  134 + *
  135 + * @apiExample Exemplo de requisição:
  136 + * endpoint: [POST] http://<host>/templates-broker/service/templates/confirmacao-cadastro
  137 + *
  138 + * body:
  139 + * {
  140 + * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",
  141 + * "descricao": "Template de confirmação de cadastro.",
  142 + * "exemplo": "{"fulano":"André Guimarães"}",
  143 + * "nome": "confirmacao-cadastro",
  144 + * "responsavel": "andre.guimaraes",
  145 + * "restrito": true,
  146 + * }
  147 + *
  148 + * @apiSuccess (Sucesso - 201) {header} Location Caminho para o recurso criado.
  149 + *
  150 + * @apiSuccessExample {json} Success-Response:
  151 + * HTTP/1.1 201 Created
  152 + *
  153 + * @apiErrorExample {json} Error-Response:
  154 + * HTTP/1.1 500 Internal Server Error
  155 + * {
  156 + * "error":"Mensagem de erro."
  157 + * "code":"código do erro"
  158 + * }
  159 + */
  160 +
  161 + /**
  162 + * @api {put} /templates/:template Atualizar template
  163 + * @apiName editTemplate
  164 + * @apiGroup Template
  165 + * @apiVersion 1.0.0
  166 + * @apiPermission RO_ADMIN_TEMPLATE
  167 + *
  168 + * @apiDescription Atualiza um template.
  169 + *
  170 + * @apiParam (Path Parameters) {String} template Identificador do template
  171 + *
  172 + * @apiParam (Request Body) {Template} template Objeto de representação do template.
  173 + * @apiParam (Request Body) {String} corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.
  174 + * @apiParam (Request Body) {String} descricao Descrição do template.
  175 + * @apiParam (Request Body) {String} exemplo Exemplo de request para preenchimento do template.
  176 + * @apiParam (Request Body) {String} nome Identificador do template.
  177 + * @apiParam (Request Body) {String} responsavel Analista responsável pelo template.
  178 + * @apiParam (Request Body) {String} restrito Flag identificando se a atualização deste template é restrita.
  179 + *
  180 + * @apiExample Exemplo de requisição:
  181 + * endpoint: [PUT] http://<host>/templates-broker/service/templates/confirmacao-cadastro
  182 + *
  183 + * body:
  184 + * {
  185 + * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",
  186 + * "descricao": "Template de confirmação de cadastro.",
  187 + * "exemplo": "{"fulano":"André Guimarães"}",
  188 + * "nome": "confirmacao-cadastro",
  189 + * "responsavel": "andre.guimaraes",
  190 + * "restrito": true,
  191 + * }
  192 + *
  193 + *
  194 + * @apiSuccess (Sucesso - 200) {header} Location Caminho para o recurso editado.
  195 + *
  196 + * @apiSuccessExample {json} Success-Response:
  197 + * HTTP/1.1 200 OK
  198 + *
  199 + * @apiErrorExample {json} Error-Response:
  200 + * HTTP/1.1 500 Internal Server Error
  201 + * {
  202 + * "error":"Mensagem de erro."
  203 + * "code":"código do erro"
  204 + * }
  205 + */
  206 +
  207 + /**
  208 + * @api {delete} /templates/:template Excluir template
  209 + * @apiName deleteTemplate
  210 + * @apiGroup Template
  211 + * @apiVersion 1.0.0
  212 + * @apiPermission RO_ADMIN_TEMPLATE
  213 + *
  214 + * @apiDescription Exclui determinado template.
  215 + *
  216 + * @apiParam (Path Parameters) {String} template Identificador do template
  217 + *
  218 + * @apiExample Exemplo de requisição:
  219 + * curl -X DELETE http://<host>/templates-broker/service/templates/confirmacao-cadastro
  220 + *
  221 + * @apiSuccessExample {json} Success-Response:
  222 + * HTTP/1.1 200 OK
  223 + *
  224 + * @apiErrorExample {json} Error-Response:
  225 + * HTTP/1.1 500 Internal Server Error
  226 + * {
  227 + * "error":"Mensagem de erro."
  228 + * "code":"código do erro"
  229 + * }
  230 + */
  231 +
  232 + /**
  233 + * @api {get} /templates/:template/colaboradores Listar colaboradores
  234 + * @apiName getColaboradores
  235 + * @apiGroup Colaborador
  236 + * @apiVersion 1.0.0
  237 + * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE
  238 + *
  239 + * @apiDescription Consulta os colaboradores do template.
  240 + *
  241 + * @apiParam (Path Parameters) {String} template Identificador do template
  242 + *
  243 + * @apiParam (Query Parameters) {String} [itens = 20] Quantidade de templates que serão exibidos
  244 + * @apiParam (Query Parameters) {String} [pag = 1] Número da página
  245 + *
  246 + * @apiExample Exemplo de requisição:
  247 + * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores
  248 + *
  249 + * @apiSuccess (Sucesso - 200) {List} resultado Lista com os colaboradores do template.
  250 + * @apiSuccess (Sucesso - 200) {Colaborador} resultado.colaborador Objeto representando um colaborador.
  251 + * @apiSuccess (Sucesso - 200) {String} resultado.colaborador.usuario Identificador do colaborador.
  252 + * @apiSuccess (Sucesso - 200) {Boolean} resultado.colaborador.editor Flag que determina se o colaborador tem o poder para editar o template.
  253 + *
  254 + * @apiSuccessExample {json} Success-Response:
  255 + * HTTP/1.1 200 OK
  256 + * {
  257 + * "editor": true,
  258 + * "usuario": "andre.guimaraes",
  259 + * }
  260 + *
  261 + * @apiErrorExample {json} Error-Response:
  262 + * HTTP/1.1 500 Internal Server Error
  263 + * {
  264 + * "error":"Mensagem de erro."
  265 + * "code":"código do erro"
  266 + * }
  267 + */
  268 +
  269 + /**
  270 + * @api {get} /templates/:template/colaboradores/:colaborador Consultar colaborador
  271 + * @apiName getColaborador
  272 + * @apiGroup Colaborador
  273 + * @apiVersion 1.0.0
  274 + * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE
  275 + *
  276 + * @apiDescription Consulta um colaborador.
  277 + *
  278 + * @apiParam (Path Parameters) {String} template Identificador do template
  279 + * @apiParam (Path Parameters) {String} colaborador Identificador do colaborador
  280 + *
  281 + * @apiExample Exemplo de requisição:
  282 + * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores/andre.guimaraes
  283 + *
  284 + * @apiSuccess (Sucesso - 200) {Colaborador} colaborador Objeto representando um colaborador.
  285 + * @apiSuccess (Sucesso - 200) {String} colaborador.usuario Identificador do colaborador.
  286 + * @apiSuccess (Sucesso - 200) {Boolean} colaborador.editor Flag que determina se o colaborador tem o poder para editar o template.
  287 + *
  288 + * @apiSuccessExample {json} Success-Response:
  289 + * HTTP/1.1 200 OK
  290 + * {
  291 + * "editor": true,
  292 + * "usuario": "andre.guimaraes"
  293 + * }
  294 + *
  295 + * @apiErrorExample {json} Error-Response:
  296 + * HTTP/1.1 500 Internal Server Error
  297 + * {
  298 + * "error":"Mensagem de erro."
  299 + * "code":"código do erro"
  300 + * }
  301 + */
  302 +
  303 + /**
  304 + * @api {post} /templates/:template/colaboradores Adicionar colaborador
  305 + * @apiName addColaborador
  306 + * @apiGroup Colaborador
  307 + * @apiVersion 1.0.0
  308 + * @apiPermission RO_ADMIN_TEMPLATE
  309 + *
  310 + * @apiDescription Adiciona um colaborador ao template.
  311 + *
  312 + * @apiParam (Path Parameters) {String} template Identificador do template
  313 + *
  314 + * @apiExample Exemplo de requisição:
  315 + * endpoint: [POST] http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores
  316 + *
  317 + * body:
  318 + * {
  319 + * "usuario": "andre.guimaraes",
  320 + * "editor": true
  321 + * }
  322 + *
  323 + * @apiSuccess (Sucesso - 201) {header} Location Caminho para o recurso criado.
  324 + *
  325 + * @apiSuccessExample {json} Success-Response:
  326 + * HTTP/1.1 201 Created
  327 + *
  328 + * @apiErrorExample {json} Error-Response:
  329 + * HTTP/1.1 500 Internal Server Error
  330 + * {
  331 + * "error":"Mensagem de erro."
  332 + * "code":"código do erro"
  333 + * }
  334 + */
  335 +
  336 + /**
  337 + * @api {delete} /templates/:template/colaboradores/:colaborador Remover colaborador
  338 + * @apiName removeColaborador
  339 + * @apiGroup Colaborador
  340 + * @apiVersion 1.0.0
  341 + * @apiPermission RO_ADMIN_TEMPLATE
  342 + *
  343 + * @apiDescription Remove colaborador de um template.
  344 + *
  345 + * @apiParam (Path Parameters) {String} template Identificador do template
  346 + * @apiParam (Path Parameters) {String} colaborador Identificador do colaborador
  347 + *
  348 + * @apiExample Exemplo de requisição:
  349 + * curl -X DELETE http://<host>/templates-broker/service/templates/confirmacao-cadastro/colaboradores/andre.guimaraes
  350 + *
  351 + * @apiSuccessExample {json} Success-Response:
  352 + * HTTP/1.1 200 OK
  353 + *
  354 + * @apiErrorExample {json} Error-Response:
  355 + * HTTP/1.1 500 Internal Server Error
  356 + * {
  357 + * "error":"Mensagem de erro."
  358 + * "code":"código do erro"
  359 + * }
  360 + */
  361 +
  362 + /**
  363 + * @api {get} /templates/:template/versoes Listar versões
  364 + * @apiName getVersoes
  365 + * @apiGroup Template
  366 + * @apiVersion 1.0.0
  367 + * @apiPermission RO_ADMIN_TEMPLATE, RO_ADMIN_TEMPLATE
  368 + *
  369 + * @apiDescription Lista as versões de um template
  370 + *
  371 + * @apiParam (Path Parameters) {String} template Identificador do template
  372 + *
  373 + * @apiExample Exemplo de requisição:
  374 + * curl -i http://<host>/templates-broker/service/templates/confirmacao-cadastro/versoes
  375 + *
  376 + * @apiSuccess (Sucesso - 200) {List} resultado Lista com as versões do template.
  377 + * @apiSuccess (Sucesso - 200) {Versao} resultado.versao Objeto representando uma versão do template.
  378 + * @apiSuccess (Sucesso - 200) {String} resultado.versao.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.
  379 + * @apiSuccess (Sucesso - 200) {Date} resultado.versao.data Data da versão.
  380 + * @apiSuccess (Sucesso - 200) {String} resultado.versao.descricao Descrição do template.
  381 + * @apiSuccess (Sucesso - 200) {String} resultado.versao.exemplo Exemplo de request para preenchimento do template.
  382 + * @apiSuccess (Sucesso - 200) {String} resultado.versao.responsavel Identificador do colaborador responsável.
  383 + *
  384 + * @apiSuccessExample {json} Success-Response:
  385 + * HTTP/1.1 200 OK
  386 + * {
  387 + * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",
  388 + * "data":"2017-03-14T16:57:47.405-03:00",
  389 + * "descricao": "Template de confirmação de cadastro.",
  390 + * "exemplo": "{"fulano":"André Guimarães"}",
  391 + * "responsavel": "andre.guimaraes",
  392 + * }
  393 + *
  394 + * @apiErrorExample {json} Error-Response:
  395 + * HTTP/1.1 500 Internal Server Error
  396 + * {
  397 + * "error":"Mensagem de erro."
  398 + * "code":"código do erro"
  399 + * }
  400 + */
  401 +
  402 + /**
  403 + * @api {delete} /templates/excluidos/:template Recuperar template
  404 + * @apiName undeleteTemplate
  405 + * @apiGroup Template
  406 + * @apiVersion 1.0.0
  407 + * @apiPermission RO_ADMIN_TEMPLATE
  408 + *
  409 + * @apiDescription Recupera um template excluído.
  410 + *
  411 + * @apiParam (Path Parameters) {String} template Identificador do template
  412 + *
  413 + * @apiExample Exemplo de requisição:
  414 + * curl -X DELETE http://<host>/templates-broker/service/templates/excluidos/admp-template-novo-usuario
  415 + *
  416 + * @apiSuccessExample {json} Success-Response:
  417 + * HTTP/1.1 200 OK
  418 + *
  419 + * @apiErrorExample {json} Error-Response:
  420 + * HTTP/1.1 500 Internal Server Error
  421 + * {
  422 + * "error":"Mensagem de erro."
  423 + * "code":"código do erro"
  424 + * }
  425 + */
  426 +
  427 + /**
  428 + * @api {get} /templates Listar templates excluídos
  429 + * @apiName listTemplatesExcluidos
  430 + * @apiGroup Template
  431 + * @apiVersion 1.0.0
  432 + * @apiPermission RO_ADMIN_TEMPLATE, RO_USUARIO_TEMPLATE
  433 + *
  434 + * @apiDescription Consulta os templates que foram excluídos.
  435 + *
  436 + * @apiParam (Query Parameters) {String} [filtro] Valor utilizado para filtrar os templates.
  437 + * @apiParam (Query Parameters) {String} [itens = 20] Quantidade de templates que serão exibidos
  438 + * @apiParam (Query Parameters) {String} [pag = 1] Número da página
  439 + *
  440 + * @apiExample Exemplo de requisição:
  441 + * curl -i http://<host>/templates-broker/service/templates
  442 + *
  443 + * @apiSuccess (Sucesso - 200) {List} resultado Lista com os templates encontrados.
  444 + * @apiSuccess (Sucesso - 200) {Template} resultado.template Objeto representando o template.
  445 + * @apiSuccess (Sucesso - 200) {String} resultado.template.corpo Corpo do template, conteúdo que as aplicações usarão para preencher e exibir os dados.
  446 + * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de cadastro do template.
  447 + * @apiSuccess (Sucesso - 200) {String} resultado.template.dataCadastro Data de exclusao do template.
  448 + * @apiSuccess (Sucesso - 200) {String} resultado.template.descricao Descrição do template.
  449 + * @apiSuccess (Sucesso - 200) {String} resultado.template.exemplo Exemplo de request para preenchimento do template.
  450 + * @apiSuccess (Sucesso - 200) {String} resultado.template.nome Identificador do template
  451 + * @apiSuccess (Sucesso - 200) {String} resultado.template.responsavel Analista responsável pelo template.
  452 + * @apiSuccess (Sucesso - 200) {Boolean} resultado.template.restrito Flag identificando se a atualização deste template é restrita.
  453 + *
  454 + * @apiSuccessExample {json} Success-Response:
  455 + * HTTP/1.1 200 OK
  456 + * {
  457 + * "corpo": "Prezado {{fulano}}, seu cadastro foi realizado com sucesso.",
  458 + * "dataCadastro": "2017-03-14T16:57:47.405-03:00",
  459 + * "descricao": "Template de confirmação de cadastro.",
  460 + * "exemplo": "{"fulano":"André Guimarães"}",
  461 + * "nome": "confirmacao-cadastro",
  462 + * "responsavel": "andre.guimaraes",
  463 + * "restrito": false,
  464 + * "dataExclusao":"2017-08-14T16:57:47.405-03:00"
  465 + * }
  466 + *
  467 + * @apiErrorExample {json} Error-Response:
  468 + * HTTP/1.1 500 Internal Server Error
  469 + * {
  470 + * "error":"Mensagem de erro."
  471 + * "code":"código do erro"
  472 + * }
  473 + */
src/main/resources/messages.properties
1 erro.colaborador.nao.encontrado = O usuário {0} não é um colaborador deste template. 1 erro.colaborador.nao.encontrado = O usuário {0} não é um colaborador deste template.
2 erro.interno = Ocorreu um erro interno no templates-broker, contacte os responsáveis. 2 erro.interno = Ocorreu um erro interno no templates-broker, contacte os responsáveis.
  3 +erro.servico.nao.implementado = Serviço não implementado.
3 erro.template.existente = Já existe um template identificado com o nome {0}. 4 erro.template.existente = Já existe um template identificado com o nome {0}.
4 erro.template.nao.encontrado = Template {0} não encontrado. 5 erro.template.nao.encontrado = Template {0} não encontrado.
5 erro.validar = Erro ao validar - 6 erro.validar = Erro ao validar -