Skip to content

Repository files navigation

Tech Challenge 5 - Criação de um Ecommerce

Este repositório engloba os serviços referente ao sistema de ecommerce, sendo estes:

  1. Autenticação
  2. Carrinho de compras
  3. Pagamento
  4. Produtos: estoque e reserva

Também há o serviço de descoberta de serviços e o gateway.

Tecnologias

  • Spring Boot para a estrutura do serviço
  • Spring Data para manipulação de dados
  • Spring Cloud para comunicação entre os serviços
  • PostgreSQL e MongoDB para persistência
  • Spring Security

Desenvolvedores

Acesso aos serviços

O Gateway possui uma rota base chamada ecommerce, portanto, os serviços devem ser acessado através de:

  1. Autenticação: http://localhost:7071/ecommerce/authentication-api
  2. Carrinho: http://localhost:7071/ecommerce/shopping-cart
  3. Pagamento: http://localhost:7071/ecommerce/payment
  4. Produto: http://localhost:7071/ecommerce/inventory

Após os endereços mencionados basta adicionar o path desejado.

Documentação

Considerando que a aplicação está sendo executada via container, as documentação podem ser acessadas conforme abaixo.

  1. Autenticação
  2. Carrinho
  3. Pagamento
  4. Produto

Caso a aplicação esteja rodando local, o swagger está disponível em http://localhost: ${server.port}/doc/${valor_customizado_serviço}, para este caso, sugiro verificar no repositório do serviço que deseja.

O docker também gerará a interface web para Postgres e Mongo, visto que as aplicações de pagamento e autenticação, e, carrinho e produto, os utilizam respectivamente.

Caso deseja acessa as interfaces, basta clicar nos links abaixo.

  • Mongo
    • Usuário e senha definido nas chaves ME_CONFIG_BASICAUTH_USERNAME e ME_CONFIG_BASICAUTH_PASSWORD do arquivo .env respectivamente.
  • Postegres
    • Usuário e senha definido nas chaves PGADMIN_DEFAULT_EMAIL e PGADMIN_DEFAULT_PASSWORD do arquivo .env respectivamente.

Como executar

Clone o repositório.

git clone --recursive https://github.com/DFaccio/ecommerce-system.git

Crie um arquivo .env no diretório principal conforme abaixo.

# MongoDB
MONGO_INITDB_ROOT_USERNAME=ecommerce_admin
MONGO_INITDB_ROOT_PASSWORD=adm!n

# MongoDB Express
ME_CONFIG_BASICAUTH_USERNAME=admin
ME_CONFIG_BASICAUTH_PASSWORD=!nterf@ce#

# PostgreSQL
POSTGRES_DATABASE_USERNAME=postgres
POSTGRES_DATABASE_PASSWORD=root
POSTGRES_DATABASE_HOST=postgres

#PgAdmin
PGADMIN_DEFAULT_EMAIL=ecommerce@gmail.com
PGADMIN_DEFAULT_PASSWORD=serv1ce

# Gateway
# Quando container http://server-discovery:7070/eureka
# Quando localhost http://localhost:7070/eureka
EUREKA_SERVER=http://server-discovery:7070/eureka

PRODUCT_ADDRESS=lb://inventory
PAYMENT_ADDRESS=lb://payment
CART_ADDRESS=lb://cart-service
USER_ADDRESS=lb://ecommerce-user

# Caso o serviço de autenticação esteja rodando local, o valor é localhost:7073. Quando docker, user-service:7073.
# gateway docker e ele local: host.docker.internal:7073
JWT_SERVER=user-service:7073

# API
PROFILE=prod

Após criação do arquivo, execute o comando abaixo:

docker compose up

Acesse http://localhost:7070/ para verificar todos os serviços registrados. Apesar dos demais serviços aparecerem, quando em container, apenas o Gateway permitirá requisições.

Dúvidas sobre os campos

Obs.: Os serviços não ficam expostos quando executado via container, ou seja, todas as operações são obrigatoriamente executadas via gateway.

  • JWT_SERVER: devido o sistema de autenticação e autorização, é necessário informar o endereço que está a chave pública que gerou o token JWT. Neste caso as possibilidades são conforme mecionadas no arquivo:
    • ambos local: localhost:7073
    • gateway container e serviço local: host.docker.internal:7073
    • ambos container: user-service:7073

Os demais campos referem-se a configuração de banco. Para mais informações sobre as chaves utilizadas no Gateway, favor visitar o README.md do projeto.

Desenvolvimento

Os projetos possuem informações de como configurar quando rodando sozinhos ou parcialmente em container. Este também contém para algumas variáveis.

O ponto de atenção principal seria se deseja rodar tudo local ou parcialmente em docker, o que faria mudar algumas variáveis para o Gateway.

Nesta situação, basta alterar o endereço do serviço desejado conforme abaixo.

http://host.docker.internal:${server.port}

Exemplo: considerando que irá desenvolver no projeto de produtos, então ficaria:

http://host.docker.internal:7072

Obs.: server.port é uma chave que pode ser encontrada no application.properties de cada serviço.

Funcionamento

  1. Crie um usuário, seja ele básico ou administrador. Os métodos podem ser visto no Swagger de Autenticação.
    • No serviços, alguns endpoints só poderão ser acessados com usuário administrador. Caso receba retorno 403, verifique o tipo de usuário.
    • Por default, a aplicação gera um usuário administrador como usuário admin e senha 123.
  2. Cadastre produtos. Os métodos podem ser visualizados no Swagger de Produto.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors