Este projeto tem como objetivo o desenvolvimento de um microserviço e cumprimento de requisitos não funcionais, como facilidade de escalabilidade da aplicação, resiliência e baixo custo operacional do ambiente em produção, através de infraestrutura como código para provisionamento da infraestrutura de cloud (AWS). O projeto tem arquiterura cliente - servidor. A camada de apresentação que consome a API está disponível neste repositório: https://github.com/andre-diass/store-admin
- Sobre
- Instalação
- Estrutura do Projeto
- Layout
- Arquitetura do Back-end
- Contexto da solução
- Requisitos Funcionais
- Requisitos Não Funcionais
- Diagrama de Caso de Uso
- Plugins do Serverless
- Diagrama de Atividade
- Pipeline de Deploy via GitHub Actions
- Deploy
- Desenvolvido com
- Autores
- Agradecimentos
Esta documentação está orientada tanto para informações, que descrevem as funcionalidades do projeto, quanto para compreensão, com o intuito de explicar as ferramentas e modelos utilizados em forma de explicação discursiva e visual. Esta documentação não abrange guias práticos ou tutoriais
Essas instruções permitirão que você tenha uma cópia do projeto em execução em sua máquina local para fins de desenvolvimento e teste.
- Clone the repository
git clone https://github.com/andre-diass/store-backend.git
- Install dependencies
cd <project_path>
npm install
- Build and run the project
npm run dev
A estrutura deste projeto está descrita abaixo:
Nome | Descrição |
---|---|
.build | Contém a distribuição (ou saída) do seu build TypeScript. |
.github | Contém o arquivo de fluxo de trabalho do GitHub Actions. |
.envs | Contém as variáveis de ambiente. |
node_modules | Contém todas as dependências npm. |
src | Contém o código-fonte que será compilado para o diretório de build. |
src/database | Configuração da aplicação para o banco de dados. Uma fábrica para conexão com um cluster Mongo. |
src/functions | Representa o controller. Cada função é um Lambda. |
src/models | Entidades do projeto. Os modelos definem esquemas que serão usados para armazenar e recuperar dados do banco de dados da aplicação. |
src/repositories | Contém classes relacionadas à persistência de dados. |
src/services | Contém classes relacionadas à lógica de negócios. |
src/utils | Funções e classes utilitárias usadas em toda a aplicação. |
src/validations | Esquemas usados para validações assíncronas de objetos de transferência de dados. |
package.json | Contém dependências npm, bem como scripts de build. |
tsconfig.json | Configurações para compilar apenas código-fonte escrito em TypeScript. |
tslint.json | Configurações para a verificação de estilo de código com o TSLint. |
O layout dessa aplicação(front-end), está disponível em: Figma
O ecossistema Amazônia tem uma venda anual de $404,4 bilhões. Englobando setor da agricultura e florestas. A aplicação em questão tem como objetivo integrar produtos desse ecossistema ao mercado exterior, através de uma plataforma de marketplace simples, direta e confiavél.
- CRUD de produtos;
- CRUD de categorias;
- Gestão de pedidos;
- Autenticação de usuários;
- Autorização baseada em papéis;
- Geração de token de acesso (JWT);
- Integração com serviços de pagamento;
- Monitoramento e logs;
- Integração com provedores de armazenamento em nuvem;
- Implementação de testes automatizados;
- Documentação abrangente.
- Elasticidade: A arquitetura serverless permite escalabilidade automática, garantindo que o sistema possa lidar com variações significativas na carga de trabalho.
- Resiliência: O uso de AWS Lambda proporciona alta resiliência, permitindo que as funções sejam distribuídas geograficamente e continuem funcionando mesmo em face de falhas em regiões específicas.
- Baixo Custo Operacional: A abordagem serverless reduz os custos operacionais, pois os recursos são alocados dinamicamente conforme a demanda, evitando custos fixos associados a servidores tradicionais.
- Tempo de Resposta Rápido: O modelo serverless, especialmente com o AWS Lambda, oferece tempos de resposta rápidos, uma vez que as funções são executadas em milissegundos.
- Facilidade de Manutenção: O Serverless Framework simplifica a gestão da infraestrutura, tornando a manutenção mais fácil e permitindo uma concentração maior no desenvolvimento de recursos.
- Segurança: A AWS fornece recursos robustos de segurança, e o Serverless Framework adota práticas seguras por padrão, garantindo a proteção dos dados e transações.
- Integração com Outros Serviços AWS: A integração nativa com outros serviços da AWS é simplificada, proporcionando uma ampla gama de opções para armazenamento, banco de dados, mensageria, entre outros.
- Monitoramento e Logs: A AWS oferece ferramentas robustas para monitoramento e logging, permitindo uma visibilidade eficaz do desempenho e da saúde do sistema.
- Compliance: A infraestrutura da AWS e as práticas do Serverless Framework facilitam a conformidade com regulamentações e padrões de segurança.
Este projeto utiliza os seguintes plugins do Serverless Framework para otimizar e facilitar o desenvolvimento:
- serverless-plugin-typescript: Facilita o uso do TypeScript no Serverless, permitindo a compilação e execução de funções escritas nessa linguagem.
- serverless-offline: Permite a execução de funções serverless localmente, facilitando o desenvolvimento e teste antes da implantação.
- serverless-dotenv-plugin: Simplifica o gerenciamento de variáveis de ambiente, permitindo o uso de arquivos .env no desenvolvimento local e em ambientes de implantação.
- serverless-s3-local: Fornece uma implementação local do Amazon S3, facilitando o desenvolvimento e teste de funcionalidades que envolvem armazenamento de objetos.
Este projeto incorpora um pipeline automatizado utilizando o GitHub Actions para facilitar o processo de implantação contínua. O pipeline é acionado automaticamente em commits nas branches "development" e "main".
- Checkout: Clona o repositório para a máquina virtual de execução.
- Configuração de Credenciais AWS: Configura as credenciais da AWS para permitir o acesso durante o deploy.
- Instalação de Dependências: Utiliza o npm para instalar as dependências do projeto.
- Definição da Variável STAGE: Determina o ambiente de implantação (dev ou prod) com base na branch de origem.
- Deploy da Aplicação Serverless para a AWS: Utiliza o Serverless Framework para implantar a aplicação na AWS, indicando o ambiente (dev ou prod).
O deploy é realizado através do push para um dos branches development ou main.
- Serverless Framework - Framework para desenvolvimento serverless
- AWS - Plataforma de computação em nuvem
- Node.js - Ambiente de servidor
- TypeScript - Superset para JavaScript com tipagem estática
- MongoDB - Banco de Dados NoSQL
- AWS Lambda - Serviço de computação serverless da AWS
- JSON Web Token (JWT) - Padrão para autenticação web
- @andredias - Idea & Development