Skip to content

DFaccio/ecommerce-system

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

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •