Para fins de demonstração, foi realizado o deploy da API em uma instância na oracle cloud. Foi utilizado o docker compose, nginx para proxy reverso e Let's Encrypt para a configuração do certificado digital e habilitação de HTTPS. No link abaixo, é possível utilizar o Swagger para testar a API:
Para realizar testes, utilize as credenciais abaixo:
- Usuário Admin:
- Usuário: admin
- Senha: 12345678
Abaixo está um fluxo básico de uso da API que demonstra sua principal funcionalidade:
- Autenticação:
Relize o login para obter um token JWT, que será usado para autenticar todas as requisições protegidas. - Criação de categoria e warehouse:
Antes de criar um produto é necessário criar uma categoria e warehouse, pois o produto precisa estar associado a essas entidades. - Criação de produto:
Com a categoria e warehouse criados, é possível criar um novo produto, incluindo informações como code, brand, estoque disponível em um ou mais warehouse
Todos os detalhes de cada endpoint, incluindo corpo da requisição e resposta estão disponíveis na documentação do Swagger.
Para visualizar a documentação interativa da API, você pode usar o Swagger. O Swagger fornece uma interface gráfica onde você pode explorar e testar as endpoints da API.
Após iniciar os serviços, a documentação do Swagger estará disponível em:
#Local
http://localhost:8080/swagger-ui/index.html
#Online
https://stocktrackapi.nivaldoandrade.dev.br/swagger-ui/index.html
usuário: admin
password: 12345678
Navegue até este URL no seu navegador para acessar a interface do Swagger, onde você poderá visualizar e interagir com a documentação da API.
Clone o repositório para o seu ambiente local:
git clone https://github.com/nivaldoandrade/stocktrack-spring
Edite as variáveis de ambiente no arquivo localizado em src/main/resources/application-dev.properties. Para mais informações sobre as variáveis de ambiente de desenvolvimento, consulte a seção: Configuração do Arquivo application-dev.properties
- Banco de Dados Dockerizado: Não é necessário preencher as variáveis
spring.datasource.url
,spring.datasource.username
espring.datasource.password
, pois as configurações serão automaticamente gerenciadas pelo arquivodocker-compose-dev.yml
na raiz do projeto; - Ativação do Docker Compose: Para utilizar o banco de dados com o Docker, defina a variável
spring.docker.compose.file
apontando para o caminho do arquivodocker-compose-dev.yml
; - Sincronização de Variáveis: Se alterar o valor da variável
POSTGRES_DB
no arquivodocker-compose-dev.yml
, lembre-se de atualizar a variávelspring.flyway.placeholders.db_name
no arquivoapplication-dev.properties
com o mesmo valor.
Você pode iniciar a aplicação de duas formas:
- Executando a classe principal
StockTrackApplication
(src/main/java/StockTrackApplication.java) diretamente na sua IDE preferida. - Através do terminal, seguindo os passos abaixo:
Passo a passo:
Entre no diretório do projeto:
cd stocktrack-api
Inicie a aplicação utilizando o profile dev com o seguinte comando:
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
Clone o repositório para o seu ambiente local:
git clone https://github.com/nivaldoandrade/stocktrack-spring
Edite as variáveis de ambiente no arquivo localizado em src/main/resources/application-dev.properties. Para mais informações sobre as variáveis de ambiente de desenvolvimento, consulte a seção: Configuração do Arquivo application-dev.properties
- Banco de Dados Não Dockerizado: É necessário ter PostgreSQL instalado e executando. Crie um banco de dados manualmente e preencha as variáveis
spring.datasource.url
,spring.datasource.username
espring.datasource.password
; - Desativação do Docker Compose: Para utilizar o banco de dados sem Docker, defina a variável
spring.docker.compose.enabled
comofalse
; - Sincronização de Variáveis: Lembre-se de atualizar a variável
spring.flyway.placeholders.db_name
no arquivoapplication-dev.properties
com o mesmo nome do banco da dados especificado na variávelspring.datasource.url
.
Você pode iniciar a aplicação de duas formas:
- Executando a classe principal
StockTrackApplication
(src/main/java/StockTrackApplication.java) diretamente na sua IDE preferida. - Através do terminal, seguindo os passos abaixo:
Passo a passo:
Entre no diretório do projeto:
cd stocktrack-api
Inicie a aplicação utilizando o profile dev com o seguinte comando:
./mvnw spring-boot:run -Dspring-boot.run.profiles=dev
Clone o repositório para o seu ambiente local:
git clone https://github.com/nivaldoandrade/stocktrack-spring
Renomei o arquivo .env.example
para .env
dentro da pasta docker
e edite as variáveis de ambiente. Para mais informações sobre as variáveis de ambiente de desenvolvimento, consulte a seção: Configuração do Arquivo application-prod.properties
- Sincronização de Variáveis:
- Lembre-se de atualizar a variável
DB_PORT
no arquivo.env
com o mesmo número da porta do banco da dados configurada no arquivo docker composedocker-compose-full.yml
. Por padrão, o docker compose já utiliza a porta padrão do PostgreSQL. - O valor da variável
DB_LOCALHOST
no arquivo.env
tem que ser o mesmo nome do serviço do banco de dados configurado nodocker-compose-full
. Esse nome é usado para resolver o host do banco de dados dentro do container da aplicação.
- Lembre-se de atualizar a variável
Entre no diretório do projeto:
cd stocktrack-api
Inicie a aplicação utilizando o seguinte comando:
docker compose -f docker/docker-compose-full.yml up
Este arquivo contém as propriedades utilizadas no ambiente de desenvolvimento do projeto. Abaixo estão as descrições detalhadas de cada configuração:
-
spring.datasource.url
URL de conexão com o banco de dados PostgreSQL.
Formato:jdbc:postgresql://localhost:5432/stocktracktest
- Valor padrão:
- host: localhost
- porta: 5432
- nome do banco: stocktracktest
- Valor padrão:
-
spring.datasource.username
Nome do usuário do banco de dados.- Padrão:
root
- Padrão:
-
spring.datasource.password
Senha do banco de dados.- Padrão:
root
- Padrão:
-
spring.flyway.placeholders.db_name
Placeholder utilizado pelo Flyway para o nome do banco de dados.- Padrão:
stocktracktest
- Padrão:
-
spring.flyway.placeholders.db_timezone
Placeholder utilizado pelo Flyway para o timezone.- Padrão:
America/Sao_Paulo
- Padrão:
-
spring.docker.compose.enabled
Ativa ou desativa a utilização do docker compose. (Opcional). -
spring.docker.compose.file
Define o nome do arquivo docker compose. Ao definir essa variável, não é necessário ativar explicitamente a variávelspring.docker.compose.enabled
.
-
security.jwt.secret-key
Chave secreta usada para assinar tokens JWT.- Padrão:
93624b6ac3de8f0d54043c9d4c6827d2b921127dd58f2699610cf064e8659113
- Padrão:
-
security.jwt.expires-in
Tempo de expiração do token JWT em milissegundos.- Padrão:
86400000
(1 dia)
- Padrão:
-
aws.enabled
Ativa ou desativa a utilização de serviços da AWS.- Padrão:
false
- Padrão:
-
aws.credentials.accessKey
Access Key da AWS usada para autenticação. Deve ser configurada apenas se aws.enabled=true. -
aws.credentials.secretKey
Secret Key da AWS usada para autenticação. Deve ser configurada apenas se aws.enabled=true.
-
storage.s3.region
Região configurada para o bucket no S3. -
storage.s3.bucket-name
Nome do bucket usado para armazenar arquivos no S3.
Atenção: Ao utilizar S3 é necessário configurar as propriedades da AWS.
storage.local.upload-dir
Diretório local onde os arquivos serão armazenados no ambiente de desenvolvimento.- Variável de ambiente:
DEV_STORAGE_FOLDER_NAME
- Padrão:uploads
.
- Variável de ambiente:
storage.type
Define o tipo de armazenamento a ser utilizado.- Padrão:
local
- Opções válidas:- local: Para armazenamento local no servidor.
- s3: Para armazenamento na nuvem usando Amazon S3.
- Padrão:
Atenção: Qualquer valor diferente de local
ou s3
pode resultar em erro ou comportamento inesperado.
Ao utilizar s3
é necessário configurar as propriedades do S3.
Este arquivo contém as propriedades utilizadas no ambiente de produção do projeto. Abaixo estão as descrições detalhadas de cada configuração:
-
spring.datasource.url
URL de conexão com o banco de dados PostgreSQL.
Formato:jdbc:postgresql://${DB_HOSTNAME}:${DB_PORT}/${DB_NAME}
- Utiliza variáveis de ambiente:
DB_HOSTNAME
: Host do banco de dados.DB_PORT
: Porta do banco de dados.DB_NAME
: Nome do banco de dados.
- Utiliza variáveis de ambiente:
-
spring.datasource.username
Nome do usuário do banco de dados.- Variável de ambiente:
USERNAME_DB
.
- Variável de ambiente:
-
spring.datasource.password
Senha do banco de dados.- Variável de ambiente:
PASSWORD_DB
.
- Variável de ambiente:
-
spring.flyway.placeholders.db_name
Placeholder utilizado pelo Flyway para o nome do banco de dados.- Variável de ambiente:
DB_NAME
.
- Variável de ambiente:
-
spring.flyway.placeholders.db_timezone
Placeholder utilizado pelo Flyway para o timezone.- Variável de ambiente:
DB_TIMEZONE
. Padrão:America/Sao_Paulo
.
- Variável de ambiente:
-
security.jwt.secret-key
Chave secreta usada para assinar tokens JWT.- Variável de ambiente:
JWT_SECRET_KEY
.
- Variável de ambiente:
-
security.jwt.expires-in
Tempo de expiração do token JWT em milissegundos.- Variável de ambiente:
JWT_EXPIRES_IN
.
- Variável de ambiente:
-
aws.enabled
Ativa ou desativa a utilização de serviços da AWS.- Variável de ambiente:
AWS_ENABLED
- Opções válidas:- true: Para ativar AWS.
- false: Para desativar AWS.
- Variável de ambiente:
-
aws.credentials.accessKey
Access Key da AWS usada para autenticação. Deve ser configurada apenas se aws.enabled=true.- Variável de ambiente:
AWS_CREDENTIALS_ACCESSKEY
.
- Variável de ambiente:
-
aws.credentials.secretKey
Secret Key da AWS usada para autenticação. Deve ser configurada apenas se aws.enabled=true.- Variável de ambiente:
AWS_CREDENTIALS_SECRETKEY
.
- Variável de ambiente:
-
storage.s3.region
Região configurada para o bucket no S3.- Variável de ambiente:
AWS_S3_REGION
.
- Variável de ambiente:
-
storage.s3.bucket-name
Nome do bucket usado para armazenar arquivos no S3.- Variável de ambiente:
AWS_S3_BUCKETNAME
.
- Variável de ambiente:
Atenção: Ao utilizar S3 é necessário configurar as propriedades da AWS.
storage.local.upload-dir
Diretório local onde os arquivos serão armazenados no ambiente de produção.- Variável de ambiente:
STORAGE_FOLDER_NAME
- Padrão:uploads
.
- Variável de ambiente:
storage.type
Define o tipo de armazenamento a ser utilizado.- Variável de ambiente:
STORAGE_TYPE
- Opções válidas:- local: Para armazenamento local no servidor.
- s3: Para armazenamento na nuvem usando Amazon S3.
- Variável de ambiente:
Atenção: Qualquer valor diferente de local
ou s3
pode resultar em erro ou comportamento inesperado.
Ao utilizar s3
é necessário configurar as propriedades do S3.