API de Gerenciamento de livrarias! Esta API foi desenvolvida utilizando Spring Boot e oferece funcionalidades para gerenciar os livros da loja e adicionar funcionários que podem fazer login na loja para ajudar no controle de estoque.
- URL do Swagger: swagger
- Cadastro de Usuários: Os usuários podem se cadastrar fornecendo informações básicas como nome de usuário, nome, senha e informações da loja (que incluem banner, nome da loja, slogan, etc).
- Login: Autenticação segura utilizando Spring Security e JWT (JSON Web Tokens) pelos administradores da loja ou pelo seus funcionários.
- Atualizar Perfil: Os usuários podem alterar o nome
- Atualizar Senha: Os usuários pode trocar de senha
- Administradores da loja podem cadastrar, editar ou excluir livros da livraria.
- Administradores podem cadastrar novos funcionários na loja. Esses funcionários tem um login próprio e poodem visulizar os livros e controler o estoque.
- Swagger UI: A API está documentada utilizando Swagger, permitindo uma fácil visualização e teste dos endpoints diretamente no navegador.
- Todas as operações são são seguras e exigem autenticação do usuário, validação da role atribuída ao usuário, bem como se ele possui relação com a loja que está operando.
- Spring Boot: Framework principal para desenvolvimento da API.
- Spring Security: Para autenticação e autorização.
- Spring Data JPA: Para persistência de dados e interação com o banco de dados.
- JWT (JSON Web Tokens): Para autenticação segura.
- Swagger: Para documentação da API.
- AWS S3: Para armazenamento das imagens.
- Banco de Dados: Foi utilizado um banco de dados relacional PostgreSQL para armazenar as informações necessárias.
- Java 17
- Maven
- Banco de dados PostgreSQL configurado com nome bookstore
-
Clone o repositório:
git clone git@github.com:karoldm/bookstore-api.git cd bookstore-api
-
Configure o arquivo application.properties:
spring.application.name=bookstore server.port=9000 api.security.token.expiration=4 api.security.token.refresh-expiration=168 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ spring.profiles.active=dev
Configure o arquivo application-dev.properties:
spring.datasource.url=jdbc:postgresql://localhost:5432/bookstore
spring.datasource.username=postgres
spring.datasource.password=root
api.security.token.secret="JWT-TOKEN"
api.aws.access-key=YOUR_ACCESS_KEY
api.aws.secret-key=YOUR_SECRET_KEY
api.aws.bucket-url=YOUR_BUCKET_URL
- Excecute o projeto
- A API estará disponível em http://localhost:9000.
- A documentação Swagger estará disponível em http://localhost:9000/swagger-ui.html.
- Os testes estão todos dentro da pasta /test separados por camada (controllers, Services, etc).
- Se você possui o Sonarqube instalado pode verificar a qualidade do sistema com o comando
mvn clean verify sonar:sonar -Dsonar.projectKey=[project-key] -Dsonar.projectName='[project-name]' -Dsonar.host.url=http://localhost:9001 -Dsonar.token=[project-token] -Dsonar.coverage.jacoco.xmlReportPaths=target/site/jacoco/jacoco.xml -Dsonar.java.binaries=target/classes -Dsonar.junit.reportPaths=target/surefire-reports -Dsonar.verbose=true
- Saiba mais em: SonarQube!
API hospedada no Render
Banco de dados hospedado no Koyeb
Contribuições são bem-vindas! Sinta-se à vontade para abrir issues e pull request ❤️