https://www.youtube.com/watch?v=qP13OdOkPdA
- Sobre o Projeto
- Disposição dos Microsserviços
- Executando o Projeto
- Gerenciamento de Usuários e Autenticação (Auth API)
- Gerenciamento de Postagens (Posts API)
- Front-End
- Contribuidores
- Orientadores
- Licença
O projeto EngSoft é uma aplicação desenvolvida como parte da disciplina de Engenharia de Software I do curso de Análise e Desenvolvimento de Sistemas pelo Instituto Federal do Rio Grande do Sul. O objetivo principal deste trabalho é demonstrar a criação de uma aplicação distribuída utilizando a arquitetura de microsserviços, containerizada com Docker.
A aplicação desenvolvida é um blog voltado para postagens sobre assuntos relacionados à Tecnologia da Informação. Para isso, o blog foi dividido em três microsserviços, cada um responsável por uma parte específica da aplicação:
-
Gerenciamento de Usuários e Autenticação: Este microsserviço, desenvolvido em Node.js com um banco de dados PostgreSQL, é responsável pelo cadastro e autenticação dos usuários, bem como pela validação das sessões.
-
Gerenciamento de Postagens: Utilizando Java e MySQL, este microsserviço cuida da criação, edição, exclusão e categorização das postagens no blog.
-
Front-End: A interface do usuário foi construída com Next.js, proporcionando uma experiência de usuário moderna e eficiente.
A abordagem de microsserviços permite uma escalabilidade e manutenção mais fácil da aplicação, facilitando o desenvolvimento e a integração contínua. Ao utilizar Docker para containerização, asseguramos um ambiente de desenvolvimento e produção consistente e eficiente.
O desenvolvimento deste projeto envolveu a utilização de diversas tecnologias e práticas modernas, refletindo as demandas atuais do mercado de Tecnologia da Informação. Esta documentação visa detalhar a implementação, arquitetura, e as decisões técnicas que guiaram o desenvolvimento do EngSoft, proporcionando uma visão abrangente sobre como construir uma aplicação robusta e escalável utilizando microsserviços.
Clone o repositório usando o seguinte comando:
git clone https://github.com/passosleo/blog-engsoft.git
Após clonar o repositório, navegue até o diretório do projeto:
cd blog-engsoft
Execute o seguinte comando para criar e iniciar os containers do Docker Compose:
docker-compose up -d
Verifique se os containers foram criados e estão em execução:
docker ps
Após iniciar os containers, a aplicação estará disponível no seguinte endereço:
http://localhost:8000
Microsserviço responsável pelo cadastro e autenticação de usuários, bem como pela validação das sessões utilizando o padrão JWT.
- TypeScript: Superset de JavaScript que adiciona tipagem estática ao código.
- Node.js: Plataforma de desenvolvimento de aplicações em JavaScript.
- Express: Framework web para Node.js.
- PostgreSQL: Banco de dados relacional.
- Prisma: ORM para Node.js.
- JSON Web Token (JWT): Padrão aberto que define uma maneira compacta e autocontida para transmitir informações entre as partes como um objeto JSON.
- Swagger: Framework para documentação de APIs REST.
- Docker: Plataforma para desenvolvimento, envio e execução de aplicações em contêineres.
- Deve possuir um banco de dados PostgreSQL para armazenar os dados dos usuários.
- Deve permitir o cadastro de usuários com nome, e-mail e senha.
- Deve permitir a autenticação de usuários.
- Deve permitir a validação de sessões de usuários autenticados.
- Deve possuir uma rota para obter os dados de um usuário autenticado.
- Deve armazenar as senhas dos usuários de forma segura.
- Deve possuir uma API REST documentada com Swagger.
- Não deve permitir o acesso a rotas protegidas sem autenticação.
- Não deve permitir o cadastro de usuários com e-mails duplicados.
O modelo de dados do microsserviço de gerenciamento de usuários e autenticação é composto por uma única entidade: User
.
A documentação foi gerada utilizando o Swagger. Para acessar, basta iniciar o microsserviço acessar a rota /api/v1/docs
.
Microsserviço responsável pelo cadastro e gerenciamento de postagens no blog, incluindo a categorização das postagens.
- Java: Linguagem de programação de propósito geral.
- Spring Boot: Framework para criação de aplicações Java.
- MySQL: Banco de dados relacional.
- Flyway: Ferramenta para controle de versão de banco de dados.
- Hibernate: ORM para Java.
- Swagger: Framework para documentação de APIs REST.
- Docker: Plataforma para desenvolvimento, envio e execução de aplicações em contêineres.
- Cada postagem deve possuir um título, conteúdo (incluindo HTML), autor, categoria e data de criação.
- Deve fornecer rotas para criar, editar, excluir e listar postagens.
- Deve permitir visitantes visualizarem as postagens públicas.
- Deve permitir a categorização das postagens.
- Deve permitir a paginação e busca de postagens por categoria.
- Deve mostrar a postagem como editada caso a data de edição seja posterior à data de criação.
- Deve possuir uma API REST documentada com Swagger.
- Não deve permitir o acesso a rotas protegidas sem autenticação.
O microsserviço de gerenciamento de postagens possui as seguintes permissões para usuários autenticados e visitantes:
Ações | usuário sim |
usuário não |
visitante sim |
visitante não |
---|---|---|---|---|
visualizar as postagens públicas | X | X | ||
visualizar postagens privadas | X | X | ||
criar uma nova postagem | X | X | ||
editar postagens próprias | X | X | ||
editar postagens de terceiros | X | X | ||
deletar postagens próprias | X | X | ||
deletar postagens de terceiros | X | X | ||
filtrar as postagens por categoria | X | X |
O modelo de dados do microsserviço de gerenciamento de postagens é composto por duas entidades: Post
e Category
.
A documentação foi gerada utilizando o Swagger. Para acessar, basta iniciar o microsserviço acessar a rota /swagger-ui/index.html
.
Aplicação front-end desenvolvida com Next.js para proporcionar uma experiência de usuário moderna e eficiente.
- TypeScript: Superset de JavaScript que adiciona tipagem estática ao código.
- React: Biblioteca JavaScript para construção de interfaces de usuário.
- Next.js: Framework para criação de aplicações React.
- Tailwind CSS: Framework CSS para estilização de componentes.
- shadcn/ui: Biblioteca de componentes React.
- React Hook Form: Biblioteca para gerenciamento de formulários em React.
- Zustand: Biblioteca para gerenciamento de estado global em React.
- Deve permitir visitantes visualizarem as postagens públicas.
- Deve permitir usuários autenticados visualizarem postagens privadas.
- Deve permitir o cadastro de novos usuários.
- Deve permitir a autenticação de usuários.
- Deve permitir que usuários autenticados criem, editem e excluam postagens.
- Deve permitir a filtragem de postagens por categoria.
- Deve possuir uma interface responsiva e moderna.
- Deve possuir uma navegação intuitiva e eficiente.
- Deve permitir a paginação das postagens.
Distribuído sob a licença MIT. Veja LICENSE
para mais informações.