Skip to content

Repositório para o Tech Challenge Fase 5 - Grupo 30

Notifications You must be signed in to change notification settings

rcsim/tech-challenge-fase5

Repository files navigation

Tech-challenge-fase5

Repositório para o Tech Challenge Fase 5 - Grupo 30

Este repositório contém o código-fonte e a documentação para o Tech Challenge - Fase 5, desenvolvido pelo Grupo 30.

O projeto consiste em uma sistema de e-commerce utilizando uma arquitetura com microserviços. Além do Spring Framework, Spring Boot e Sping Data, também utilizamos neste projeto as bibliotecas Spring Security e Spring Gateway.

1- Relatório Técnico

Tecnologias e ferramentas utilizadas

  • Linguagem de programação:

    • Java 17
  • Framework:

    • Spring Boot 3.2.2
  • Bibliotecas:

    • Spring Web
    • Spring Security
    • Spring Gateway
    • OpenAPI
    • Lombok
  • Banco de dados:

    • PostgreSQL
  • Outras ferramentas:

    • Docker

Configurações da solução

Arquitetura

O sistema opera de forma que o usuário deve efetuar login para obter o token JWT, necessário para acessar as demais rotas através do gateway. Dentro do gateway, é realizada uma validação para determinar a validade do token. Caso o token seja inválido, o sistema retornará um erro 401 (Unauthorized). Se o token for válido, o usuário será redirecionado para a próxima rota.

image

image

Banco de Dados

Utilizamos um banco de dados para cada microserviço e configuramos dois profiles, um profile para trabalharmos com H2 e outro para trabalharmos com o PostgreSQL:

Configuração de teste utilizando o H2:

https://github.com/rcsim/tech-challenge-fase5/blob/main/ms-items/src/main/resources/application-test.properties

https://github.com/rcsim/tech-challenge-fase5/blob/main/ms-shopping-cart/src/main/resources/application-test.properties

https://github.com/rcsim/tech-challenge-fase5/blob/main/ms-user-manager/src/main/resources/application-test.properties

https://github.com/rcsim/tech-challenge-fase5/blob/main/payment/src/main/resources/application-test.properties

Configuração de produção utilizando o PostgreSQL:

https://github.com/rcsim/tech-challenge-fase5/blob/main/ms-items/src/main/resources/application-dev.properties

https://github.com/rcsim/tech-challenge-fase5/blob/main/ms-shopping-cart/src/main/resources/application-dev.properties

https://github.com/rcsim/tech-challenge-fase5/blob/main/ms-user-manager/src/main/resources/application-dev.properties

https://github.com/rcsim/tech-challenge-fase5/blob/main/payment/src/main/resources/application-dev.properties

Container

Criamos um container para cada aplicação e outro para cada banco de dados e uma rede no modo bridge para ter acesso ao containers via localhost:

version: "3"
services:
#Gateway Service
gateway:
build:
context: ./gateway
dockerfile: Dockerfile
ports:
- "8080:8080"
networks:
- my-networks
# Payment Service
payment-db:
image: postgres
environment:
- POSTGRES_USER=compose-postgres
- POSTGRES_PASSWORD=compose-postgres
- PGPORT=5435
ports:
- "5435:5435"
networks:
- my-networks
ms-payment:
depends_on:
- payment-db
build:
context: ./payment
dockerfile: Dockerfile
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://payment-db:5435/postgres
- SPRING_DATASOURCE_USERNAME=compose-postgres
- SPRING_DATASOURCE_PASSWORD=compose-postgres
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
ports:
- "8084:8084"
networks:
- my-networks
# Items Service
item-db:
image: postgres
environment:
- POSTGRES_USER=compose-postgres
- POSTGRES_PASSWORD=compose-postgres
- PGPORT=5433
ports:
- "5433:5433"
networks:
- my-networks
ms-item:
depends_on:
- item-db
build:
context: ./ms-items
dockerfile: Dockerfile
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://item-db:5433/postgres
- SPRING_DATASOURCE_USERNAME=compose-postgres
- SPRING_DATASOURCE_PASSWORD=compose-postgres
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
ports:
- "8082:8082"
networks:
- my-networks
# Shopping Cart Service
shopping-cart-db:
image: postgres
environment:
- POSTGRES_USER=compose-postgres
- POSTGRES_PASSWORD=compose-postgres
- PGPORT=5434
ports:
- "5434:5434"
networks:
- my-networks
ms-shopping-cart:
depends_on:
- shopping-cart-db
build:
context: ./ms-shopping-cart
dockerfile: Dockerfile
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://shopping-cart-db:5434/postgres
- SPRING_DATASOURCE_USERNAME=compose-postgres
- SPRING_DATASOURCE_PASSWORD=compose-postgres
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
ports:
- "8083:8083"
networks:
- my-networks
# Users Service
user-db:
image: postgres
environment:
- POSTGRES_USER=compose-postgres
- POSTGRES_PASSWORD=compose-postgres
- PGPORT=5432
ports:
- "5432:5432"
networks:
- my-networks
ms-user-manager:
depends_on:
- user-db
build:
context: ./ms-user-manager
dockerfile: Dockerfile
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://user-db:5432/postgres
- SPRING_DATASOURCE_USERNAME=compose-postgres
- SPRING_DATASOURCE_PASSWORD=compose-postgres
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
ports:
- "8081:8081"
networks:
- my-networks
networks:
my-networks:
driver: bridge

Também adicionamos o arquivo Dockerfile que gerencia o processo de build da aplicação através do Maven e JDK, já inicializando a aplicação:

FROM maven AS MAVEN_BUILD
COPY ./ ./
RUN mvn clean package
FROM openjdk:17-oracle AS builder
COPY --from=MAVEN_BUILD target/*.jar application.jar
RUN java -Djarmode=layertools -jar application.jar extract
FROM openjdk:17-oracle
EXPOSE 8084
COPY --from=builder dependencies/ ./
COPY --from=builder snapshot-dependencies/ ./
COPY --from=builder spring-boot-loader/ ./
COPY --from=builder application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]

Para criação dos container, compilar e rodar a applicação é necessário apenas o comando:

docker-compose up -d

image

Documentação das APIS

Adicionamos a geração automática da documentação através da biblioteca SpringDoc OpenAPI, a documentação pode ser acessada enquanto a aplicação estiver rodando em http://localhost:8080/swagger-ui/index.html#/:

Microserviço Users http://localhost:8081/swagger-ui/index.html#/ image

Microserviço Items http://localhost:8082/swagger-ui/index.html#/ image

Microserviço Shopping-Carts http://localhost:8083/swagger-ui/index.html#/ image

Microserviço Payment http://localhost:8084/swagger-ui/index.html#/ image

Arquivo POSTMAN

Disponibilizamos um de arquivo JSON com todas as requisições Postman para testar a API, os arquivos estão disponíveis nos seguintes links:

https://github.com/rcsim/tech-challenge-fase5/blob/main/Tech-Challenge-5.postman_collection.json

Conclusões

O projeto foi concluído com êxito, atendendo plenamente aos requisitos estabelecidos no desafio. As tecnologias e ferramentas adotadas demonstraram ser adequadas para o propósito do sistema, contribuindo para um desenvolvimento eficiente e robusto. As principais dificuldades encontradas estão relacionadas a utilização, configuração e compreensão, do Spring Security e Spring Gateway. A complexidade dessas tecnologias exigiu um esforço adicional por parte da equipe para garantir uma implementação eficaz e sem falhas.

About

Repositório para o Tech Challenge Fase 5 - Grupo 30

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •