Este repositório engloba os serviços referente ao sistema de ecommerce, sendo estes:
- Autenticação
- Carrinho de compras
- Pagamento
- Produtos: estoque e reserva
Também há o serviço de descoberta de serviços e o gateway.
- 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
O Gateway possui uma rota base chamada ecommerce, portanto, os serviços devem ser acessado através de:
- Autenticação: http://localhost:7071/ecommerce/authentication-api
- Carrinho: http://localhost:7071/ecommerce/shopping-cart
- Pagamento: http://localhost:7071/ecommerce/payment
- Produto: http://localhost:7071/ecommerce/inventory
Após os endereços mencionados basta adicionar o path desejado.
Considerando que a aplicação está sendo executada via container, as documentação podem ser acessadas conforme abaixo.
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.
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.
- EUREKA_SERVER: quando o gateway estiver em container usar http://server-discovery:7070/eureka, quando localhost http://localhost:7070/eureka
- As chaves PRODUCT_ADDRESS, PAYMENT_ADDRESS e CART_ADDRESS referem-se ao serviços conectados no gateway. Caso não irá
desenvolver, não precisa alterar nada. Caso tenha algum serviço rodando local, basta usar
http://host.docker.internal:${PORTA_APLICAÇÃO_LOCAL}.
- Exemplo: PRODUCT_ADDRESS=http://host.docker.internal:7072, significa que todos estão executando em container e o serviço de produtos está rodando localhost.
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.
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.
- 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.
- Cadastre produtos. Os métodos podem ser visualizados no Swagger de Produto.