diff --git a/bibliografia.bib b/bibliografia.bib index f07a9cf..87bbc60 100644 --- a/bibliografia.bib +++ b/bibliografia.bib @@ -330,6 +330,15 @@ @Misc{wiki:ReCAPTCHA urlaccessdate = {09 fev. 2017}, } +@Misc{wiki:CallToAction, + author = {Wikipedia}, + title = {{Call to action (marketing)} --- {W}ikipedia{,} the free encyclopedia}, + year = {2017}, + timestamp = {2017-05-10}, + url = {https://en.wikipedia.org/w/index.php?title=Call_to_action_(marketing)&oldid=775874414}, + urlaccessdate = {10 mai. 2017}, +} + @Misc{blog:bocoup, author = {Irene Ros}, title = {REST API Documentation Best Practices}, @@ -339,4 +348,16 @@ @Misc{blog:bocoup urlaccessdate = {09 mar. 2017}, } +@Article{modeloGestaoONG, + author = {Higor Correa Gimenes and Hamilton Pozo}, + title = {Modelo de Gestão Estratégica em uma ONG de Pequeno Porte como Fator de Sobrevivência: O caso da Hospitalhaços}, + journal = {Revista Ciências Sociais em Perspectiva}, + year = {2012}, + volume = {11}, + issn = {1981-4747}, + timestamp = {2017-05-09}, + url = {http://e-revista.unioeste.br/index.php/ccsaemperspectiva/article/view/7305}, + urlaccessdate = {09 mai. 2017}, +} + @Comment{jabref-meta: databaseType:bibtex;} diff --git a/capitulos/ajuda-ai.tex b/capitulos/ajuda-ai.tex index 8181a48..ba1e4ff 100644 --- a/capitulos/ajuda-ai.tex +++ b/capitulos/ajuda-ai.tex @@ -3,9 +3,9 @@ % ---------------------------------------------------------- \chapter{Ajuda.Ai} \label{cha:ajudaai} -O projeto Ajuda.Ai é um software de código-fonte aberto que visa ajudar instituições a arrecadar doações através da internet e aos usuários a doarem para instituições de forma simples, semelhante a adquirir um produto numa loja online, ter uma boa integração junto a plataformas de redes sociais e unir doadores e instituições. O projeto apresentado foi construído com uma interface para ser acessada pelo navegador através de uma aplicação web de página única (\emph{Single Page Application}), além de contar com uma API que dá suporte a outros tipos de interface, e no lado do servidor uma aplicação Java em um servidor de aplicação RedHat WildFly 10. +O projeto Ajuda.Ai é um software de código-fonte aberto que visa ajudar instituições a arrecadar doações através da internet e aos usuários a doarem para instituições de forma simples, semelhante a adquirir um produto numa loja online, ter uma boa integração junto a plataformas de redes sociais e unir doadores e instituições. O projeto apresentado foi construído com uma interface para ser acessada pelo navegador através de uma aplicação web de página única (\emph{Single Page Application}\footnote{Técnica onde uma única página base é carregada do servidor no acesso e após o carregamento apenas fragmentos da página serão carregados e/ou alterados do servidor.}), além de contar com uma API que dá suporte a outros tipos de interface, e no lado do servidor uma aplicação Java em um servidor de aplicação RedHat WildFly 10. -O código-fonte da ferramenta está disponível sob licença MIT no endereço \\ https://github.com/g0dkar/ajuda-ai e está publicada no endereço https://ajuda.ai. A API pode ser acessada através do \emph{endpoint} https://api.ajuda.ai/v1. Apesar da ferramenta estar pronta para uso, por hora nenhuma instituição real está sendo contemplada, mas duas instituições reais encontram-se cadastradas apenas para testes. Elas serão as primeiras a serem contactadas para iniciarem o uso do Ajuda.Ai. A divulgação da ferramenta será feita inicialmente através de contato direto com as Instituições e através de redes sociais. Futuramente, publicidades digitais podem ser uma opção viável para ajudar a trazer mais doadores e novas instituições ao Ajuda.Ai. +O código-fonte da ferramenta está disponível sob licença MIT no endereço \\ https://github.com/g0dkar/ajuda-ai e está publicada no endereço https://ajuda.ai. A API pode ser acessada através do \emph{endpoint}\footnote{Ponto de Acesso: Endereço base para quaisquer chamadas a uma API REST} https://api.ajuda.ai/v1. Apesar da ferramenta estar pronta para uso, por hora nenhuma instituição real está sendo contemplada, mas duas instituições reais encontram-se cadastradas apenas para testes. Elas serão as primeiras a serem contactadas para iniciarem o uso do Ajuda.Ai. A divulgação da ferramenta será feita inicialmente através de contato direto com as Instituições e através de redes sociais. Futuramente, publicidade digital pode ser uma opção viável para ajudar a trazer mais doadores e novas instituições ao Ajuda.Ai. @@ -13,10 +13,10 @@ \chapter{Ajuda.Ai} \label{cha:ajudaai} \section{Casos de Uso} \label{sec:ajudaai:casos} -O levantamento de requisitos foi feito através da análise do mercado de \emph{crowdfunding} nacional, do crescimento e popularização da prática dessa modalidade de investimento, tendencias internacionais em relação ao mercado de empreendimentos sociais e leitura e análise da literatura exposta no capítulo \ref{cha:fundamentacao}. Os casos de uso relevantes resultantes do levantamento de requisitos foram: +O levantamento de requisitos foi feito através da análise do mercado de \emph{crowdfunding} nacional, do crescimento e popularização da prática dessa modalidade de investimento, tendencias internacionais em relação ao mercado de empreendimentos sociais e leitura e análise da literatura exposta no Capítulo \ref{cha:fundamentacao}. Os casos de uso relevantes oriundos do levantamento de requisitos foram: \begin{lista} - \item \textbf{Caso de Uso 01 - Doação}: O usuário se identifica com o trabalho de uma determinada instituição e quer fazer uma doação a mesma através da Internet; + \item \textbf{Caso de Uso 01 - Doação}: O usuário se identifica com o trabalho de uma determinada instituição e quer fazer uma doação à mesma através da Internet; \item \textbf{Caso de Uso 02 - Comunicação com o Doador}: As instituições precisam de um canal para se comunicarem aos seus doadores e potenciais doadores; \item \textbf{Caso de Uso 03 - Acompanhamento das Doações}: É importante para a Instituição ter uma maneira de acompanhar a arrecadação de sua campanha e ter informações sobre quanto foi arrecadado e quando o dinheiro estará disponível; %\item \textbf{Caso de Uso 04 - Descobrimento de Instituições}: É importante para a Instituição ter uma maneira de acompanhar a arrecadação de sua campanha e ter informações sobre quanto foi arrecadado e quando o dinheiro estará disponível; @@ -27,7 +27,7 @@ \section{Casos de Uso} \label{sec:ajudaai:casos} \begin{figure}[H] \caption{\label{fig:uml_caso_uso}Diagrama UML de Casos de Uso do Ajuda.Ai} \centering - \includegraphics[scale=0.4]{imagens/uml-casos-de-uso-02.pdf} + \includegraphics[scale=0.5]{imagens/uml-casos-de-uso-03.pdf} \legend{Fonte: Elaborado pelo Autor} \end{figure} @@ -41,11 +41,11 @@ \section{Características da Implementação} \label{sec:ajudaai:caracteristicas O sistema utiliza a plataforma Java em sua versão 8. Para facilitar a configuração da aplicação e gestão de dependências se utilizou a ferramenta Apache Maven\footnote{https://maven.apache.org}, que provê um fácil acesso a uma grande quantidade de ferramentas e bibliotecas. Além da resolução de dependências, o Apache Maven facilita o processo de construção e montagem da aplicação, automatiza a produção da documentação da aplicação apartir do JavaDoc\footnote{Padrão de documentação Java que utiliza comentários com formatação para documentar a aplicação} e é considerado uma ferramenta padrão da indústria. -Como arcabouço para desenvolvimento de aplicação web se utilizou o Caelum VRaptor. O VRaptor é um arcabouço brasileiro MVC de código fonte aberto que traz alta produtividade para um desenvolvimento Java Web rápido e fácil com CDI\footnote{Retirado de http://www.vraptor.org/pt/ em 17/02/2017}. Dentre as funcionalidades mais interessantes do VRaptor estão a integração completa e simples com o arcabouço JBoss Weld, implementação de referência da especificação JSR 365\footnote{Especificação Java para um sistema de Injeção de Dependências usando o Padrão de Projeto Inversão de Controle} e arcabouço utilizado pelo RedHat Wildfly 10, e o uso do estilo convenção sob configuração onde se promove que, seguindo convenções bem definidas, não é necessário arquivos de configuração. +Como arcabouço para desenvolvimento de aplicação web se utilizou o Caelum VRaptor. O VRaptor é um arcabouço brasileiro MVC de código fonte aberto que traz alta produtividade para um desenvolvimento Java Web rápido e fácil\footnote{Retirado de http://www.vraptor.org/pt/ em 17/02/2017}. Dentre as funcionalidades mais interessantes do VRaptor estão a integração completa e simples com a biblioteca JBoss Weld, implementação de referência da especificação JSR 365\footnote{Especificação Java para um sistema de Injeção de Dependências (CDI) usando o Padrão de Projeto Inversão de Controle} e biblioteca utilizada pelo RedHat Wildfly 10, e o uso do estilo convenção sob configuração onde se promove que, seguindo convenções bem definidas, não é necessário arquivos de configuração. -Para persistência de dados foi utilizado o arcabouço JBoss Hibernate ORM. Como um arcabouço de mapeamento objeto-relacional o Hibernate ORM faz a persistência de dados em banco de dados relacionais via JDBC\footnote{Retirado de http://hibernate.org/orm/ em 17/02/2017}. Como solução para banco de dados foi utilizado o SGBD MariaDB, banco de dados de código aberto que surgiu a partir do MySQL quando o mesmo foi comprado pela Oracle em 2003. Ele é mantido pelos desenvolvedores originais do MySQL e eles garantem que sempre será um projeto de código aberto. usuários notáveis incluem Wikipedia, WordPress.com e Google\footnote{Retirado de https://mariadb.org/about/ em 17/02/2017}. +Para persistência de dados foi utilizado o arcabouço JBoss Hibernate ORM. Como um arcabouço de mapeamento objeto-relacional, o Hibernate ORM faz a persistência de dados em banco de dados relacionais via JDBC\footnote{Retirado de http://hibernate.org/orm/ em 17/02/2017}. Como solução para banco de dados foi utilizado o SGBD MariaDB, banco de dados de código aberto que surgiu a partir do MySQL quando o mesmo foi comprado pela Oracle em 2003. Ele é mantido pelos desenvolvedores originais do MySQL e eles garantem que sempre será um projeto de código aberto. Usuários relevantes incluem Wikipedia, WordPress.com e Google\footnote{Retirado de https://mariadb.org/about/ em 17/02/2017}. -Por fim, senhas são criptografadas no banco de dados se utilizando do algoritmo BCrypt. O BCrypt é uma função de \emph{hashing} de senhas projetada em 1999 por Niels Provos e David Mazières baseada na cifra \emph{Blowfish} que também incorporara um \emph{salt}\footnote{Bytes gerados de forma aleatória} para proteger as senhas contra ataques de tabelas arco-íris\footnote{\emph{Rainbow Table Attack}: Ataque que consiste em gerar um gigantesco banco de dados de \emph{hashes} pré-processados onde é possível se buscar pelo texto simples de um determinado \emph{hash} de um determinado algoritmo}. Nesse contexto, a maior vantagem do BCrypt é que esta é uma função cuja a quantidade de iterações pode ser configurada e assim, com o tempo, pode ser aumentada para torná-la mais lenta e resistente a ataques de força-bruta \cite{wiki:Bcrypt}. +Por fim, senhas são criptografadas no banco de dados se utilizando do algoritmo BCrypt. O BCrypt é uma função de \emph{hashing} de senhas projetada em 1999 por Niels Provos e David Mazières baseada na cifra \emph{Blowfish} que também incorpora um \emph{salt}\footnote{Bytes gerados de forma aleatória} para proteger as senhas contra ataques de tabelas arco-íris\footnote{\emph{Rainbow Table Attack}: Ataque que consiste em gerar um gigantesco banco de dados de \emph{hashes} pré-processados onde é possível se buscar pelo texto simples de um determinado \emph{hash} de um determinado algoritmo}. Nesse contexto, a maior vantagem do BCrypt é que esta é uma função cuja a quantidade de iterações pode ser configurada e assim, com o tempo, pode ser aumentada para torná-la mais lenta e resistente a ataques de força-bruta \cite{wiki:Bcrypt}. @@ -54,7 +54,7 @@ \section{Características da Implementação} \label{sec:ajudaai:caracteristicas \section{Apresentação da Aplicação} \label{sec:ajudaai:apresentacao} %\textbf{\textit{Aqui será apresentado screenshots e essas coisas. Ainda não sei exatamente de que maneira ou que texto escrever para apresentar as figuras. Talvez um run-down do processo de doação?}} -Nesta seção será apresentada de forma ilustrada a solução desenvolvida neste trabalho. Parte do projeto visual, cores e detalhes estéticos são de autoria de Cândido Sales Gomes. A Figura \ref{fig:ss_ajudaai_01} apresenta a página inicial do projeto Ajuda.Ai. Nela temos um painel rotativo informativo com âncoras para páginas informativas sobre o projeto, uma lista mesclada entre instituições mais recentemente cadastradas no projeto e outras escolhidas aleatoriamente e uma seção com um pequeno mapa de âncoras para todas as páginas informativas do projeto. +Nesta seção será apresentada de forma ilustrada a solução desenvolvida neste trabalho. Parte do projeto visual, cores e detalhes estéticos são de autoria de Cândido Sales Gomes. A Figura \ref{fig:ss_ajudaai_01} apresenta a página inicial do projeto Ajuda.Ai. Nela temos um painel rotativo informativo com âncoras para páginas informativas sobre o projeto, uma lista mesclada contendo instituições mais recentemente cadastradas no projeto e outras escolhidas aleatoriamente e uma seção com um pequeno mapa de âncoras para todas as páginas informativas do projeto. \begin{figure}[H] \caption{\label{fig:ss_ajudaai_01}Captura de Tela da Página Inicial do Projeto Ajuda.Ai} @@ -63,9 +63,9 @@ \section{Apresentação da Aplicação} \label{sec:ajudaai:apresentacao} \legend{Fonte: Elaborado pelo Autor} \end{figure} -A estrutura das páginas segue em grande parte a mesma estrutura visual na Figura \ref{fig:ss_ajudaai_01}: uma barra de navegação de posicionamento fixo no topo da tela, um painel com uma grande figura e uma frase de cabeçalho, o conteúdo da página atual e o rodapé. +A estrutura das páginas segue em grande parte a mesma estrutura visual da Figura \ref{fig:ss_ajudaai_01}: uma barra de navegação de posicionamento fixo no topo da tela, um painel com uma grande figura e uma frase de cabeçalho, o conteúdo da página atual e o rodapé. -Na Figura \ref{fig:ss_ajudaai_02} é apresentada uma página interna, especificamente a página ``Sobre'', que fala em linhas gerais sobre o projeto. Esse mesmo modelo é utilizado para todas as páginas internas, representadas pela entidade \codigo{Page}, apresentada na seção \ref{sec:ajudaai:organizacao}. +Na Figura \ref{fig:ss_ajudaai_02} é apresentada uma página interna, especificamente a página ``Sobre'', que fala em linhas gerais sobre o projeto. Esse mesmo modelo é utilizado para todas as páginas internas, representadas pela entidade \codigo{Page}, apresentada na Seção \ref{sec:ajudaai:organizacao}. \begin{figure}[H] \caption{\label{fig:ss_ajudaai_02}Captura de Tela da Página Sobre do Projeto Ajuda.Ai} @@ -74,7 +74,7 @@ \section{Apresentação da Aplicação} \label{sec:ajudaai:apresentacao} \legend{Fonte: Elaborado pelo Autor} \end{figure} -A seguir, na Figura \ref{fig:ss_ajudaai_03} é apresentada uma página de Instituição. Elementos visuais como a imagem do painel e logomarca da instituição são personalizáveis através de configurações da interface de administração. Além disso, é apresentada ao navegante uma contagem atualizada de quantas doações a instituição recebeu e o valor total das doações. O projeto visual do Ajuda.Ai se utiliza uma técnica de comunicação chamada \emph{Call-To-Action} onde elementos que invocam ações, como botões, têm seu texto escrito de forma imperativa a fim de incentivar quem o lê a tomar a ação. É possível observar um uso da técnica no botão ``Quero Ajudar'' na Figura \ref{fig:ss_ajudaai_03}, o qual leva o usuário a página onde é possível se fazer uma doação. +A seguir, na Figura \ref{fig:ss_ajudaai_03} é apresentada uma página de Instituição. Elementos visuais como a imagem do painel e logomarca da instituição são personalizáveis através de configurações da interface de administração. Além disso, é apresentada ao usuário uma contagem atualizada de quantas doações a instituição recebeu e o valor total das doações. O projeto visual do Ajuda.Ai se utiliza de uma técnica de comunicação chamada \emph{Call-To-Action}\cite{wiki:CallToAction} onde elementos que invocam ações, como botões, têm seu texto escrito de forma imperativa a fim de incentivar quem o lê a tomar a ação. É possível observar um uso da técnica no botão ``Quero Ajudar'' na Figura \ref{fig:ss_ajudaai_03}, o qual leva o usuário à página onde é possível se fazer uma doação. \begin{figure}[H] \caption{\label{fig:ss_ajudaai_03}Captura de Tela da Página da Instituição AMA do Projeto Ajuda.Ai} @@ -83,9 +83,9 @@ \section{Apresentação da Aplicação} \label{sec:ajudaai:apresentacao} \legend{Fonte: Elaborado pelo Autor} \end{figure} -Ao clicar no botão ``Quero Ajudar'' ou na aba ``Fazer uma Doação'', o usuário é levado a página de doação, cujo conteúdo é exibido na Figura \ref{fig:ss_ajudaai_04}. Como forma de incentivo a doações maiores, uma singela forma de \emph{gamefication}\footnote{Técnica onde se introduz elementos de jogos a fim de otimizar a execução de certas ações} foi utilizada na forma de uma barra de progresso com marcadores que é preenchida de acordo com o valor da doação, inicialmente em R\$ 20,00. É dada a opção de anonimato através da proibição da exibição do nome do doador. O nome e e-mail serão gravados para a emissão da ordem de pagamento junto ao \emph{Gateway}, mas se a publicação for proibida o nome não será exibido em lugar algum, nem mesmo para a instituição que recebeu a doação. +Ao clicar no botão ``Quero Ajudar'' ou na aba ``Fazer uma Doação'', a página da Figura \ref{fig:ss_ajudaai_04} é exibida. Como forma de incentivo a doações maiores, uma singela forma de \emph{gamefication}\footnote{Técnica onde se introduz elementos de jogos a fim de otimizar a execução de certas ações} foi utilizada na forma de uma barra de progresso com marcadores que é preenchida de acordo com o valor da doação, inicialmente em R\$ 20,00. É dada a opção de anonimato através da proibição da exibição do nome do doador. O nome e e-mail serão gravados para a emissão da ordem de pagamento junto ao \emph{Gateway}, mas se a publicação for proibida o nome não será exibido em lugar algum, nem mesmo para a instituição que recebeu a doação. -Por segurança, a página também inclui um teste CAPTCHA do serviço Google reCAPTCHA. O serviço reCAPTCHA é um sistema de caixa de diálogo para usuário baseado na interface do CAPTCHA, que pede para usuários digitarem palavras distorcidas exibidas na tela, para ajudar a digitalizar o texto de livros, enquanto protege \emph{sites} de robôs tentando acessar áreas restritas. O serviço fornece, para os \emph{sites} inscritos, imagens de palavras que o software de reconhecimento ótico de caracteres (OCR) não foi capaz de identificar as quais são apresentadas para humanos decifrarem como palavras CAPTCHAs, como parte do seu procedimento normal de validação. Depois eles retornam os resultados para o serviço reCAPTCHA, que envia esses resultados para a digitalização de seus projetos \cite{wiki:ReCAPTCHA}. +Por segurança, a página também inclui um teste CAPTCHA do serviço Google reCAPTCHA. O serviço reCAPTCHA é um sistema de caixa de diálogo para usuário baseado na interface do CAPTCHA, que pode pedir aos usuários para resolver problemas considerados simples para seres humanos, mas complexo para máquinas. Problemas como digitar palavras distorcidas exibidas na tela ou identificar objetos em um conjunto de imagens são alguns dos utilizados. É interessante notar que, através desses desafios, o Google utiliza \emph{Crowdsourcing} para treinar suas inteligências artificiais. Esta tecnologia ajuda a proteger \emph{sites} de robôs tentando acessar áreas restritas ou tomar ações que deveriam ser tomadas por humanos\cite{wiki:ReCAPTCHA}. \begin{figure}[H] \caption{\label{fig:ss_ajudaai_04}Captura de Tela do Formulário de Doação} @@ -152,7 +152,7 @@ \section{Organização do Projeto} \label{sec:ajudaai:organizacao} \item \textbf{model}: Contém o modelo de dados do Ajuda.Ai, apresentado na Figura \ref{fig:uml_model}; \item \textbf{persistence-sql}: Provê classes que implementam a persistência do projeto model em um banco de dados SQL através do JBoss Hibernate; \item \textbf{backend}: Servidor de Back-end do Ajuda.Ai. Aplica as regras de negócio, organiza pagamentos e atende requisições dos usuários; - \item \textbf{frontend}: Aplicação de Página Única do Front-end do Ajuda.Ai. Uma interface web simples e agradável para utilização do sistema; + \item \textbf{frontend}: Aplicação de Página Única do Front-end do Ajuda.Ai; \item \textbf{payment-api}: Projeto pai para as implementações de pagamentos dos diferentes \emph{Gateways} de pagamento; \item \textbf{payment-impl-moip}: Implementação de payment-api para o \emph{gateway} MoIP; \item \textbf{payment-impl-pagseguro}: Implementação de payment-api para o \emph{gateway} PagSeguro; @@ -195,7 +195,7 @@ \section{Organização do Projeto} \label{sec:ajudaai:organizacao} }{} \end{umlpackage} - \begin{umlpackage}[x=-1.5, y=-15]{ajuda{.}ai{.}model{.}billing} + \begin{umlpackage}[x=-1.5, y=-15.15]{ajuda{.}ai{.}model{.}billing} \umlclass[x=0, y=0]{Payment}{ - id : Long \\ - uuid : String \\ @@ -245,7 +245,7 @@ \section{Organização do Projeto} \label{sec:ajudaai:organizacao} }{} \end{umlpackage} - \begin{umlpackage}[x=-2.1, y=-6.5]{ajuda{.}ai{.}model{.}institution} + \begin{umlpackage}[x=-2.1, y=-6.45]{ajuda{.}ai{.}model{.}institution} \umlclass[x=0, y=0]{Institution}{ - id : Long \\ - slug : String \\ @@ -266,12 +266,12 @@ \section{Organização do Projeto} \label{sec:ajudaai:organizacao} \umlinherit[very thick]{InstitutionPost}{Page} - \umlcompo[very thick]{CreationInfo}{User} - \umlcompo[anchor1=65, very thick]{Payment}{Institution} - \umlcompo[mult1=1, arg2=*, very thick]{Payment}{PaymentEvent} - \umluniassoc[anchor1=58, anchor2=-120, very thick]{Payment}{CreationInfo} - \umluniassoc[very thick]{Institution}{CreationInfo} - \umluniassoc[very thick]{Page}{CreationInfo} + \umlcompo[arg1=*, arg2=1, very thick]{CreationInfo}{User} + \umlcompo[mult1=*, arg2=1, anchor1=65, very thick]{Payment}{Institution} + \umlcompo[arg1=1, arg2=*, very thick]{Payment}{PaymentEvent} + \umluniassoc[arg1=1, arg2=1, anchor1=58, anchor2=-120, very thick]{Payment}{CreationInfo} + \umluniassoc[arg1=1, arg2=1, very thick]{Institution}{CreationInfo} + \umluniassoc[arg1=1, arg2=1, very thick]{Page}{CreationInfo} \end{tikzpicture} \legend{Fonte: Elaborado pelo Autor} \end{figure} @@ -393,710 +393,14 @@ \subsection{Processo Comum de Pagamentos Online} \label{sec:ajudaai:processo_pag \section{API REST Web} \label{sec:ajudaai:api} -%Você pode falar sobre a necessidade de se documentar a API, de forma a dirimir dúvidas de implementações que consumirem os serviços. Pode falar que não existe um padrão, mas que neste trabalho você usou o formato x, y, z e através dele é possível ter uma microvisão da coisa toda. - Para facilitar o desenvolvimento de diferentes interfaces com o usuário e demais consumidores da API e prevenir dúvidas quanto a mesma e seu funcionamento a API REST Web do \emph{backend} do projeto Ajuda.Ai foi documentada. Esses são os métodos da API que estão disponíveis para todos os clientes, porém alguns necessitam de login. Os métodos que não necessitam de login são classificados como métodos públicos. -Apesar da importância de uma boa documentação ainda não há um padrão estabelecido para a forma de documentar APIs REST Web. Por esse motivo este trabalho se utiliza do formato proposto por Irene Ros\cite{blog:bocoup}, diretora da Bocoup, empresa de consultoria referência em desenvolvimento REST Web e produtora de diversas ferramentas de código fonte aberto para se trabalhar com REST Web e \emph{Front-end}. A seguir está a API REST Web disponibilizada pelo Ajuda.Ai. Todos os parâmetros são obrigatórios, a menos que especificado que seja opcional. Parâmetros que fazem parte da própria URL são indicados com um sinal de dois-pontos no início de seu nome: - -\begin{caixa}{Autenticação do Usuário}{} - -Retorna informações sobre o usuário logado. Usado para, além de pegar informações sobre o usuário logado, manter a Sessão de autenticação ativa. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/auth/login} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{POST} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item \codigo{username=String} Nome de usuário ou E-mail do Usuário que quer se autenticar - \item \codigo{password=String} Senha do Usuário - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON de um objeto \codigo{User} apenas com os campos \codigo{id}, \codigo{username}, \codigo{email}, \codigo{firstname} e \codigo{lastname} do Usuário logado. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} \codigo{Array} com os erros de autenticação \\ \textbf{Motivo:} Usuário ou senha incorretos. - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Dados do Usuário Logado}{} - -Retorna informações sobre o usuário logado. Usado para, além de pegar informações sobre o usuário logado, manter a Sessão de autenticação ativa. A sessão de autenticação dura por 30 minutos após a última requisição a API. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/profile/me} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{User} do usuário logado, apenas com os campos \codigo{id}, \codigo{username}, \codigo{email}, \codigo{firstname} e \codigo{lastname}. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Dados de um Usuário}{} - -Retorna informações sobre o usuário especificado a partir de seu nome de usuário. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/profile/:username} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item \codigo{username=String} - \textbf{(opcional se \codigo{id} for especificado)} Nome único de usuário - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item \codigo{id=Integer} - Identificador do usuário - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{User} do usuário encontrado, apenas com os campos \codigo{id}, \codigo{username}, \codigo{firstname} e \codigo{lastname}. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Usuário não existe - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Dados de uma Instituição}{} - -Retorna todos os dados de uma Instituição. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/:slug} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item \codigo{slug=String} - Nome da URL da Instituição - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com os dados da Instituição - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Dados de uma Instituição escolhida Aleatoriamente}{} - -Retorna todos os dados de uma Instituição escolhida aleatoriamente. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/random} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com os dados de uma Instituição - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há nenhuma instituição cadastrada no banco de dados - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Lista de Instituições escolhidas Aleatoriamente}{} - -Retorna uma lista de até 12 Instituições escolhidas aleatoriamente. Útil para exibir Instituições na Página Inicial. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/random-list} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com um \codigo{Array} com dados de Instituições escolhidas aleatoriamente. Máximo de 12 instituições. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há nenhuma instituição cadastrada no banco de dados - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Estatísticas de Doações}{} - -Retorna quantas doações a Instituição recebeu e o valor total das mesmas. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/:slug/donation-stats} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item \codigo{slug=String} - Nome da URL da Instituição - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \\ \codigo{\{ count: Integer, value: Integer \}} - O valor deve ser dividido por 100 para ser exibido adequadamente. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Doação - Passo 01: Registrar o Pagamento}{} - -Inicia o processo de doação gravando os dados da mesma no Ajuda.Ai. Posteriormente o usuário deverá ser redirecionando para o \emph{gateway} de pagamento vinculado a Instituição através do método \codigo{/pagar/:id}. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/:slug/doar} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{POST} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item \codigo{slug=String} - Nome da URL da Instituição - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item \codigo{value=Integer} - Valor da Doação como um Inteiro (10000 = \$100,00) - \item \codigo{name=String} - \textbf{(opcional se feito o login)} Nome Completo do Doador - \item \codigo{email=String} - \textbf{(opcional se feito o login)} E-mail do Doador - %\item \codigo{anonymous=Boolean} - Doação anônima? - \item \codigo{addcosts=Boolean} - Adicionar custos operacionais do Gateway ao valor da doação? - \item \codigo{addcoststype=Integer} - Tipo de pagamento que será utilizado (para cálculo do custo operacional) - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} Objeto \codigo{Payment} com os dados do pagamento criado - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Doação - Passo 02: Redirecionamento ao \emph{Gateway}}{} - -Continua o processo de doação redirecionando o usuário para o \emph{gateway} de pagamento vinculado ao \codigo{Payment} especificado. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/pagar/:id} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item \codigo{id=UUID} - Identificador do pagamento (UUID) - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{302 MOVED TEMPORARILY} \\ \textbf{Conteúdo:} Nenhum - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Pagamento não existe - \item \textbf{Código:} \codigo{409 CONFLICT} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Notificações do \emph{Gateway} informam que este pagamento já está ou já foi processado. - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{\emph{Posts} de uma Instituição}{} - -Retorna uma lista de tamanho limitado com os \emph{posts} de uma Instituição. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/:slug/posts} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item GET - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item \codigo{slug=String} - Nome de URL da Instituição - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item \codigo{size=Integer} - \textbf{(opcional)} Quantidade de Itens na lista. Padrão: \codigo{10}. Máximo: \codigo{50}. - \item \codigo{offset=Integer} - \textbf{(opcional)} Primeiro item da lista. Padrão: \codigo{0}. - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \\ \codigo{\{ size: Integer, total: Integer, offset: Integer, items: [InstitutionPost] \}} \\ - Nota: os \emph{posts} terão apenas os campos id, slug, titulo, subtitulo, criador e data e hora de criação. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Post Único de uma Instituição}{} - -Retorna um único \emph{post} de uma Instituição. - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/:slug/:post-slug} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item \codigo{slug=String} - Nome da URL da Instituição - \item \codigo{post-slug=String} - Nome da URL específico do \emph{post} da Instituição - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com os dados do \emph{post} da Instituição - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição ou \emph{Post} não existem - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Dados sobre Doações do Usuário Logado}{} - -Retorna algumas informações sobre as doações feitas pelo usuário logado. - -\textbf{* Este método requer quer o usuário tenha feito login.} - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/profile/dashboard-data} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \codigo{\{ donations: Integer, institutions: Integer, value: Integer, meanValue: Integer, posts: [InstitutionPost], payments: [Payment] \}} - \item \textbf{Descrição dos campos:} - \begin{itemize} - \item \codigo{donations}: Quantidade de doações feitas pelo usuário; - \item \codigo{institutions}: Quantidade de instituições únicas contempladas pelas doações; - \item \codigo{value}: Somatório dos valores das doações; - \item \codigo{meanValue}: Média dos valores das doações; - \item \codigo{posts}: Entre 0 e 10 dos \emph{posts} mais recentes das instituições contempladas pelas doações (``Últimas Notícias''); - \item \codigo{payments}: Entre 0 e 10 das últimas doações feitas pelo usuário. - \end{itemize} - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Alterar Informações do usuário Logado}{} - -Altera informações do usuário logado como nome, e-mail, senha, etc. - -\textbf{* Este método requer quer o usuário tenha feito login.} - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/profile/save} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{POST} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{User} que foi alterado, apenas com os campos \codigo{id}, \codigo{username}, \codigo{email}, \codigo{firstname}, \codigo{lastname}. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Dados sobre as Instituições pertencentes ao Usuário}{} - -Retorna algumas informações sobre as doações feitas a todas as Instituições pertencentes ao usuário logado. - -\textbf{* Este método requer quer o usuário tenha feito login.} - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/dashboard-data} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{GET} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \codigo{\{ donations: Integer, value: Integer, helpers: Integer, maxValue: Integer, meanValue: Integer, institutionCount: Integer, institutions: [Institution] \}} - \item \textbf{Descrição dos campos:} - \begin{itemize} - \item \codigo{donations}: Quantidade de doações feitas às Instituições; - \item \codigo{value}: Somatório dos valores das doações; - \item \codigo{helpers}: Quantidade de usuários únicos que fizeram doações às Instituições; - \item \codigo{maxValue}: Maior valor doado; - \item \codigo{meanValue}: Média dos valores das doações; - \item \codigo{institutionCount}: Quantas Instituições pertencem ao usuário; - \item \codigo{institutions}: Entre 0 e 50 Instituições pertencentes ao usuário. - \end{itemize} - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado - \end{itemize} - -\end{itemize} -\end{caixa} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\begin{caixa}{Altera dados de uma Instituição pertencente ao Usuário}{} - -Altera informações sobre uma Instituição pertencente ao Usuário. - -\textbf{* Este método requer quer o usuário tenha feito login.} - -\begin{itemize} -\item \textbf{URL} - \begin{itemize} - \item \codigo{/institution/save} - \end{itemize} - -\item \textbf{Método} - \begin{itemize} - \item \codigo{POST} - \end{itemize} - -\item \textbf{Parâmetros} - \begin{itemize} - \item Nenhum Parâmetro - \end{itemize} - -\item \textbf{Parâmetros de Dados} - \begin{itemize} - \item JSON de um objeto \codigo{Institution} - \end{itemize} - -\item \textbf{Resposta de Sucesso} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{Institution} após ser alterado na persistência de dados. - \end{itemize} - -\item \textbf{Resposta de Erro} - \begin{itemize} - \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} \codigo{Array} com erros de validação \\ \textbf{Motivo:} Um ou mais campos falhou na validação de dados. - \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado - \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. - \end{itemize} - -\end{itemize} -\end{caixa} - - +Apesar da importância de uma boa documentação ainda não há um padrão estabelecido para a forma de documentar APIs REST Web. Por esse motivo este trabalho se utiliza do formato proposto por Irene Ros\cite{blog:bocoup}, diretora da Bocoup, empresa de consultoria referência em desenvolvimento REST Web e produtora de diversas ferramentas de código fonte aberto para se trabalhar com REST Web e \emph{Front-end}. No anexo \ref{anexo:a}, encontra-se documentada a API REST Web disponibilizada pelo Ajuda.Ai. -\pagebreak \section*{Resumo} \label{sec:ajudaai:resumo} Neste capítulo foi apresentada a solução Ajuda.Ai para \emph{crowdfunding} social, seu funcionamento, tecnologias utilizadas e arquitetura do sistema. Ao final, a API REST Web foi documentada. diff --git a/capitulos/conclusao.tex b/capitulos/conclusao.tex index 9044e23..4a2d82d 100644 --- a/capitulos/conclusao.tex +++ b/capitulos/conclusao.tex @@ -5,7 +5,7 @@ \chapter{Conclusão} Este trabalho apresentou a ferramenta Ajuda.Ai, uma ferramenta para captação de recursos em modalidade \emph{Crowdfunding} para ONGs e Instituições sem fins lucrativos. Para isso, foi feito um estudo sobre o fenômeno do \emph{crowdsourcing} na era digital e do \emph{crowdfunding} que utiliza de \emph{crowdsourcing} para arrecadar recursos financeiros. Além disso, o sistema desenvolvido para atender essa necessidade foi desenvolvido com boas práticas da indústria, utilizando técnicas e ferramentas de ponta como REST Web e CDI. -Considera-se que a solução alcança seu objetivo de ser uma alternativa de baixo custo, de fácil uso e flexível por se utilizar de uma arquitetura moderna que permite interfaces mais elaboradas e consequentemente adequadas aos usuários do serviço. A interface padrão disponibilizada junto ao projeto, uma página web no modelo SPA, tem estética agradável e tenta, através da aplicação de técnicas de publicidade, melhorar a performance das doações às instituições. Sua arquitetura permite que instituições criem, por exemplo, aplicativos para dispositivos móveis que utilizam o Ajuda.Ai como suporte para funcionamento da arrecadação de doações. +Considera-se que a solução alcança seu objetivo de ser uma alternativa de baixo custo, de fácil uso e flexível por se utilizar de uma arquitetura moderna que permite interfaces mais elaboradas e consequentemente adequadas aos usuários do serviço. A interface padrão disponibilizada junto ao projeto, uma página web no modelo SPA, implementa acesso às funcionalidades da API e tenta, através da aplicação de técnicas de \emph{Call-to-Action}, melhorar a performance das doações às instituições. Sua arquitetura permite que instituições criem, por exemplo, aplicativos para dispositivos móveis que utilizam o Ajuda.Ai como suporte para funcionamento da arrecadação de doações. Por fim, o trabalho também contribui com a propagação do conhecimento em modelagem, utilização de ferramentas avançadas e boas práticas para implementação do suporte a diferentes \emph{Gateways} de pagamento, além de apresentar uma arquitetura moderna e adequada a grande variedade de meios de acesso a páginas web disponíveis. diff --git a/capitulos/fundamentacao-teorica.tex b/capitulos/fundamentacao-teorica.tex index a3f9cb9..e6b6280 100644 --- a/capitulos/fundamentacao-teorica.tex +++ b/capitulos/fundamentacao-teorica.tex @@ -3,16 +3,18 @@ % ---------------------------------------------------------- \chapter{Fundamentação Teórica} \label{cha:fundamentacao} +Para melhor compreender as decisões de projeto tomadas durante o desenvolvimento da solução proposta por este trabalho é necessário entender alguns conceitos teóricos relacionados a \emph{Crowdsourcing} e \emph{Crowdfunding}. + \section{\emph{Crowdsourcing}} \label{sec:fundamentacao:crowdsourcing} % Definição -Antes de se falar de \emph{Crowdfunding} é importante conhecer o movimento o qual originou. \emph{Crowdsourcing} foi definido por \citeauthor{wired-crowdsource} em \citeyear{wired-crowdsource} como o ato de uma companhia ou instituição pegar uma função desempenhada por seus funcionários e terceirizá-la para uma rede anônima, geralmente bastante grande, de pessoas na forma de uma chamada aberta. Isso pode tomar a forma de um sistema cooperativo, onde o trabalho é feito de forma colaborativa, mas também frequentemente o trabalho é executado por indivíduos. O pré-requisito crucial é o uso de um formato de chamada aberta e a grande rede de potenciais trabalhadores para atendê-lo. +Antes de se falar de \emph{Crowdfunding} é importante conhecer o movimento o qual o originou. \emph{Crowdsourcing} foi definido por \citeauthor{wired-crowdsource} em \citeyear{wired-crowdsource} como o ato de uma companhia ou instituição pegar uma função desempenhada por seus funcionários e terceirizá-la para uma rede anônima, geralmente bastante grande, de pessoas na forma de uma chamada aberta. Isso pode tomar a forma de um sistema cooperativo, onde o trabalho é feito de forma colaborativa, mas também frequentemente o trabalho é executado por indivíduos. O pré-requisito crucial é o uso de um formato de chamada aberta e a grande rede de potenciais trabalhadores para atendê-lo. % Exemplos Essa modalidade de terceirização não é recente. Por exemplo, em 1714, o Governo Britânico conduziu um concurso chamado Prêmio Longitude\cite{wiki-longitude_rewards}, que daria como recompensa 10 a 20 mil libras, dependendo da qualidade da solução, para quem resolvesse um dos maiores problemas da época: como determinar a longitude de uma embarcação em alto-mar. Um segundo exemplo notável é o de \citeauthor{hearn2002tracks} que conta como Matthew Fontaine Maury, em 1848, distribuiu de forma gratuita 5000 cópias de seu catálogo de correntes marítimas e eólicas pedindo em troca que os marinheiros fizessem e entregassem seus diários de bordo ao retornar de suas jornadas. -Além desses projetos e, mais recentemente, com avanços nas técnicas de desenvolvimento de software, computação distribuída, processamento de dados e a popularização da Internet a partir da década de 1990 projetos como o GIMPS\footnote{\emph{Great Internet Mersenne Prime Search}, Projeto para buscar Primos de Mersenne - http://www.mersenne.org}, lançado em 1996, e o SETI@Home\footnote{Análise de ondas de rádio cósmicas em busca de vida extra terrestre - https://setiathome.berkeley.edu}, lançado em 1999. Esses projetos começaram a utilizar do poder de processamento latente nos computadores pessoais de inúmeros voluntários ao redor do planeta para executarem tarefas massivas que, sem isso, necessitariam de supercomputadores e bastante investimento. +Além desses projetos e, mais recentemente, com avanços nas técnicas de desenvolvimento de software, computação distribuída, processamento de dados e a popularização da Internet a partir da década de 1990 projetos como o GIMPS\footnote{\emph{Great Internet Mersenne Prime Search}, Projeto para buscar Primos de Mersenne - http://www.mersenne.org}, lançado em 1996, e o SETI@Home\footnote{Análise de ondas de rádio cósmicas em busca de vida extra terrestre - https://setiathome.berkeley.edu}, lançado em 1999. Esses projetos começaram a utilizar poder de processamento latente nos computadores pessoais de inúmeros voluntários ao redor do planeta para executarem tarefas massivas que, sem isso, necessitariam de supercomputadores e bastante investimento. Através de projetos como esses o conceito de \emph{Crowdsourcing} na era digital foi apresentado e validado, dado que ambos projetos apresentados ainda estão em pleno funcionamento. -Naturalmente esse aspecto da coletivização da ajuda evoluiu para além da realização de tarefas, grandes ou pequenas, e surgiram novas modalidades de \emph{Crowdsourcing}. Dentre elas, a mais prominente e que mais cresce no mundo é o \emph{Crowdfunding}, onde a tarefa em questão é a arrecadação de financiamento para um determinado fim, como descrito a seguir. +Com o tempo, esse aspecto da coletivização da ajuda evoluiu para além da realização de tarefas, grandes ou pequenas, e surgiram novas modalidades de \emph{Crowdsourcing}. Dentre elas, a mais prominente e que mais cresce no mundo é o \emph{Crowdfunding}, onde a tarefa em questão é a arrecadação de financiamento para um determinado fim, como descrito a seguir. diff --git a/capitulos/introducao.tex b/capitulos/introducao.tex index 601eebb..8a41586 100644 --- a/capitulos/introducao.tex +++ b/capitulos/introducao.tex @@ -3,47 +3,49 @@ % ---------------------------------------------------------- \chapter{Introdução} +Nesse capítulo será feita uma contextualização sobre \emph{Crowdfunding} ou Financiamento Coletivo, de onde ele surgiu, evoluiu e como este mercado se apresenta no Brasil. Em seguida é apresentado uma justificativa de como é possível utilizar desse fenômeno para financiamento de iniciativas sociais. + \section{Contextualização} -Em sua essência, Financiamento Coletivo é parte de um conceito mais amplo chamado Contribuição Colaborativa (ou Colaboração Coletiva - do inglês \emph{Crowdsourcing}). Em plataformas de Contribuição Coletiva utiliza-se do "coletivo" para se obter ideias, \emph{feedback} e soluções para problemas através de uma chamada ampla via Internet e a custo zero, ou bastante reduzidos. +Em sua essência, Financiamento Coletivo é parte de um conceito mais amplo chamado Contribuição Colaborativa (ou Colaboração Coletiva - do inglês \emph{Crowdsourcing}). Em plataformas dessa modalidade de colaboração utiliza-se do "coletivo" para se obter ideias, \emph{feedback} e soluções para problemas através de uma chamada ampla via Internet e a custo zero, ou bastante reduzidos. -Sites como \emph{The Mechanical Turk}\footnote{https://www.mturk.com} oferecem uma plataforma onde pessoas ou organizações podem colocar pedidos de micro-trabalhos, como votar na qualidade de traduções ou classificar vídeos em relação a seu conteúdo. Como recompensa a pessoa que faz essas tarefas recebe micro-pagamentos de, por exemplo, U\$ 0,15 (quinze centavos de dólar) por vídeo classificado. Outros como o \emph{Kickstarter}\footnote{https://www.kickstarter.com} oferecem uma plataforma e rede social para arrecadar fundos para projetos normalmente relacionados a artes audiovisuais e atualmente é uma das mais prominentes plataformas de \emph{crowdfunding}. Em Novembro de 2016, nove das dez mais bem financiadas campanhas de \emph{crowdfunding} foram feitas via Kickstarter\footnote{Consultado em 31 jan. 2017 em http://crowdfundingblog.com/most-successful-crowdfunding-projects/}, juntas essas campanhas arrecadaram mais de U\$ 102 milhões. +Sites como \emph{The Mechanical Turk}\footnote{https://www.mturk.com} oferecem uma plataforma onde pessoas ou organizações podem colocar pedidos de micro-trabalhos, como votar na qualidade de traduções ou classificar vídeos em relação a seu conteúdo. Como recompensa a pessoa que faz essas tarefas recebe micro-pagamentos de, por exemplo, U\$ 0,15 (quinze centavos de dólar) por vídeo classificado. Outros como o \emph{Kickstarter}\footnote{https://www.kickstarter.com} oferecem uma plataforma e rede social para arrecadar fundos para projetos normalmente relacionados a artes audiovisuais e atualmente é uma das mais prominentes plataformas de \emph{crowdfunding}. Em Novembro de 2016, nove das dez mais bem financiadas campanhas de \emph{crowdfunding} foram feitas via Kickstarter\footnote{Consultado em 31 jan. 2017 em http://crowdfundingblog.com/most-successful-crowdfunding-projects/}. Juntas essas campanhas arrecadaram mais de U\$ 102 milhões. Além de casos consolidados como esses, grandes empresas da Internet como Google, Amazon e Facebook estão apostando cada vez mais em soluções de \emph{Crowdsourcing} para inúmeras tarefas que necessitam de interação humana e para treinamento de Inteligências Artificiais. Um caso recente é o aplicativo Android Google \emph{Crowdsourcing} \cite{cnet-google-crowdsourcing} que dá aos usuários pequenas tarefas para auxiliar o aprendizado das inteligências artificiais por trás dos produtos Google. Tarefas como reconhecimento de escrita, interpretação de textos em fotografias, avaliação de traduções e várias outras estão disponíveis para serem resolvidas através do aplicativo e treinarem as várias inteligências artificiais por trás dos produtos da empresa. -Dessa nova forma de colaboração surgiu naturalmente um novo fenômeno: o Financiamento Colaborativo, ou \emph{Crowdfunding}. Ambos utilizam o poder de várias pessoas engajadas e pequenas contribuições de um grande número de pessoas para atingirem seus objetivos \cite{crowdfunding-culture}. Porém o fluxo de capital no \emph{Crowdfunding} é o contrário do \emph{Crowdsourcing}. Projetos que utilizam essa modalidade de financiamento pedem, através de plataformas online, pequenas contribuições financeiras de contribuidores individuais ou mesmo de investidores. O objetivo desses projetos normalmente é fazer algo mais pessoal como produção artística ou apoiar a produção de softwares como, por exemplo, jogos de forma mais independente. Assim é criado um novo modelo de investimento que circunver formas tradicionais de investimento como empréstimos junto a bancos, \emph{venture capital} (capital de risco) e afins \cite{belleflamme2010}. +Dessa nova forma de colaboração surgiu, com o passar do tempo, um novo fenômeno: o Financiamento Colaborativo, ou \emph{Crowdfunding}. Ambos utilizam o poder de várias pessoas engajadas e pequenas contribuições de um grande número de pessoas para atingirem seus objetivos \cite{crowdfunding-culture}. Em contraste ao \emph{Crowdsourcing}, onde as pessoas financiam a si mesmas ou são financiadas com recompensas para fazerem o trabalho, o fluxo de capital no \emph{Crowdfunding} é o contrário. Projetos que utilizam \emph{crowdfunding} pedem, através de plataformas online, pequenas contribuições financeiras de contribuidores individuais ou mesmo de investidores. O objetivo desses projetos normalmente é fazer algo mais pessoal como produção artística ou apoiar a produção de softwares como, por exemplo, jogos de forma mais independente. Assim é criado um novo modelo de investimento que circunver formas tradicionais de investimento como empréstimos junto a bancos, \emph{venture capital} (capital de risco) e afins \cite{belleflamme2010}. A primeira plataforma de \emph{crowdfunding} a ter sucesso e ser responsável por iniciar de fato o mercado de \emph{crowdfunding} nos Estados Unidos foi o \emph{ArtistShare}\footnote{http://www.artistshare.com/} em 2003 \cite{freedman2015brief}. De autoria de Brian Camelio, um músico e programador de Boston, o \emph{ArtistShare} foi um \emph{website} onde músicos podiam buscar doações de seus fãs para possibilitar aos artistas a gravação e produção digital de música. Eventualmente o site se tornou uma plataforma de financiamento coletivo para artistas audiovisuais, fotógrafos e músicos. Seguindo essa tendencia, em 2005, Matt e Jessica Flannery idealizaram e lançaram o que é considerada a primeira plataforma para \emph{crowdfunding} social: Kiva\footnote{http://www.kiva.org}, uma agência de financiamento que utiliza \emph{crowdfunding} para prover micro crédito a empreendedores pobres em países em desenvolvimento, mais notavelmente no Leste da África, India e Ásia Central. O Kiva é uma empresa sem fins lucrativos (\emph{non-profit}) e plataforma tecnológica que liga pessoas que mesmo com pouco dinheiro, possuem a vontade de ajudar a pessoas que necessitam de recursos para ter um mínimo de qualidade de vida ou oportunidade \cite{flannery2007kiva}. A ideia começou quando os criadores do Kiva, durante uma viagem a África, conheceram o dono de uma peixaria na Etiópia que não tinha como melhorar seus lucros, pois não tinha dinheiro para comprar uma passagem de ônibus e dependia de um atravessador para comprar peixes. -No Brasil o mercado de \emph{Crowdfunding} está ainda em seu começo, mas cresce a cada ano. Como exposto em \cite{globo-financiamento}, depois de passar mais de cinco anos procurando sem sucesso por investidores dispostos a financiar sua ideia, o arquiteto Márcio Cerqueira resolveu apostar em financiamento coletivo. A decisão foi fundamental para tirar do papel o Mola, espécie de \emph{Lego} que ajuda estudantes de arquitetura a entender melhor as estruturas de edifícios. O objetivo inicial era de levantar R\$ 50 mil, mas o projeto teve mais de 1.500 apoiadores e acabou arrecadando R\$ 600 mil, mais de 10 vezes a meta inicial, algo que não teria obtido com grandes investidores. Já no projeto Catarse\footnote{https://www.catarse.me}, uma das maiores plataformas nacionais de \emph{crowdfunding}, o volume arrecadado em 2016 foi de R\$ 16.2 milhões, um crescimento de 41\% em relação a 2015 \cite{catarse-retrospectiva2016}, e 134.827 pessoas apoiaram projetos na plataforma e desses 77.98\% apoiaram pela primeira vez (105.150 pessoas). +No Brasil o mercado de \emph{Crowdfunding} está ainda em seu começo, mas cresce a cada ano. Como exposto por \citeauthor{globo-financiamento}, depois de passar mais de cinco anos procurando sem sucesso por investidores dispostos a financiar sua ideia, o arquiteto Márcio Cerqueira resolveu apostar em financiamento coletivo. A decisão foi fundamental para tirar do papel o Mola, espécie de \emph{Lego} que ajuda estudantes de arquitetura a entender melhor as estruturas de edifícios. O objetivo inicial era de levantar R\$ 50 mil, mas o projeto teve mais de 1.500 apoiadores e acabou arrecadando R\$ 600 mil, mais de 10 vezes a meta inicial, algo bastante incomum quando se busca financiamento com grandes investidores. Já no projeto Catarse\footnote{https://www.catarse.me}, uma das maiores plataformas nacionais de \emph{crowdfunding}, o volume arrecadado em 2016 foi de R\$ 16.2 milhões, um crescimento de 41\% em relação a 2015 \cite{catarse-retrospectiva2016}, e 134.827 pessoas apoiaram projetos na plataforma e desses 77.98\% apoiaram pela primeira vez (105.150 pessoas). -Diante do cenário de crescimento da modalidade de \emph{crowdfunding} no Brasil e da possibilidade de se utilizar dessa modalidade para financiamento de projetos sociais, uma ferramenta para fazer isso se faz não apenas oportuna como necessária. +Diante do cenário de crescimento da modalidade de \emph{crowdfunding} no Brasil e da possibilidade de se utilizar dessa modalidade para financiamento de projetos sociais, uma ferramenta para fazer isso se faz tanto oportuna como necessária. \section{Justificativa} -A situação atual das ONGs\footnote{Organizações Não-Governamentais}, como normalmente são chamadas organizações sem fins lucrativos, inclui dificuldades de várias ordens, mas as mais comuns, e que muitas vezes impedem a iniciativa de continuar ou até mesmo começar são dificuldades em identificar fontes de financiamento e captar recursos. Elas enfrentam críticas sobre o papel que ocupam na economia e na sociedade, sua relação com o governo e as empresas \cite{GOUVEIA2007}. Além desses problemas, muitas vezes ONGs têm problemas para captação de recursos junto a pessoas físicas, pois muitos acreditam que trabalho voluntário é o suficiente. No Brasil, atualmente se vê um crescimento do trabalho voluntariado a um ponto que alguns autores \cite{fagundes2012repercussoes} consideram isso como influência negativa a implementação de determinadas politicas sociais governamentais para diminuição da pobreza. Entende-se que se as próprias pessoas estão se mobilizando para resolver alguns problemas sociais, os mesmos se tornam menores e consequentemente menos recursos necessitem ser alocados para isso. +A situação atual das ONGs\footnote{Organizações Não-Governamentais}, como normalmente são chamadas organizações sem fins lucrativos, inclui dificuldades de várias ordens, mas as mais comuns, e que muitas vezes impedem a iniciativa de continuar ou até mesmo começar são dificuldades em identificar fontes de financiamento e captar recursos. Elas enfrentam críticas sobre o papel que ocupam na economia e na sociedade, sua relação com o governo e as empresas \cite{GOUVEIA2007}. Além desses problemas, muitas vezes ONGs têm problemas para captação de recursos junto a pessoas físicas, pois normalmente seus gestores acreditam que o voluntariado é o bastante, como indicado por \citeauthor{modeloGestaoONG}. No Brasil, atualmente se vê um crescimento do trabalho voluntário a um ponto que alguns autores \cite{fagundes2012repercussoes} consideram isso como influência negativa a implementação de determinadas politicas sociais governamentais para diminuição da pobreza. Entende-se que se as próprias pessoas estão se mobilizando para resolver alguns problemas sociais, os mesmos se tornam menores e consequentemente menos recursos necessitam ser alocados para isso. -Apesar do crescimento das plataformas nacionais de \emph{crowdfunding}, da quantidade de projetos e de apoiadores, essas plataformas têm taxas de uso da plataforma altas, comumente superiores a 10\%. Parte deste percentual são custos do \emph{gateway} de pagamentos utilizado pelo serviço como, por exemplo, o MoIP (\emph{Money Over IP}) que cobra de 3,49\% + R\$0,69 a 5,49\% + R\$0,69 por transação\footnote{Consultado em 27/01/2017 em https://moip.com.br/tarifas/}. Além desses custos, as plataformas nacionais não disponibilizam opção de escolha em relação a qual \emph{gateway} de pagamento o projeto deseja utilizar. O Catarse, por exemplo, utiliza o \emph{gateway} Pagar.me\footnote{Consultado em 27/01/2017 em http://crowdfunding.catarse.me/nossa-taxa}. Outro grande serviço nacional, o Kickante utiliza MoIP como \emph{gateway} de pagamento\footnote{Consultado em 27/01/2017 em https://www.kickante.com.br/termos/termos-de-uso, item 9.1.2}. Em virtude dessa falta de escolha, o projeto deste trabalho trás a inovação da escolha do \emph{gateway} de pagamento utilizado a fim de possibilitar a escolha do serviço com a melhor relação custo/benefício à instituição a qual pode ter, por exemplo, parceria com um determinado \emph{gateway}. +Apesar do crescimento das plataformas nacionais de \emph{crowdfunding}, da quantidade de projetos e de apoiadores, essas plataformas têm taxas de uso comumente superiores a 10\%. Parte deste percentual são custos do \emph{gateway} de pagamentos, empresas que prestam serviço de recebimento de pagamentos online, utilizado pelo serviço como, por exemplo, o MoIP\footnote{3,49\% + R\$0,69 a 5,49\% + R\$0,69 por transação - Consultado em 27/01/2017 em https://moip.com.br/tarifas/}. Além desses custos, as plataformas nacionais não disponibilizam opção de escolha em relação a qual \emph{gateway} de pagamento o projeto deseja utilizar. O Catarse, por exemplo, utiliza o \emph{gateway} Pagar.me\footnote{Consultado em 27/01/2017 em http://crowdfunding.catarse.me/nossa-taxa}. Outro grande serviço nacional, o Kickante utiliza MoIP como \emph{gateway} de pagamento\footnote{Consultado em 27/01/2017 em https://www.kickante.com.br/termos/termos-de-uso, item 9.1.2}. Em virtude dessa falta de escolha, o projeto deste trabalho traz a inovação da escolha do \emph{gateway} de pagamento utilizado a fim de permitir o uso do \emph{gateway} com a melhor relação custo/benefício à instituição a qual pode ter, por exemplo, parceria com o mesmo. -Ante os custos apresentados, as dificuldades envolvidas em outras formas de financiamento e as facilidades e potenciais benefícios, este trabalho se propõe a criar uma plataforma de \emph{crowdfunding} de código aberto chamada Ajuda.Ai que acarrete o mínimo custo possível para os projetos financiados pela plataforma, focada para organizações de pequeno porte. Para esse objetivo, um dos pontos principais e diferenciais da ferramenta é a possibilidade da escolha do projeto de qual \emph{gateway} de pagamento será usado para processar as doações. Além disso, nenhum custo fora os custos embutidos pelo próprio \emph{gateway} de pagamento será impresso às doações, dando assim uma maior margem ao projeto sob as doações recebidas. +Ante os custos apresentados, as dificuldades envolvidas em outras formas de financiamento e as facilidades e potenciais benefícios, este trabalho se propõe a criar uma plataforma de \emph{crowdfunding} de código aberto chamada Ajuda.Ai que acarrete o mínimo custo possível para os projetos financiados pela plataforma, focada para organizações de pequeno porte. Para esse objetivo, um dos pontos principais e diferenciais da ferramenta é a possibilidade da escolha de qual \emph{gateway} de pagamento será usado para processar as doações. Além disso, nenhum custo fora os embutidos pelo próprio \emph{gateway} de pagamento será acrescido às doações, dando assim uma maior margem ao projeto sobre as doações recebidas. -Custos de manutenção e hospedagem do projeto serão custeados inicialmente através de capital pessoal e, com o crescimento do projeto, há a possibilidade de se utilizar a própria plataforma para captação de recursos para mantê-lo projeto ou, igualmente ao projeto Kiva, buscar investimento junto a investidores anjo ou filantropos. +Custos de manutenção e hospedagem do projeto serão cobertos inicialmente através de capital pessoal e, com o crescimento do Ajuda.Ai, há a possibilidade de se utilizar a própria plataforma para captação de recursos para mantê-lo ou, igualmente ao projeto Kiva, buscar investimento junto a investidores anjo ou filantropos. \section{Objetivos} \subsection{Objetivo Geral} -O objetivo geral deste trabalho é prover um plataforma simples para facilitação de captação de recursos financeiros via Internet em modalidade \emph{Crowdfunding}. A ferramenta Ajuda.Ai irá prover uma melhora em relação às disponíveis no mercado através da possibilidade de seleção e suporte a diferentes \emph{gateways} de pagamento, isenção de taxas de uso da própria plataforma de \emph{crowdfunding}, minimizando as taxas sobre as doações e provendo uma forma simples e cômoda para os doadores alcançarem as instituições de seus interesses. +O objetivo geral deste trabalho é prover um plataforma simples para facilitação de captação de recursos financeiros via Internet em modalidade \emph{Crowdfunding} focada em organizações de menor porte. A ferramenta Ajuda.Ai irá prover uma melhora em relação às disponíveis no mercado através da possibilidade de seleção e suporte a diferentes \emph{gateways} de pagamento, isenção de taxas de uso da própria plataforma de \emph{crowdfunding}, minimizando as taxas sobre as doações e provendo uma forma simples e cômoda para os doadores alcançarem as instituições de seus interesses. \subsection{Objetivos Específicos} \begin{lista} - \item Construir uma ferramenta de código fonte aberto para captação de recursos financeiros em modalidade \emph{crowdfunding}; - \item Aprender sobre os fenômenos do \emph{Crowdsourcing} e \emph{Crowdfunding} e seus relacionamentos com empreendimentos sociais; - \item Experimentar o desenvolvimento de uma aplicação web na plataforma Java que utilize de forma profissional recursos e ferramentas disponíveis pela e para a plataforma. + \item Traçar estratégia de oferta de redução de custos através de opções de \emph{gateways} de pagamento; + \item Definir arquitetura de software que privilegie redução de custos de hospedagem e manutenção; + \item Explanar a arquitetura básica de \emph{gateways} de pagamento e as possibilidades de integração com tal arquitetura. \end{lista} @@ -55,7 +57,6 @@ \section*{Resumo} \begin{lista} \item \textbf{Fundamentação Teórica:} Neste capítulo são apresentados todos os conceitos teóricos utilizados no desenvolvimento da solução proposta no presente trabalho; - %\item \textbf{Metodologia:} Neste capítulo são detalhados os artefatos produzidos nas fases de levantamento de requisitos, modelagem e implementação do processo de software utilizado no desenvolvimento da solução; \item \textbf{Ajuda.Ai:} Capítulo dedicado a apresentação da solução implementada, detalhando funcionalidades, utilização e demais detalhes da implementação; \item \textbf{Conclusão:} Neste capítulo é feita a conclusão do trabalho dado seus objetivos propostos e são listados os trabalhos futuros para melhorar e/ou expandir a utilização da solução. \end{lista} \ No newline at end of file diff --git a/capitulos/metodologia.tex b/capitulos/metodologia.tex index d0da5d0..e31e21b 100644 --- a/capitulos/metodologia.tex +++ b/capitulos/metodologia.tex @@ -3,30 +3,4 @@ % ---------------------------------------------------------- \chapter{Metodologia} -No desenvolvimento da aplicação utilizou-se de uma metodologia de desenvolvimento de software composta das seguintes fases: Levantamento de Requisitos, Modelagem, Implementação e Testes \cite{sommerville2003engenharia}. - -\textbf{\textit{--- Assumo que a definição de levantamento de requisitos vem aqui? Talvez das 4 fases? E meio que entre nós: não exitem testes :P ---}} - -O levantamento de requisitos foi feito através da análise do mercado de \emph{crowdfunding} nacional, do crescimento e popularização da prática dessa modalidade de investimento e tendencias internacionais em relação ao mercado de empreendimentos sociais. Os casos de uso resultantes do levantamento de requisitos foram: - -\begin{lista} - \item \textbf{Caso de Uso 01 - Doação}: O usuário se identifica com o trabalho de uma determinada instituição e quer fazer uma doação a mesma através da Internet; - \item \textbf{Caso de Uso 02 - Comunicação com o Doador}: As instituições precisam de um canal para se comunicarem aos seus doadores e potenciais doadores; - \item \textbf{Caso de Uso 03 - Acompanhamento das Doações}: É importante para a Instituição ter uma maneira de acompanhar a arrecadação de sua campanha e ter informações sobre quanto foi arrecadado e quando o dinheiro estará disponível; - %\item \textbf{Caso de Uso 04 - Descobrimento de Instituições}: É importante para a Instituição ter uma maneira de acompanhar a arrecadação de sua campanha e ter informações sobre quanto foi arrecadado e quando o dinheiro estará disponível; -\end{lista} - -As especificações dos casos de uso estão disponíveis no Anexo \ref{anexo:b} - Especificação de Casos de Uso. - -Após o levantamento de requisitos e definição dos casos de Uso, se escolheu a metodologia \emph{Kanban} para guiar o processo de desenvolvimento de software. O \emph{Kanban} é uma metodologia para gestão de desenvolvimento que busca balancear demandas com base na capacidade de e para trabalhar. Membros do projeto "puxam" trabalho a medida que a capacidade de trabalho permite ao invés de ter trabalho vinculados a eles durante o processo \cite{wiki:Kanban}. - -\textbf{\textit{--- O que mais botar aqui? ---}} - - - - - -\section*{Resumo} -Neste capítulo foram apresentados os Casos de Uso levantados e o processo para implementação dos mesmos através de uma metodologia de desenvolvimento de software. - -O próximo capítulo é dedicado a apresentação da solução implementada, detalhando funcionalidades, utilização e demais detalhes da implementação. \ No newline at end of file +Bla bla bla metodologia. \ No newline at end of file diff --git a/configuracoes/metadados.tex b/configuracoes/metadados.tex index 0945d74..c121dd0 100644 --- a/configuracoes/metadados.tex +++ b/configuracoes/metadados.tex @@ -43,7 +43,7 @@ \membrodois{Prof. M\textsuperscript{e}. Duany Dreyton Bezerra Sousa} %% Terceiro membro da banca examinadora -\membrotres{Prof. Dr. Ney Paranaguá de Carvalho} +%\membrotres{Prof. Dr. Ney Paranaguá de Carvalho} %% Data da apresentação do trabalho %% Se não souber a data da apresentação, utilize \underline{\hspace{3.5cm}} diff --git a/estrutura/pre-textual.tex b/estrutura/pre-textual.tex index 1b21919..f07614c 100644 --- a/estrutura/pre-textual.tex +++ b/estrutura/pre-textual.tex @@ -41,8 +41,8 @@ %% 04: Folha de Aprovação -%\imprimirfolhadeaprovacao -\imprimirfolhadeaprovacaoduascolunas +\imprimirfolhadeaprovacao +%\imprimirfolhadeaprovacaoduascolunas diff --git a/imagens/uml-casos-de-uso-03.pdf b/imagens/uml-casos-de-uso-03.pdf new file mode 100644 index 0000000..bff526b Binary files /dev/null and b/imagens/uml-casos-de-uso-03.pdf differ diff --git a/pos-textual/anexos-api-rest.tex b/pos-textual/anexos-api-rest.tex new file mode 100644 index 0000000..9523991 --- /dev/null +++ b/pos-textual/anexos-api-rest.tex @@ -0,0 +1,694 @@ +\chapter{Documentação da API REST Web} \label{anexo:a} + +\textbf{Nota:} Todos os parâmetros são obrigatórios, a menos que especificado que seja opcional. Parâmetros que fazem parte da própria URL são indicados com um sinal de dois-pontos no início de seu nome. \\ + +\begin{caixa}{Autenticação do Usuário}{} + +Retorna informações sobre o usuário logado. Usado para, além de pegar informações sobre o usuário logado, manter a Sessão de autenticação ativa. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/auth/login} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{POST} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item \codigo{username=String} Nome de usuário ou E-mail do Usuário que quer se autenticar + \item \codigo{password=String} Senha do Usuário + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON de um objeto \codigo{User} apenas com os campos \codigo{id}, \codigo{username}, \codigo{email}, \codigo{firstname} e \codigo{lastname} do Usuário logado. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} \codigo{Array} com os erros de autenticação \\ \textbf{Motivo:} Usuário ou senha incorretos. + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Dados do Usuário Logado}{} + +Retorna informações sobre o usuário logado. Usado para, além de pegar informações sobre o usuário logado, manter a Sessão de autenticação ativa. A sessão de autenticação dura por 30 minutos após a última requisição a API. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/profile/me} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{User} do usuário logado, apenas com os campos \codigo{id}, \codigo{username}, \codigo{email}, \codigo{firstname} e \codigo{lastname}. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Dados de um Usuário}{} + +Retorna informações sobre o usuário especificado a partir de seu nome de usuário. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/profile/:username} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item \codigo{username=String} - \textbf{(opcional se \codigo{id} for especificado)} Nome único de usuário + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item \codigo{id=Integer} - Identificador do usuário + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{User} do usuário encontrado, apenas com os campos \codigo{id}, \codigo{username}, \codigo{firstname} e \codigo{lastname}. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Usuário não existe + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Dados de uma Instituição}{} + +Retorna todos os dados de uma Instituição. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/:slug} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item \codigo{slug=String} - Nome da URL da Instituição + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com os dados da Instituição + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Dados de uma Instituição escolhida Aleatoriamente}{} + +Retorna todos os dados de uma Instituição escolhida aleatoriamente. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/random} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com os dados de uma Instituição + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há nenhuma instituição cadastrada no banco de dados + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Lista de Instituições escolhidas Aleatoriamente}{} + +Retorna uma lista de até 12 Instituições escolhidas aleatoriamente. Útil para exibir Instituições na Página Inicial. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/random-list} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com um \codigo{Array} com dados de Instituições escolhidas aleatoriamente. Máximo de 12 instituições. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há nenhuma instituição cadastrada no banco de dados + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Estatísticas de Doações}{} + +Retorna quantas doações a Instituição recebeu e o valor total das mesmas. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/:slug/donation-stats} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item \codigo{slug=String} - Nome da URL da Instituição + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \\ \codigo{\{ count: Integer, value: Integer \}} - O valor deve ser dividido por 100 para ser exibido adequadamente. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Doação - Passo 01: Registrar o Pagamento}{} + +Inicia o processo de doação gravando os dados da mesma no Ajuda.Ai. Posteriormente o usuário deverá ser redirecionando para o \emph{gateway} de pagamento vinculado a Instituição através do método \codigo{/pagar/:id}. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/:slug/doar} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{POST} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item \codigo{slug=String} - Nome da URL da Instituição + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item \codigo{value=Integer} - Valor da Doação como um Inteiro (10000 = \$100,00) + \item \codigo{name=String} - \textbf{(opcional se feito o login)} Nome Completo do Doador + \item \codigo{email=String} - \textbf{(opcional se feito o login)} E-mail do Doador + %\item \codigo{anonymous=Boolean} - Doação anônima? + \item \codigo{addcosts=Boolean} - Adicionar custos operacionais do Gateway ao valor da doação? + \item \codigo{addcoststype=Integer} - Tipo de pagamento que será utilizado (para cálculo do custo operacional) + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} Objeto \codigo{Payment} com os dados do pagamento criado + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Doação - Passo 02: Redirecionamento ao \emph{Gateway}}{} + +Continua o processo de doação redirecionando o usuário para o \emph{gateway} de pagamento vinculado ao \codigo{Payment} especificado. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/pagar/:id} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item \codigo{id=UUID} - Identificador do pagamento (UUID) + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{302 MOVED TEMPORARILY} \\ \textbf{Conteúdo:} Nenhum + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Pagamento não existe + \item \textbf{Código:} \codigo{409 CONFLICT} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Notificações do \emph{Gateway} informam que este pagamento já está ou já foi processado. + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{\emph{Posts} de uma Instituição}{} + +Retorna uma lista de tamanho limitado com os \emph{posts} de uma Instituição. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/:slug/posts} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item GET + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item \codigo{slug=String} - Nome de URL da Instituição + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item \codigo{size=Integer} - \textbf{(opcional)} Quantidade de Itens na lista. Padrão: \codigo{10}. Máximo: \codigo{50}. + \item \codigo{offset=Integer} - \textbf{(opcional)} Primeiro item da lista. Padrão: \codigo{0}. + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \\ \codigo{\{ size: Integer, total: Integer, offset: Integer, items: [InstitutionPost] \}} \\ + Nota: os \emph{posts} terão apenas os campos id, slug, titulo, subtitulo, criador e data e hora de criação. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição não existe + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Post Único de uma Instituição}{} + +Retorna um único \emph{post} de uma Instituição. + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/:slug/:post-slug} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item \codigo{slug=String} - Nome da URL da Instituição + \item \codigo{post-slug=String} - Nome da URL específico do \emph{post} da Instituição + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON com os dados do \emph{post} da Instituição + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{404 NOT FOUND} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Instituição ou \emph{Post} não existem + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{GET}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Dados sobre Doações do Usuário Logado}{} + +Retorna algumas informações sobre as doações feitas pelo usuário logado. + +\textbf{* Este método requer quer o usuário tenha feito login.} + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/profile/dashboard-data} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \codigo{\{ donations: Integer, institutions: Integer, value: Integer, meanValue: Integer, posts: [InstitutionPost], payments: [Payment] \}} + \item \textbf{Descrição dos campos:} + \begin{itemize} + \item \codigo{donations}: Quantidade de doações feitas pelo usuário; + \item \codigo{institutions}: Quantidade de instituições únicas contempladas pelas doações; + \item \codigo{value}: Somatório dos valores das doações; + \item \codigo{meanValue}: Média dos valores das doações; + \item \codigo{posts}: Entre 0 e 10 dos \emph{posts} mais recentes das instituições contempladas pelas doações (``Últimas Notícias''); + \item \codigo{payments}: Entre 0 e 10 das últimas doações feitas pelo usuário. + \end{itemize} + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Alterar Informações do usuário Logado}{} + +Altera informações do usuário logado como nome, e-mail, senha, etc. + +\textbf{* Este método requer quer o usuário tenha feito login.} + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/profile/save} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{POST} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{User} que foi alterado, apenas com os campos \codigo{id}, \codigo{username}, \codigo{email}, \codigo{firstname}, \codigo{lastname}. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Dados sobre as Instituições pertencentes ao Usuário}{} + +Retorna algumas informações sobre as doações feitas a todas as Instituições pertencentes ao usuário logado. + +\textbf{* Este método requer quer o usuário tenha feito login.} + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/dashboard-data} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{GET} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON no seguinte formato: \codigo{\{ donations: Integer, value: Integer, helpers: Integer, maxValue: Integer, meanValue: Integer, institutionCount: Integer, institutions: [Institution] \}} + \item \textbf{Descrição dos campos:} + \begin{itemize} + \item \codigo{donations}: Quantidade de doações feitas às Instituições; + \item \codigo{value}: Somatório dos valores das doações; + \item \codigo{helpers}: Quantidade de usuários únicos que fizeram doações às Instituições; + \item \codigo{maxValue}: Maior valor doado; + \item \codigo{meanValue}: Média dos valores das doações; + \item \codigo{institutionCount}: Quantas Instituições pertencem ao usuário; + \item \codigo{institutions}: Entre 0 e 50 Instituições pertencentes ao usuário. + \end{itemize} + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado + \end{itemize} + +\end{itemize} +\end{caixa} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{caixa}{Altera dados de uma Instituição pertencente ao Usuário}{} + +Altera informações sobre uma Instituição pertencente ao Usuário. + +\textbf{* Este método requer quer o usuário tenha feito login.} + +\begin{itemize} +\item \textbf{URL} + \begin{itemize} + \item \codigo{/institution/save} + \end{itemize} + +\item \textbf{Método} + \begin{itemize} + \item \codigo{POST} + \end{itemize} + +\item \textbf{Parâmetros} + \begin{itemize} + \item Nenhum Parâmetro + \end{itemize} + +\item \textbf{Parâmetros de Dados} + \begin{itemize} + \item JSON de um objeto \codigo{Institution} + \end{itemize} + +\item \textbf{Resposta de Sucesso} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} JSON do objeto \codigo{Institution} após ser alterado na persistência de dados. + \end{itemize} + +\item \textbf{Resposta de Erro} + \begin{itemize} + \item \textbf{Código:} \codigo{200 OK} \\ \textbf{Conteúdo:} \codigo{Array} com erros de validação \\ \textbf{Motivo:} Um ou mais campos falhou na validação de dados. + \item \textbf{Código:} \codigo{401 UNAUTHORIZED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} Não há um Usuário logado + \item \textbf{Código:} \codigo{405 METHOD NOT ALLOWED} \\ \textbf{Conteúdo:} Nenhum \\ \textbf{Motivo:} A chamada HTTP não utilizou o método \codigo{POST}. + \end{itemize} + +\end{itemize} +\end{caixa} \ No newline at end of file diff --git a/pos-textual/anexos-casos-de-uso.tex b/pos-textual/anexos-casos-de-uso.tex new file mode 100644 index 0000000..d928219 --- /dev/null +++ b/pos-textual/anexos-casos-de-uso.tex @@ -0,0 +1,256 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Anexo B (como o A foi retirado, esse que realmente será o A) +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Especificação de Casos de Uso} \label{anexo:b} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Anexo B - Caso de Uso 01 +%% Aqui são usado os asteriscos para retirar essas seções/subseções do Sumário +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section*{Especificação do Caso de Uso 01 --- Doação} +\subsection*{Objetivo} +Este documento tem por objetivo descrever todos os fluxos envolvidos no Caso de Uso 01 - Doação. São listados e detalhados todos os atores, fluxos, requisitos funcionais e não-funcionais. + +\subsection*{Identificação dos Atores} +Esta seção lista e descreve todos os atores envolvidos nos fluxos que compõem o Caso de Uso 01 - Doação. +\begin{lista} + \item \textbf{Usuário}: Qualquer pessoa que utiliza o Ajuda.Ai; + \item \textbf{Cliente}: Interface através da qual o Usuário utiliza o Ajuda.Ai. +\end{lista} + +\subsection*{Identificação dos Fluxos} +Esta seção lista e descreve todos os fluxos que compõem o caso de uso. +\begin{lista} + \item \textbf{Efetuar Doação}: Este fluxo descreve como se dá a efetuação de uma doação a uma Instituição. +\end{lista} + +\subsection*{Detalhamento dos Fluxos} +\begin{lista} + \item \textbf{Efetuar Doação}: Este fluxo especifica a ação de efetuar uma doação a uma Instituição. O usuário fornece dados ao cliente o qual, junto ao sistema, faz uma ordem de pagamento junto ao \emph{Gateway} configurado para a Instituição. + \begin{itemize} + \item \textbf{Atores}: Usuário, Cliente; + \item \textbf{Pré-Condições}: Nenhuma; + \item \textbf{Pós-Condições}: Nenhuma; + \item \textbf{Requisitos Funcionais}: O sistema deve prover uma interface para execução da doação. + \end{itemize} + + \textbf{Fluxo Básico} + \begin{enumerate} + \item O ator Cliente mostra ao ator Usuário informações sobre uma Instituição; + \item O Usuário decide efetuar uma doação a Instituição; + \item O Cliente solicita os dados para doação: Valor, Se o nome de quem está doando pode ou não ser publicado, Se os custos operacionais do \emph{Gateway} devem ser embutidos no valor da doação, E-mail e Nome; + \item O Usuário informa os dados solicitados; + \item O Cliente envia os dados ao Sistema; + \item O Sistema valida os dados; + \item O Sistema registra a ordem de pagamento no SGBD; + \item O Sistema retorna ao Cliente os dados do pagamento a ser efetuado pelo Usuário; + \item O Cliente direciona o Usuário ao \emph{Gateway} para continuar o processo de pagamento; + \item O caso de uso se encerra. + \end{enumerate} + + \textbf{Fluxo Alternativo A} \\ + No Passo 5, caso exista algum erro de comunicação entre Cliente e Sistema: + \begin{enumerate} + \item Uma mensagem de erro é exibida ao Usuário informando da falha; + \item O fluxo retorna ao passo 1. + \end{enumerate} + + \textbf{Fluxo Alternativo B} \\ + No Passo 6, caso exista algum erro de validação das entradas: + \begin{enumerate} + \item Todos os erros de validação encontrados são retornados ao Cliente; + \item O fluxo retorna ao passo 1. + \end{enumerate} +\end{lista} +\pagebreak + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Anexo B - Caso de Uso 02 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section*{Especificação do Caso de Uso 02 --- Comunicação com o Doador} +\subsection*{Objetivo} +Este documento tem por objetivo descrever todos os fluxos envolvidos no Caso de Uso 02 - Comunicação com o Doador. São listados e detalhados todos os atores, fluxos, requisitos funcionais e não-funcionais. + +\subsection*{Identificação dos Atores} +Esta seção lista e descreve todos os atores envolvidos nos fluxos que compõem o Caso de Uso 02 - Comunicação com o Doador. +\begin{lista} + \item \textbf{Usuário}: Qualquer pessoa que utiliza o Ajuda.Ai; + \item \textbf{Instituição}: Usuário representativo de uma Instituição cadastrada no Ajuda.Ai; + \item \textbf{Cliente}: Interface através da qual o Usuário utiliza o Ajuda.Ai. +\end{lista} + +\subsection*{Identificação dos Fluxos} +Esta seção lista e descreve todos os fluxos que compõem o caso de uso. +\begin{lista} + \item \textbf{Criar \emph{Post}}: Este fluxo descreve como se dá a criação de um \emph{Post} pela Instituição; + \item \textbf{Editar \emph{Post}}: Este fluxo descreve como se dá a alteração de um \emph{Post} pela Instituição. +\end{lista} + +\subsection*{Detalhamento dos Fluxos} +\begin{lista} + \item \textbf{Criar \emph{Post}}: Este fluxo especifica a ação de criar um \emph{post} vinculado a uma Instituição. A Instituição fornece dados ao cliente o qual, junto ao sistema, cria um \emph{post} vinculado a Instituição que está usando o Sistema no momento. + \begin{itemize} + \item \textbf{Atores}: Instituição, Cliente; + \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema; + \item \textbf{Pós-Condições}: \emph{Post} cadastrado; + \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para criação de \emph{posts}. + \end{itemize} + + \textbf{Fluxo Básico} + \begin{enumerate} + \item A Instituição decide criar um novo \emph{post}; + \item A Instituição navega à página de criação de Novo \emph{Post}; + \item O Cliente solicita os dados do Post: Texto da URL, Título, Subtítulo, Conteúdo (formato \emph{Markdown}), imagem do cabeçalho e se o \emph{post} será ou não publicado; + \item A Instituição informa os dados solicitados; + \item O Cliente envia os dados ao Sistema; + \item O Sistema valida os dados; + \item O Sistema registra o \emph{post} no SGBD; + \item O Sistema retorna ao Cliente os dados do \emph{post} criado; + \item O caso de uso se encerra. + \end{enumerate} + + \textbf{Fluxo Alternativo A} \\ + Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: + \begin{enumerate} + \item Uma mensagem de erro é exibida ao Usuário informando da falha. + \end{enumerate} + + \textbf{Fluxo Alternativo B} \\ + No Passo 6, caso exista algum erro de validação das entradas: + \begin{enumerate} + \item Todos os erros de validação encontrados são retornados ao Cliente; + \item O fluxo retorna ao passo 2. + \end{enumerate} + + + + \item \textbf{Editar \emph{Post}}: Este fluxo especifica a ação de editar um \emph{post} vinculado a uma Instituição que já existe. Após escolher qual \emph{post} será alterado, a Instituição fornece dados ao cliente o qual, junto ao sistema, altera o \emph{post} vinculado a Instituição com as novas informações. + \begin{itemize} + \item \textbf{Atores}: Instituição, Cliente; + \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema, \emph{Post} da Instituição cadastrado no Sistema; + \item \textbf{Pós-Condições}: \emph{Post} modificado; + \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para alteração de \emph{posts}. + \end{itemize} + + \textbf{Fluxo Básico} + \begin{enumerate} + \item A Instituição decide alterar um \emph{post}; + \item A Instituição navega a uma página com uma lista de todos os seus \emph{posts}; + \item A Instituição seleciona qual de seus \emph{posts} será alterado; + \item O Cliente solicita os dados do Post: Texto da URL, Título, Subtítulo, Conteúdo (formato \emph{Markdown}), imagem do cabeçalho e se o \emph{post} será ou não publicado; + \item A Instituição informa os dados solicitados; + \item O Cliente envia os dados ao Sistema; + \item O Sistema valida os dados; + \item O Sistema altera o \emph{post} no SGBD; + \item O Sistema retorna ao Cliente os dados do \emph{post} alterado; + \item O caso de uso se encerra. + \end{enumerate} + + \textbf{Fluxo Alternativo A} \\ + Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: + \begin{enumerate} + \item Uma mensagem de erro é exibida ao Usuário informando da falha. + \end{enumerate} + + \textbf{Fluxo Alternativo B} \\ + No Passo 7, caso exista algum erro de validação das entradas: + \begin{enumerate} + \item Todos os erros de validação encontrados são retornados ao Cliente; + \item O fluxo retorna ao passo 3. + \end{enumerate} +\end{lista} +\pagebreak + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Anexo B - Caso de Uso 03 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section*{Especificação do Caso de Uso 03 --- Acompanhamento das Doações} +\subsection*{Objetivo} +Este documento tem por objetivo descrever todos os fluxos envolvidos no Caso de Uso 03 - Acompanhamento das Doações. São listados e detalhados todos os atores, fluxos, requisitos funcionais e não-funcionais. + +\subsection*{Identificação dos Atores} +Esta seção lista e descreve todos os atores envolvidos nos fluxos que compõem o Caso de Uso 03 - Acompanhamento das Doações. +\begin{lista} + \item \textbf{Instituição}: Usuário cadastrado no sistema e que possua pelo menos 01 (uma) Instituição vinculada a ele; + \item \textbf{Gateway}: \emph{Gateway} de Pagamento selecionado pela Instituição; + \item \textbf{Cliente}: Interface através da qual o Usuário utiliza o Ajuda.Ai. +\end{lista} + +\subsection*{Identificação dos Fluxos} +Esta seção lista e descreve todos os fluxos que compõem o caso de uso. +\begin{lista} + \item \textbf{Listagem Mensal de Doações}: Este fluxo descreve como se dá a criação de uma listagem mensal de Doações recebidas pela Instituição; + \item \textbf{Dados de uma Doação}: Este fluxo descreve como se dá a exibição de dados sobre uma Doação em Particular. +\end{lista} + +\subsection*{Detalhamento dos Fluxos} +\begin{lista} + \item \textbf{Listagem Mensal de Doações}: Este fluxo especifica a ação de listar as doações recebidas por uma Instituição em um determinado mês de um determinado ano. A Instituição fornece dados ao cliente o qual, junto ao sistema, cria uma lista, geralmente tabular, das doações recebidas. + \begin{itemize} + \item \textbf{Atores}: Instituição, Cliente; + \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema; + \item \textbf{Pós-Condições}: Nenhuma; + \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para listagem das Doações feitas a uma Instituição. + \end{itemize} + + \textbf{Fluxo Básico} + \begin{enumerate} + \item A Instituição necessita de uma listagem das doações de um mês; + \item A Instituição navega a uma página para listagem de doações; + \item O Cliente solicita os seguintes dados: De qual Instituição deve ser a lista, Mês e Ano da listagem e um dos itens de uma lista de Estados das Doações: Todos, Pago, Pronto para Receber e Cancelado; + \item A Instituição informa os dados solicitados; + \item O Cliente envia os dados ao Sistema; + \item O Sistema valida os dados; + \item O Sistema retorna ao Cliente os dados da listagem requisitada; + \item O caso de uso se encerra. + \end{enumerate} + + \textbf{Fluxo Alternativo A} \\ + Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: + \begin{enumerate} + \item Uma mensagem de erro é exibida ao Usuário informando da falha. + \end{enumerate} + + \textbf{Fluxo Alternativo B} \\ + No Passo 6, caso exista algum erro de validação das entradas: + \begin{enumerate} + \item Todos os erros de validação encontrados são retornados ao Cliente; + \item O fluxo retorna ao passo 2. + \end{enumerate} + + + + \item \textbf{Dados de uma Doação}: Este fluxo especifica a ação de ver dados de uma única doação específica. Após escolher qual doação será exibida, a Instituição fornece os dados necessários ao cliente o qual, junto ao sistema, pega e exibe as informações requeridas. + \begin{itemize} + \item \textbf{Atores}: Instituição, Cliente; + \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema, Haverem Doações feitas a Instituição; + \item \textbf{Pós-Condições}: Nenhuma; + \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para expor dados de um pagamento. + \end{itemize} + + \textbf{Fluxo Básico} + \begin{enumerate} + \item A Instituição decide ver dados de uma doação; + \item A Instituição seleciona qual doação será exibida; + \item A Instituição navega a uma página para exibição das informações da doação; + \item O Cliente requisita ao Sistema os dados da doação; + \item O Sistema busca os dados da doação especificada; + \item O Sistema retorna ao Cliente os dados da doação; + \item O caso de uso se encerra. + \end{enumerate} + + \textbf{Fluxo Alternativo A} \\ + Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: + \begin{enumerate} + \item Uma mensagem de erro é exibida ao Usuário informando da falha. + \end{enumerate} + + \textbf{Fluxo Alternativo B} \\ + No Passo 5, caso a doação esteja marcada como Anônima (\codigo{anonymous = true}): + \begin{enumerate} + \item Todas as informações de identificação do doador são retiradas do objeto (\codigo{payeeName} e \codigo{payeeEmail}); + \item O fluxo continua ao passo 6. + \end{enumerate} +\end{lista} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file diff --git a/pos-textual/anexos.tex b/pos-textual/anexos.tex index afc2818..86684dd 100644 --- a/pos-textual/anexos.tex +++ b/pos-textual/anexos.tex @@ -4,269 +4,7 @@ %% Imprime uma página indicando o início dos anexos (opcional, comente para retirar) %\partanexos -%% Cada capítulo será um anexo -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Anexo A (retirado) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%\chapter{Código fonte da Aplicação} \label{anexo:a} -%O código-fonte da aplicação se encontra publicamente disponível sob licença MIT em \\ -%https://github.com/g0dkar/ajuda-ai - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Anexo B (como o A foi retirado, esse que realmente será o A) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\chapter{Especificação de Casos de Uso} \label{anexo:b} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Anexo B - Caso de Uso 01 -%% Aqui são usado os asteriscos para retirar essas seções/subseções do Sumário -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section*{Especificação do Caso de Uso 01 --- Doação} -\subsection*{Objetivo} -Este documento tem por objetivo descrever todos os fluxos envolvidos no Caso de Uso 01 - Doação. São listados e detalhados todos os atores, fluxos, requisitos funcionais e não-funcionais. - -\subsection*{Identificação dos Atores} -Esta seção lista e descreve todos os atores envolvidos nos fluxos que compõem o Caso de Uso 01 - Doação. -\begin{lista} - \item \textbf{Usuário}: Qualquer pessoa que utiliza o Ajuda.Ai; - \item \textbf{Cliente}: Interface através da qual o Usuário utiliza o Ajuda.Ai. -\end{lista} - -\subsection*{Identificação dos Fluxos} -Esta seção lista e descreve todos os fluxos que compõem o caso de uso. -\begin{lista} - \item \textbf{Efetuar Doação}: Este fluxo descreve como se dá a efetuação de uma doação a uma Instituição. -\end{lista} - -\subsection*{Detalhamento dos Fluxos} -\begin{lista} - \item \textbf{Efetuar Doação}: Este fluxo especifica a ação de efetuar uma doação a uma Instituição. O usuário fornece dados ao cliente o qual, junto ao sistema, faz uma ordem de pagamento junto ao \emph{Gateway} configurado para a Instituição. - \begin{itemize} - \item \textbf{Atores}: Usuário, Cliente; - \item \textbf{Pré-Condições}: Nenhuma; - \item \textbf{Pós-Condições}: Nenhuma; - \item \textbf{Requisitos Funcionais}: O sistema deve prover uma interface para execução da doação. - \end{itemize} - - \textbf{Fluxo Básico} - \begin{enumerate} - \item O ator Cliente mostra ao ator Usuário informações sobre uma Instituição; - \item O Usuário decide efetuar uma doação a Instituição; - \item O Cliente solicita os dados para doação: Valor, Se o nome de quem está doando pode ou não ser publicado, Se os custos operacionais do \emph{Gateway} devem ser embutidos no valor da doação, E-mail e Nome; - \item O Usuário informa os dados solicitados; - \item O Cliente envia os dados ao Sistema; - \item O Sistema valida os dados; - \item O Sistema registra a ordem de pagamento no SGBD; - \item O Sistema retorna ao Cliente os dados do pagamento a ser efetuado pelo Usuário; - \item O Cliente direciona o Usuário ao \emph{Gateway} para continuar o processo de pagamento; - \item O caso de uso se encerra. - \end{enumerate} - - \textbf{Fluxo Alternativo A} \\ - No Passo 5, caso exista algum erro de comunicação entre Cliente e Sistema: - \begin{enumerate} - \item Uma mensagem de erro é exibida ao Usuário informando da falha; - \item O fluxo retorna ao passo 1. - \end{enumerate} - - \textbf{Fluxo Alternativo B} \\ - No Passo 6, caso exista algum erro de validação das entradas: - \begin{enumerate} - \item Todos os erros de validação encontrados são retornados ao Cliente; - \item O fluxo retorna ao passo 1. - \end{enumerate} -\end{lista} -\pagebreak - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Anexo B - Caso de Uso 02 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section*{Especificação do Caso de Uso 02 --- Comunicação com o Doador} -\subsection*{Objetivo} -Este documento tem por objetivo descrever todos os fluxos envolvidos no Caso de Uso 02 - Comunicação com o Doador. São listados e detalhados todos os atores, fluxos, requisitos funcionais e não-funcionais. - -\subsection*{Identificação dos Atores} -Esta seção lista e descreve todos os atores envolvidos nos fluxos que compõem o Caso de Uso 02 - Comunicação com o Doador. -\begin{lista} - \item \textbf{Usuário}: Qualquer pessoa que utiliza o Ajuda.Ai; - \item \textbf{Instituição}: Usuário representativo de uma Instituição cadastrada no Ajuda.Ai; - \item \textbf{Cliente}: Interface através da qual o Usuário utiliza o Ajuda.Ai. -\end{lista} - -\subsection*{Identificação dos Fluxos} -Esta seção lista e descreve todos os fluxos que compõem o caso de uso. -\begin{lista} - \item \textbf{Criar \emph{Post}}: Este fluxo descreve como se dá a criação de um \emph{Post} pela Instituição; - \item \textbf{Editar \emph{Post}}: Este fluxo descreve como se dá a alteração de um \emph{Post} pela Instituição. -\end{lista} - -\subsection*{Detalhamento dos Fluxos} -\begin{lista} - \item \textbf{Criar \emph{Post}}: Este fluxo especifica a ação de criar um \emph{post} vinculado a uma Instituição. A Instituição fornece dados ao cliente o qual, junto ao sistema, cria um \emph{post} vinculado a Instituição que está usando o Sistema no momento. - \begin{itemize} - \item \textbf{Atores}: Instituição, Cliente; - \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema; - \item \textbf{Pós-Condições}: \emph{Post} cadastrado; - \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para criação de \emph{posts}. - \end{itemize} - - \textbf{Fluxo Básico} - \begin{enumerate} - \item A Instituição decide criar um novo \emph{post}; - \item A Instituição navega à página de criação de Novo \emph{Post}; - \item O Cliente solicita os dados do Post: Texto da URL, Título, Subtítulo, Conteúdo (formato \emph{Markdown}), imagem do cabeçalho e se o \emph{post} será ou não publicado; - \item A Instituição informa os dados solicitados; - \item O Cliente envia os dados ao Sistema; - \item O Sistema valida os dados; - \item O Sistema registra o \emph{post} no SGBD; - \item O Sistema retorna ao Cliente os dados do \emph{post} criado; - \item O caso de uso se encerra. - \end{enumerate} - - \textbf{Fluxo Alternativo A} \\ - Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: - \begin{enumerate} - \item Uma mensagem de erro é exibida ao Usuário informando da falha. - \end{enumerate} - - \textbf{Fluxo Alternativo B} \\ - No Passo 6, caso exista algum erro de validação das entradas: - \begin{enumerate} - \item Todos os erros de validação encontrados são retornados ao Cliente; - \item O fluxo retorna ao passo 2. - \end{enumerate} - - - - \item \textbf{Editar \emph{Post}}: Este fluxo especifica a ação de editar um \emph{post} vinculado a uma Instituição que já existe. Após escolher qual \emph{post} será alterado, a Instituição fornece dados ao cliente o qual, junto ao sistema, altera o \emph{post} vinculado a Instituição com as novas informações. - \begin{itemize} - \item \textbf{Atores}: Instituição, Cliente; - \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema, \emph{Post} da Instituição cadastrado no Sistema; - \item \textbf{Pós-Condições}: \emph{Post} modificado; - \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para alteração de \emph{posts}. - \end{itemize} - - \textbf{Fluxo Básico} - \begin{enumerate} - \item A Instituição decide alterar um \emph{post}; - \item A Instituição navega a uma página com uma lista de todos os seus \emph{posts}; - \item A Instituição seleciona qual de seus \emph{posts} será alterado; - \item O Cliente solicita os dados do Post: Texto da URL, Título, Subtítulo, Conteúdo (formato \emph{Markdown}), imagem do cabeçalho e se o \emph{post} será ou não publicado; - \item A Instituição informa os dados solicitados; - \item O Cliente envia os dados ao Sistema; - \item O Sistema valida os dados; - \item O Sistema altera o \emph{post} no SGBD; - \item O Sistema retorna ao Cliente os dados do \emph{post} alterado; - \item O caso de uso se encerra. - \end{enumerate} - - \textbf{Fluxo Alternativo A} \\ - Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: - \begin{enumerate} - \item Uma mensagem de erro é exibida ao Usuário informando da falha. - \end{enumerate} - - \textbf{Fluxo Alternativo B} \\ - No Passo 7, caso exista algum erro de validação das entradas: - \begin{enumerate} - \item Todos os erros de validação encontrados são retornados ao Cliente; - \item O fluxo retorna ao passo 3. - \end{enumerate} -\end{lista} -\pagebreak - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Anexo B - Caso de Uso 03 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section*{Especificação do Caso de Uso 03 --- Acompanhamento das Doações} -\subsection*{Objetivo} -Este documento tem por objetivo descrever todos os fluxos envolvidos no Caso de Uso 03 - Acompanhamento das Doações. São listados e detalhados todos os atores, fluxos, requisitos funcionais e não-funcionais. - -\subsection*{Identificação dos Atores} -Esta seção lista e descreve todos os atores envolvidos nos fluxos que compõem o Caso de Uso 03 - Acompanhamento das Doações. -\begin{lista} - \item \textbf{Instituição}: Usuário cadastrado no sistema e que possua pelo menos 01 (uma) Instituição vinculada a ele; - \item \textbf{Gateway}: \emph{Gateway} de Pagamento selecionado pela Instituição; - \item \textbf{Cliente}: Interface através da qual o Usuário utiliza o Ajuda.Ai. -\end{lista} - -\subsection*{Identificação dos Fluxos} -Esta seção lista e descreve todos os fluxos que compõem o caso de uso. -\begin{lista} - \item \textbf{Listagem Mensal de Doações}: Este fluxo descreve como se dá a criação de uma listagem mensal de Doações recebidas pela Instituição; - \item \textbf{Dados de uma Doação}: Este fluxo descreve como se dá a exibição de dados sobre uma Doação em Particular. -\end{lista} - -\subsection*{Detalhamento dos Fluxos} -\begin{lista} - \item \textbf{Listagem Mensal de Doações}: Este fluxo especifica a ação de listar as doações recebidas por uma Instituição em um determinado mês de um determinado ano. A Instituição fornece dados ao cliente o qual, junto ao sistema, cria uma lista, geralmente tabular, das doações recebidas. - \begin{itemize} - \item \textbf{Atores}: Instituição, Cliente; - \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema; - \item \textbf{Pós-Condições}: Nenhuma; - \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para listagem das Doações feitas a uma Instituição. - \end{itemize} - - \textbf{Fluxo Básico} - \begin{enumerate} - \item A Instituição necessita de uma listagem das doações de um mês; - \item A Instituição navega a uma página para listagem de doações; - \item O Cliente solicita os seguintes dados: De qual Instituição deve ser a lista, Mês e Ano da listagem e um dos itens de uma lista de Estados das Doações: Todos, Pago, Pronto para Receber e Cancelado; - \item A Instituição informa os dados solicitados; - \item O Cliente envia os dados ao Sistema; - \item O Sistema valida os dados; - \item O Sistema retorna ao Cliente os dados da listagem requisitada; - \item O caso de uso se encerra. - \end{enumerate} - - \textbf{Fluxo Alternativo A} \\ - Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: - \begin{enumerate} - \item Uma mensagem de erro é exibida ao Usuário informando da falha. - \end{enumerate} - - \textbf{Fluxo Alternativo B} \\ - No Passo 6, caso exista algum erro de validação das entradas: - \begin{enumerate} - \item Todos os erros de validação encontrados são retornados ao Cliente; - \item O fluxo retorna ao passo 2. - \end{enumerate} - - - - \item \textbf{Dados de uma Doação}: Este fluxo especifica a ação de ver dados de uma única doação específica. Após escolher qual doação será exibida, a Instituição fornece os dados necessários ao cliente o qual, junto ao sistema, pega e exibe as informações requeridas. - \begin{itemize} - \item \textbf{Atores}: Instituição, Cliente; - \item \textbf{Pré-Condições}: Instituição cadastrada no Sistema, Instituição estar autenticada junto ao Sistema, Haverem Doações feitas a Instituição; - \item \textbf{Pós-Condições}: Nenhuma; - \item \textbf{Requisitos Funcionais}: O Sistema deve prover uma interface para expor dados de um pagamento. - \end{itemize} - - \textbf{Fluxo Básico} - \begin{enumerate} - \item A Instituição decide ver dados de uma doação; - \item A Instituição seleciona qual doação será exibida; - \item A Instituição navega a uma página para exibição das informações da doação; - \item O Cliente requisita ao Sistema os dados da doação; - \item O Sistema busca os dados da doação especificada; - \item O Sistema retorna ao Cliente os dados da doação; - \item O caso de uso se encerra. - \end{enumerate} - - \textbf{Fluxo Alternativo A} \\ - Em qualquer passo, caso exista algum erro de comunicação entre Cliente e Sistema: - \begin{enumerate} - \item Uma mensagem de erro é exibida ao Usuário informando da falha. - \end{enumerate} - - \textbf{Fluxo Alternativo B} \\ - No Passo 5, caso a doação esteja marcada como Anônima (\codigo{anonymous = true}): - \begin{enumerate} - \item Todas as informações de identificação do doador são retiradas do objeto (\codigo{payeeName} e \codigo{payeeEmail}); - \item O fluxo continua ao passo 6. - \end{enumerate} -\end{lista} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\input{pos-textual/anexos-api-rest} +\input{pos-textual/anexos-casos-de-uso} \end{anexosenv} \ No newline at end of file diff --git a/pre-textual/dedicatoria.tex b/pre-textual/dedicatoria.tex index 8e6c1a4..8b7184a 100644 --- a/pre-textual/dedicatoria.tex +++ b/pre-textual/dedicatoria.tex @@ -6,7 +6,7 @@ %% Alinhado a Direita \center \begin{flushright} - Dedico este trabalho a todos que acreditam que ele sairia. + Dedico este trabalho a todos que \textcolor{red}{acreditaram (2)} que ele sairia. \end{flushright} %% Descomente a linha seguir para deixar o texto centralizado verticalmente na página diff --git a/pre-textual/resumo-lingua-estrangeira.tex b/pre-textual/resumo-lingua-estrangeira.tex index b4e0d3b..ded5655 100644 --- a/pre-textual/resumo-lingua-estrangeira.tex +++ b/pre-textual/resumo-lingua-estrangeira.tex @@ -3,13 +3,13 @@ \begin{otherlanguage*}{english} % Língua do texto Social entrepreneurs in Brazil historically have had great difficulties in finding the necessary funding to exert to the fully extent the activities they need to and so frequently have utilized of volunteer work campaigns and donations of food or used objects. Although the cost reductions that volunteer work and these kinds of donations are undeniable so is the necessity of money for costs like electricity, water and medical supplies. Campaigns of financial collection of smaller organizations are usually discreet, such as asking for the change of a purchase as a small donation. -In order to solve these problems there are solutions such as seeking investors, microcredits with community banks, media campaigns seeking donations and, more recently with the growth of this genre in Brazil, crowdfunding. The later shows great potential for collection. Crowdfunding campaigns make use of social networks and communities over the Internet to acquire a huge number of small donations which end up in significant sums. +In order to solve these problems there are solutions such as seeking investors, microcredits with community banks, media campaigns seeking donations and, more recently with the growth of this genre in Brazil, crowdfunding. The later \textcolor{red}{one (11)} shows great potential for collection. Crowdfunding campaigns make use of social networks and communities over the Internet to acquire a huge number of small donations which end up in significant sums. This work presents a solution in the form an online tool for social crowdfunding called Ajuda.Ai inspired in part by the Kiva \cite{flannery2007kiva} service, with an open source code and available for small and medium organizations with minimal cost to enable a virtual, secure, direct and comfortable channel to reach donors and for donors to make giving to these organizations as easy as an online purchase. \vspace{\onelineskip} \noindent -\textbf{Key-words}: crowdfunding. social impact. social entrepreneurship. +\textbf{Key-words}: \textcolor{red}{online payments. rest api. (9)} crowdfunding. social impact. social entrepreneurship. \end{otherlanguage*} \end{resumo} diff --git a/pre-textual/resumo.tex b/pre-textual/resumo.tex index ec90278..a36e3ce 100644 --- a/pre-textual/resumo.tex +++ b/pre-textual/resumo.tex @@ -2,11 +2,11 @@ \begin{resumo} Empreendimentos sociais no Brasil historicamente têm bastante dificuldade em buscar o financiamento necessário para exercer de forma plena as atividades que necessitam e frequentemente se utilizam de campanhas de trabalho voluntário e doações de alimentos ou objetos usados. Apesar da redução de custos que trabalho voluntário e doações trazem é inegável a necessidade de dinheiro para custos como eletricidade, água e medicamentos. Campanhas de arrecadação financeira de organizações menores são comumente discretas, como pedir o troco de uma compra como uma pequena doação. -Para resolver esses problemas há soluções como buscar investidores, micro crédito junto a bancos comunitários, campanhas em mídias por doações e, mais recentemente e com o crescimento dessa modalidade no Brasil, \emph{crowdfunding} (financiamento coletivo). Esta última demonstra bastante potencial às instituições graças ao crescimento do acesso a Internet, baixa relação custo/benefício e potencial de arrecadação. Campanhas de \emph{crowdfunding} se utilizam de redes sociais e comunidades na Internet para arrecadar uma grande quantidade de pequenas doações as quais resultam em somas bastante significativas. +Para resolver esses problemas há soluções como buscar investidores, micro crédito junto a bancos comunitários, campanhas em mídias por doações e, mais recentemente e com o crescimento dessa modalidade no Brasil, \emph{crowdfunding} (financiamento coletivo). Esta última demonstra bastante potencial às instituições graças ao crescimento do acesso a Internet, \textcolor{red}{alta (8)} relação custo/benefício e potencial de arrecadação. Campanhas de \emph{crowdfunding} se utilizam de redes sociais e comunidades na Internet para arrecadar uma grande quantidade de pequenas doações, as quais resultam em somas bastante significativas. -Este trabalho apresenta uma solução na forma de ferramenta online para \emph{crowdfunding} social chamada Ajuda.Ai inspirada em parte pelo serviço Kiva \cite{flannery2007kiva}, de código-fonte aberto e disponível para pequenas e médias organizações com custo mínimo a fim que elas possam ter um canal virtual, seguro, direto e cômodo para chegar a doadores e para os doadores para tornar o ato de doar a essas organizações tão simples quanto uma compra online. +Este trabalho apresenta uma solução na forma de ferramenta online para \emph{crowdfunding} social chamada Ajuda.Ai, inspirada em parte pelo serviço Kiva \cite{flannery2007kiva}, de código-fonte aberto e disponível para pequenas e médias organizações com custo mínimo, a fim que elas possam ter um canal virtual, seguro, direto e cômodo para chegar a doadores e para os doadores, para tornar o ato de doar a essas organizações tão simples quanto uma compra online. \vspace{\onelineskip} \noindent -\textbf{Palavras-chaves}: financiamento coletivo. impacto social. empreendimento social. +\textbf{Palavras-chaves}: \textcolor{red}{pagamentos online. api rest. (9)} financiamento coletivo. impacto social. empreendimento social. \end{resumo} \ No newline at end of file